Ich habe eine textfield
und ich benutze sqflite
Datenbank in meiner App. Das sqflite
hat einen Wert, den ich meinem zuweisen musstextfield
Hier ist mein textfield
Code
StreamBuilder<String>(
stream: patientHealthFormBloc.doctorName,
builder: (context, snapshot) {
return TextFormField(
initialValue: patientHealthFormBloc.doctorNameValue,
onChanged: (value) {
patientHealthFormBloc.doctorNameChanged(value);
},
...
Jetzt in der initstate
Methode meiner Klasse hole ich Wert aus der Datenbank. Da es sich um eine asynchrone Operation handelt, dauert es einige Zeit.
Meine Blockklasse hat einen Code wie folgt
Function(String) get doctorNameChanged => _doctorName.sink.add;
Sobald ich einen Wert aus der Datenbank erhalte, rufe ich Folgendes an
doctorNameChanged("valuefromdatabase");
aber ich kann den Wert in meinem Textfeld nicht sehen. Außerdem ist in meiner Datenbank ein Wert vorhanden. Ist es möglich , den Wert zu aktualisieren , ohne Verwendung TextEditingController
oder setState
. Ich bin ein Versuch , diejenigen zu vermeiden , da meine Klasse in vielen chuncks und viel zu kompliziert unterteilt ist eine der verwenden oben ich mit dem gleichen Ansatz versucht habe , mit RadioButton
und , CheckBox
und sie scheinen richtig zu aktualisieren. Der Wert wird ebenfalls aktualisiert, _doctorName.stream.value
der in der Datenbank vorhanden ist, aber textfield
keine Daten anzeigt. Außerdem habe ich versucht, die Farbe von zu ändern, textfield
damit es dort kein Problem gibt und ich sehen kann, was ich tippe.
Ich habe eine kleine Demo der App https://github.com/PritishSawant/demo/tree/master/lib erstellt
Anstatt zu verwenden sqflite
, verwende ich, shared preferences
aber das Problem bleibt bestehen
Antworten:
OK, also habe ich endlich die Lösung für mein Problem gefunden.
Das Folgende ist mein Code, den ich gerade
SharedPreferences
anstelle dessqflite
folgenden Beispiels verwendet habe. Dasselbe kann mit getan werdensqflite
quelle
Versuchen Sie den folgenden Ansatz:
Lassen Sie mich wissen, wenn Sie weitere Hilfe benötigen.
quelle
builder: (context, snapshot)
?Was in meinen Kommentaren vorgeschlagen wurde, war ungefähr so:
Ich wollte diese Antwort nicht schreiben, ohne zu verstehen, warum Sie keinen TextEditingController oder einen setState verwenden wollten. Dies sollte jedoch das erreichen, was Sie möchten, wenn Sie das Blockmuster verwenden.
quelle
TextEditController
, kratzte ich diese Idee. Es ist großartig, dass nur durch die Verwendung des Controllers die Lösung einfach und klein wird, um genau zu arbeiten. Gut gemacht.