Mam textfield
i używam sqflite
bazy danych w mojej aplikacji. Thesqflite
Ma wartość, którą muszę przypisać do mojegotextfield
Oto mój textfield
kod
StreamBuilder<String>(
stream: patientHealthFormBloc.doctorName,
builder: (context, snapshot) {
return TextFormField(
initialValue: patientHealthFormBloc.doctorNameValue,
onChanged: (value) {
patientHealthFormBloc.doctorNameChanged(value);
},
...
Teraz w initstate
metodzie mojej klasy pobieram wartość z bazy danych. Jest to operacja asynchroniczna, więc wymaga czasu.
Moja klasa blokowa ma następujący kod
Function(String) get doctorNameChanged => _doctorName.sink.add;
więc jak tylko otrzymam wartość z bazy danych, wywołuję następujące
doctorNameChanged("valuefromdatabase");
ale nie widzę wartości w moim polu tekstowym. W mojej bazie danych jest także wartość. Czy można zaktualizować wartość bez użycia TextEditingController
lub setState
. MA I starają się unikać tych, jak moja klasa jest podzielona na wiele chuncks i zbyt skomplikowane, aby użyć dowolnego z powyższych Próbowałem, używając tego samego podejścia z RadioButton
a CheckBox
i wydają się poprawnie zaktualizować. Wartość jest również aktualizowana, w _doctorName.stream.value
której jest obecna w bazie danych, ale textfield
nie pokazuje żadnych danych. Próbowałem też zmienić kolortextfield
więc nie ma problemu, a także mogę zobaczyć, co wpisuję.
Zrobiłem małe demo aplikacji https://github.com/PritishSawant/demo/tree/master/lib
Zamiast używać sqflite
, używam, shared preferences
ale problem nadal występuje
Odpowiedzi:
OK, więc w końcu znalazłem rozwiązanie mojego problemu.
Poniżej znajduje się mój kod, którego właśnie użyłem
SharedPreferences
zamiastsqflite
w poniższym przykładziesqflite
źródło
Wypróbuj następujące podejście:
Daj mi znać jeśli będziesz jeszcze potrzebować pomocy.
źródło
builder: (context, snapshot)
?W moich komentarzach sugerowałem coś takiego:
Nie chciałem pisać tej odpowiedzi, nie rozumiejąc, dlaczego nie chcesz używać TextEditingController lub setState. Ale to powinno osiągnąć to, co chcesz, korzystając ze wzoru Bloc.
źródło
TextEditController
, więc zeskrobałem ten pomysł. To wspaniałe, że tylko przy użyciu kontrolera rozwiązanie staje się proste i małe, aby działało dokładnie. Dobra robota.