import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:seedina/provider/rtdb_handler.dart'; // import 'package:seedina/utils/rewidgets/global/editingplant/presetparam.dart'; // import 'package:seedina/utils/rewidgets/global/myappbar.dart'; // import 'package:seedina/utils/rewidgets/global/editingplant/manualparam.dart'; // import 'package:seedina/utils/style/gcolor.dart'; // class EditPlants extends StatefulWidget { const EditPlants({super.key}); @override State createState() => _EditPlantsState(); } class _EditPlantsState extends State { String? _localSelectedPlantForDropdown; @override void initState() { super.initState(); WidgetsBinding.instance.addPostFrameCallback((_) { final provider = Provider.of(context, listen: false); // Gunakan draftSelectedPlantForEditing dari provider sebagai nilai awal untuk dropdown // Provider sudah memiliki logika fallback jika draft kosong atau active kosong. String initialDropdownValue = provider.draftSelectedPlantForEditing; // Jika draftSelectedPlantForEditing masih kosong setelah inisialisasi provider (jarang terjadi) // atau jika nilainya tidak valid (misal tidak ada di list plantsList), // coba ambil dari activeSelectedPlant atau fallback ke preset pertama. final plantsList = provider.parameters.keys.toList(); if (initialDropdownValue.isEmpty || !plantsList.contains(initialDropdownValue)) { if (provider.activeSelectedPlant.isNotEmpty && plantsList.contains(provider.activeSelectedPlant)) { initialDropdownValue = provider.activeSelectedPlant; } else if (plantsList.isNotEmpty) { initialDropdownValue = plantsList.firstWhere((p) => p != "Kustom", orElse: () => plantsList.first); } } // PENTING: Panggil selectPlantForEditingPage agar draft di provider juga sinkron // dengan apa yang akan ditampilkan dropdown. // Ini menangani kasus di mana draft mungkin belum diset ke nilai yang valid // atau perlu disesuaikan (misal, dari Kustom aktif ke form Kustom). if (initialDropdownValue.isNotEmpty && provider.draftSelectedPlantForEditing != initialDropdownValue) { provider.selectPlantForEditingPage(initialDropdownValue); } // Update state lokal dropdown setState(() { _localSelectedPlantForDropdown = initialDropdownValue.isNotEmpty ? initialDropdownValue : (plantsList.isNotEmpty ? plantsList.first : null); }); }); } @override Widget build(BuildContext context) { return Consumer( builder: (context, provider, child) { final plantsList = provider.parameters.keys.toList(); // _localSelectedPlantForDropdown sekarang di-update di initState atau saat onChanged // Kita bisa langsung menggunakan provider.draftSelectedPlantForEditing untuk value dropdown // karena provider yang akan menjadi "source of truth" untuk pilihan draft. // Namun, untuk menghindari rebuild loop, kita tetap pakai _localSelectedPlantForDropdown // dan hanya update dari provider.draftSelectedPlantForEditing jika ada perubahan signifikan. String? valueForDropdown = _localSelectedPlantForDropdown; // Jika nilai lokal tidak ada di daftar (misal setelah provider load dan mengubah list), // atau jika draft di provider berubah, sinkronkan. if ((valueForDropdown == null || !plantsList.contains(valueForDropdown)) && plantsList.isNotEmpty) { valueForDropdown = provider.draftSelectedPlantForEditing.isNotEmpty && plantsList.contains(provider.draftSelectedPlantForEditing) ? provider.draftSelectedPlantForEditing : plantsList.firstWhere((p) => p != "Kustom", orElse: () => plantsList.first); // Update state lokal di post frame callback untuk menghindari error build WidgetsBinding.instance.addPostFrameCallback((_) { if (mounted && _localSelectedPlantForDropdown != valueForDropdown) { setState(() { _localSelectedPlantForDropdown = valueForDropdown; }); // Tidak perlu panggil provider.selectPlantForEditingPage di sini lagi // karena sumber perubahan kemungkinan dari provider itu sendiri atau initState. } }); } // Tambahan: Jika provider.draftSelectedPlantForEditing berubah (misal setelah simpan), // update _localSelectedPlantForDropdown if (provider.draftSelectedPlantForEditing != _localSelectedPlantForDropdown && plantsList.contains(provider.draftSelectedPlantForEditing)) { WidgetsBinding.instance.addPostFrameCallback((_) { if (mounted) { setState(() { _localSelectedPlantForDropdown = provider.draftSelectedPlantForEditing; }); } }); } return Scaffold( resizeToAvoidBottomInset: false, backgroundColor: Color(0XFF5B913B), appBar: CustomAppBar( // title: Text( 'Edit Parameter Tanaman', style: TextStyle( fontWeight: FontWeight.w900, fontFamily: 'Quicksand', color: GColors.myKuning), // ), actions: [], showBackButton: true), body: Column( children: [ Padding( padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 16), child: Container( padding: EdgeInsets.symmetric(horizontal: 12, vertical: 4), decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.circular(16) ), child: DropdownButtonFormField( value: valueForDropdown, // Gunakan _localSelectedPlantForDropdown items: plantsList .map((plant) => DropdownMenuItem( value: plant, child: Text(plant), )) .toList(), onChanged: (newValue) { if (newValue != null) { setState(() { _localSelectedPlantForDropdown = newValue; // Update state lokal }); provider.selectPlantForEditingPage(newValue); // Beritahu provider } }, isExpanded: true, icon: Icon(Icons.arrow_drop_down, color: GColors.myBiru,), // decoration: InputDecoration( labelText: 'Pilih Tanaman Anda', labelStyle: TextStyle(color: GColors.myBiru.withOpacity(0.9)), // border: InputBorder.none, ), ), ), ), SizedBox(height: 8), Expanded( child: Container( width: MediaQuery.of(context).size.width, decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.only(topLeft: Radius.circular(16), topRight: Radius.circular(16)), ), child: SingleChildScrollView( child: Padding( padding: EdgeInsets.only(left: 16, right: 16, top: 16, bottom: 16 + MediaQuery.of(context).viewInsets.bottom), child: Column( children: [ if (provider.isLoading && _localSelectedPlantForDropdown == null) Center(child: CircularProgressIndicator()) else if (_localSelectedPlantForDropdown == 'Kustom') // Bandingkan dengan state lokal EditInfo() // else if (_localSelectedPlantForDropdown != null && _localSelectedPlantForDropdown!.isNotEmpty) PresetParameter() // else Center(child: Text("Pilih tanaman dari dropdown.", style: TextStyle(color: Colors.grey))) ], ), ), ), ), ), ], ), ); }, ); } }