我可以使用应用树顶部的ChangeNotifierProvider吗?这在Flutter中是一个好的实践吗?
将MyAppWidget作为有状态小部件运行也是一个很好的做法吗?
class _MyAppState extends State<MyApp> {
@override
void initState() {
PushNotificationService.messageStream.listen((message) {
//some code
});
super.initState();
}
@override
Widget build(BuildContext context) {
return ChangeNotifierProvider(
create: (_) => MyProvider(),
child: MaterialApp(
//more code
),
);
}
}
1条答案
按热度按时间x4shl7ld1#
StatelessWidget
。但当您需要初始状态或局部状态变量时,最好使用StatefullWidget
。所以...根据需要使用。ChangeNotifierProvider
是一种常见的做法。参见此处官方示例来自docs.flutter.dev,他们将其放入主函数中。
https://docs.flutter.dev/development/data-and-backend/state-mgmt/simple#changenotifierprovider
;最低剂量限制
在使用provider时,我们必须避免的是窗口小部件树顶部的
Consumer
。在此阅读:https://docs.flutter.dev/development/data-and-backend/state-mgmt/simple#consumer
最好的做法是把消费者小部件放在树中尽可能深的地方,你不想仅仅因为某个地方的细节发生了变化就重建UI的大部分。
当我们调用
notifyListeners();
这将重建当前的Consumer
小工具。当你使用它在树的顶部,每次收到notifylistener你的小工具树将重建从消费者下面。您可以在此处看到示例:https://docs.flutter.dev/development/data-and-backend/state-mgmt/simple#consumer