dart 将ChangeNotifierProvider小部件添加为MaterialApp的父项是否是Flutter最佳实践?

tcbh2hod  于 2023-01-28  发布在  Flutter
关注(0)|答案(1)|浏览(118)

我可以使用应用树顶部的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
      ),
    );
  }
}
x4shl7ld

x4shl7ld1#

  • 最好在所有flutter应用程序中优先使用StatelessWidget。但当您需要初始状态或局部状态变量时,最好使用StatefullWidget。所以...根据需要使用。
  • 我要说的是,在树的顶部使用ChangeNotifierProvider是一种常见的做法。

参见此处官方示例来自docs.flutter.dev,他们将其放入主函数中。
https://docs.flutter.dev/development/data-and-backend/state-mgmt/simple#changenotifierprovider

void main() {
  runApp(
    ChangeNotifierProvider(
      create: (context) => CartModel(),
      child: const MyApp(),
    ),
  );
}
;最低剂量限制

在使用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

相关问题