J'ai ajouté deux éléments dans la liste, puis j'ajoute la liste à déposer.
final _list = BehaviorSubject<List<String>>(); get listSink => _list.sink; get listStream => _list.stream;
Mais quand j'essaye d'imprimer la liste dans TextField, elle s'imprime vide?
StreamBuilder( stream: _abcBloc.listStream, builder: (context, snapshot) { return TextField( decoration: InputDecoration( labelText: snapshot.data, .... ); }, ),
AbcBloc.dart
var list = new List<String>(); AbcBloc _abcBloc = AbcBloc(repository: null); @override void didChangeDependencies() { _abcBloc = Provider.of<AbcBloc>(context); super.didChangeDependencies(); } @override void initState() { super.initState(); list.add('Electrical'); list.add('Inspection'); _abcBloc.listSink.add(list); }
Modifier
Après utilisation la suggestion répond, elle affiche une valeur nulle. Pourquoi est-ce arrivé?
3 Réponses :
Problèmes que je vois:
StreamBuilder>
snapshot.data.toString ()
) snapshot.hasData
ou en définissant le paramètre initialData. pourquoi il affiche la valeur nulle?
Premièrement, snapshot.data
est une liste d'éléments de chaîne, donc pour afficher la liste sous forme de chaîne unique, vous devez ajouter un toString ();
Deuxièmement, vous devez pour être plus précis avec les types - vous devez spécifier les données attendues par votre StreamBuilder, c'est-à-dire
StreamBuilder<List<String>>( stream: _abcBloc.listStream, builder: (context, snapshot) { return TextField( decoration: InputDecoration( labelText: snapshot.data.toString(), )); }, ),
En prenant votre exemple et en apportant ces deux modifications, cela a abouti à [Electrical, Inspection] code> affiché dans le champ de texte de mon appareil.
pourquoi il affiche la valeur nulle?
J'ai pu résoudre ce problème. Ce que j'ai fait, c'est mettre la liste et le flux dans didChangeDependencies
.
@override void didChangeDependencies() { _abcBloc = Provider.of<AbcBloc>(context); list.add('Electrical'); list.add('Inspection'); _abcBloc.listSink.add(list); super.didChangeDependencies(); }