如何在Flutter中使用多个ChangeNotifierProvider?

2024-05-16

我最近开始使用provider对于我的状态管理,我知道如何一次使用一个。

class Home extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: ChangeNotifierProvider<Reader>(
        create: (context) => new Reader(),
        child: _HomeBody(),
      ),
    );
  }
}

但现在我有两个不同的类,我想添加它们并能够在我的小部件树中访问。

如何添加多个ChangeNotifierProvider in Flutter?


一种选择(不推荐)是嵌套 2 个 Provider:

ChangeNotifierProvider<Reader>(
  create: (_) => Reader(),
  child: ChangeNotifierProvider<SomethingElse>(
    create: (_) => SomethingElse(),
    child: ChangeNotifierProvider<AnotherThing>(
      create: (_) => AnotherThing(),
      child: someWidget,
    ),
  ),
),

不建议这样做,因为正如文档所述:

当在大型应用程序中注入许多值时,Provider 会很快变得非常嵌套:

但是,另一个建议是提供程序包本身 https://pub.dev/packages/provider是使用多提供商 https://pub.dev/documentation/provider/latest/provider/MultiProvider-class.html:

MultiProvider(
  providers: [
    ChangeNotifierProvider<Reader>(create: (_) => Reader()),
    ChangeNotifierProvider<SomethingElse>(create: (_) => SomethingElse()),
    ChangeNotifierProvider<AnotherThing>(create: (_) => AnotherThing()),
  ],
  child: _HomeBody(),
)

两种方法的工作原理相同,但第二种方法更具可读性。正如文档中所说:

这两个示例的行为完全相同。 MultiProvider 仅更改代码的外观。

示例改编自提供者 flutter 包页面 https://pub.dev/packages/provider并根据您的情况进行调整。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在Flutter中使用多个ChangeNotifierProvider? 的相关文章

随机推荐