j'ai un textfield
etsqflite
base de données dans mon application. Le sqflite
a une valeur que je dois attribuer à montextfield
Voici mon textfield
code
StreamBuilder<String>(
stream: patientHealthFormBloc.doctorName,
builder: (context, snapshot) {
return TextFormField(
initialValue: patientHealthFormBloc.doctorNameValue,
onChanged: (value) {
patientHealthFormBloc.doctorNameChanged(value);
},
...
Maintenant dans le initstate
méthode de ma classe, je récupère la valeur de la base de données. Il s'agit d'une opération asynchrone donc cela prend du temps.
Ma classe de bloc a un code comme suit
Function(String) get doctorNameChanged => _doctorName.sink.add;
donc dès que je reçois de la valeur de la base de données j'appelle suivant
doctorNameChanged("valuefromdatabase");
mais je ne peux pas voir la valeur dans mon champ de texte. Il y a aussi une valeur présente dans ma base de données. Est-il possible de mettre à jour la valeur sans utiliser TextEditingController
ou setState
. I ma essayant d'éviter ceux que ma classe est divisée en beaucoup de chuncks et trop compliqué à utiliser tout de ce qui précède , je l' ai essayé d' utiliser même approche avec RadioButton
et CheckBox
et ils semblent mettre à jour correctement. La valeur est également mise à jour dans _doctorName.stream.value
laquelle est présente dans la base de données mais textfield
n'affiche aucune donnée. J'ai également essayé de changer la couleur de textfield
donc il n'y a pas de problème et je peux voir ce que je tape.
J'ai fait une petite démo de l'application https://github.com/PritishSawant/demo/tree/master/lib
Au lieu d'utiliser sqflite
, j'utilise shared preferences
mais le problème persiste
Réponses:
OK, j'ai finalement trouvé la solution à mon problème.
Voici mon code, je viens d'utiliser à la
SharedPreferences
place desqflite
l'exemple ci-dessous. La même chose peut être faite avecsqflite
la source
Essayez l'approche suivante:
faites-moi savoir si vous avez besoin de plus d'aide.
la source
builder: (context, snapshot)
?Ce qui suggérait dans mes commentaires était quelque chose comme ceci:
Je ne voulais pas écrire cette réponse sans comprendre pourquoi vous ne vouliez pas utiliser un TextEditingController ou un setState. Mais cela devrait atteindre ce que vous voulez tout en utilisant le modèle Bloc.
la source
TextEditController
, j'ai donc gratté cette idée. C'est formidable que ce n'est qu'en utilisant le contrôleur que la solution devient simple et petite pour fonctionner avec précision. Bon travail.