Итак, я реализую что-то вроде следующего:
class TempProvider extends ChangeNotifier(){
List<Widget> _list = <Widget>[];
List<Widget get list => _list;
int _count = 0;
int get count => _count;
Future<List<Widget>> getList() async{
addToList(Text('$count'));
List _result = await db....
_result.forEach((_item){
addToList(Button(
onTap: () => increment();
child: Text('Press'),
));
});
}
addToList(Widget widget){
_list.add(widget);
notifyListeners();
}
increment(){
_count += 1;
notifyListeners();
}
}
class Parent extends StatelessWidget{
@override
Widget build(BuildContext context) {
return FutureProvider(
create: (context) => TempProvider().getList(),
child: Child(),
);
}
}
class Child extends StatelessWidget{
@override
Widget build(BuildContext context) {
var futureProvider = Provider.of<List<Widget>>(context);
return Container(
child: futureProvider == null
? Text('Loading...'
: ListView.builder(
itemCount: futureProvider.length,
itemBuilder: (BuildContext context, int index){
return futureProvider[index];
}
),
));
}
}
По сути, это означает, что список виджетов из будущего - это содержимое ListView Builder, которое у меня есть, поскольку его объекты генерируются из запрос к базе данных. Эти виджеты представляют собой кнопки, которые при нажатии должны обновлять значение «Количество» и обновлять виджет текста, отображающий последнее значение «Количество».
Я смог протестировать кнопки, и они, кажется, работают и увеличивают значение. _count значение через бэкэнд, однако отображаемое «Количество» в текстовом виджете не обновляется, даже если обновляются значения провайдера.
Я хотел бы попросить вас о помощи, что здесь не так, насколько я понимаю все должно обновляться всякий раз, когда значение изменяется, это анти-шаблон поставщика, нужно ли пересобирать весь ListView, или я пропустил что-то еще?
Я все еще знакомлюсь с этим пакетом и дротик / флаттер в целом, надеясь, что вы поделитесь со мной своим опытом в этом. Заранее большое спасибо.