Я видел, что этот вопрос задавали много раз без ответа. Я хочу докопаться до сути. Я буквально не могу двигаться вперед в своем приложении без этой работы...
Почему Provider не может инициировать перерисовку ListView после выполнения вызова notifyListeners.
Упрощенный пример кода (сегмент данных):
class TheData extends ChangeNotifier {
List<ListTile> data = [
ListTile(title: Text('A')),
];
addTile() {
data.add(ListTile(title: Text('B')));
notifyListeners();
}
}
Скрин с использованием TheData:
class TheScreen extends StatefulWidget {
@override
TheScreenState createState() => TheScreenState();
}
class TheScreenState extends State<TheScreen> {
@override
Widget build(BuildContext context) {
return Consumer<TheData>(
builder: (ctx, _theData, _) {
print('rebuilding count = ${_theData.data.length}');
return ListView(
children: _theData.data,
);
}
);
}
}
Предположим, что класс TheData правильно предоставлен над этим экраном в дереве виджетов и что я запустил 'addTile()'. Печать показывает, что теперь в «данных» есть 2 элемента, но ListView не меняется.
Это сводит меня с ума.