Saya punya textfield
dan saya menggunakan sqflite
basis data di aplikasi saya. The sqflite
memiliki nilai yang saya perlu untuk menetapkan ke sayatextfield
Ini textfield
kode saya
StreamBuilder<String>(
stream: patientHealthFormBloc.doctorName,
builder: (context, snapshot) {
return TextFormField(
initialValue: patientHealthFormBloc.doctorNameValue,
onChanged: (value) {
patientHealthFormBloc.doctorNameChanged(value);
},
...
Sekarang dalam initstate
metode kelas saya, saya mengambil nilai dari database. Itu menjadi operasi yang tidak sinkron sehingga butuh waktu.
Kelas blok saya memiliki kode seperti berikut
Function(String) get doctorNameChanged => _doctorName.sink.add;
jadi segera setelah saya menerima nilai dari database saya sebut berikut
doctorNameChanged("valuefromdatabase");
tetapi saya tidak bisa melihat nilai di bidang teks saya. Juga ada nilai yang ada di basis data saya. Apakah mungkin untuk memperbarui nilai tanpa menggunakan TextEditingController
atau setState
. Saya mencoba untuk menghindari mereka karena kelas saya terbagi dalam banyak chuncks dan terlalu rumit untuk menggunakan salah satu di atas saya telah mencoba menggunakan pendekatan yang sama dengan RadioButton
dan CheckBox
dan mereka tampaknya memperbarui dengan benar. Nilai ini juga diperbarui di _doctorName.stream.value
mana ada dalam database tetapi textfield
tidak menunjukkan data apa pun. Saya juga mencoba mengubah warna textfield
jadi tidak ada masalah di sana dan saya bisa melihat apa yang saya ketik.
Saya telah membuat demo kecil aplikasi https://github.com/PritishSawant/demo/tree/master/lib
Alih-alih menggunakan sqflite
, saya menggunakan shared preferences
tetapi masalahnya tetap ada
Jawaban:
Oke jadi saya akhirnya menemukan solusi untuk masalah saya.
Berikut ini adalah kode saya, saya baru saja menggunakan
SharedPreferences
bukansqflite
untuk contoh di bawah ini. Hal yang sama dapat dilakukan dengansqflite
sumber
Coba pendekatan berikut:
beri tahu saya jika Anda membutuhkan lebih banyak bantuan.
sumber
builder: (context, snapshot)
?Apa yang disarankan dalam komentar saya adalah sesuatu seperti ini:
Saya tidak ingin menulis jawaban ini tanpa memahami mengapa Anda tidak ingin menggunakan TextEditingController atau setState. Tetapi ini harus mencapai apa yang Anda inginkan saat menggunakan pola Blok.
sumber
TextEditController
, jadi saya membatalkan ide itu. Sangat menyenangkan bahwa hanya dengan menggunakan pengontrol, solusinya menjadi sederhana dan kecil untuk bekerja secara akurat. Kerja bagus.