我爱供应商/消费者,它为我改变了扑朔迷离的游戏。但是,在使用Consumer时,我注意到了极少数情况,notifyListener不会重新绘制小部件。我曾经使用GlobalKey修复了使用数据的Widget的问题,但这一次并没有帮助。
我想通过了解为什么此特定小部件无法重新粉刷来更好地了解消费者/提供者。我什至有一张印刷品表明小部件具有更新的数据。
class ActivityFeedPage extends StatefulWidget {
final GlobalKey<_ActivityFeedPageState> key = GlobalKey<_ActivityFeedPageState>();
ActivityFeedPage({Key key}) : super(key: key);
@override
_ActivityFeedPageState createState() => _ActivityFeedPageState();
}
class _ActivityFeedPageState extends State<ActivityFeedPage> {
@override
Widget build(BuildContext context) {
return PageLayout(
title: 'ACTIVITY',
buttonTitle: 'extend',
buttonFunc:
Provider.of<ActivityFeed>(context, listen: false).extendActivityFeed,
child: Consumer<ActivityFeed>(
builder: (ctx, activityFeed, child) {
print('activities length = ${activityFeed.activityFeedItems}');
return ListView(
children: activityFeed.activityFeedItems,
);
},
),
);
}
}
PageLayout是一个简单的页面格式化小部件,我不想在整个应用程序中使用。
因此,尽管首先运行,但有两个初始元素可以正确绘制。一旦我“扩展”了提要,印刷品就会告诉我现在有四个要素。列表视图仍然只显示原始两个。
令我感到奇怪的是,ListView在过去也出现过此问题。我想知道ListView是否具有某些独特的效率,从而防止在notifyListeners()调用之后使用新元素进行重建?
干杯!
编辑:************************************************* *********
我应该补充说,此ActivityFeedPage嵌套在父PageView中。当我将Consumer移至该PageView并将'activityFeed'作为参数传递给ActivityFeedPage时,小部件会在notifyListeners()上正确地重新绘制
这是否意味着即使我正在查看ActivityFeedPage,它也不是屏幕上的主要活动窗口小部件?而我的父级PageView是最低活动的窗口小部件?
源:我导航离开并返回到ActivityFeedPage,并显示了新元素。这给了我一个提示,ActivityFeedPage不知道要重新绘制。