如何在 Flutter 中使用多个 ChangeNotifierProvider?

kam*_*vyz 2 provider dart flutter

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

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

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

如何添加一个以上的ChangeNotifierProviderFlutter

Nas*_*sky 5

一种选择(不推荐)是嵌套 2 个提供者:

ChangeNotifierProvider<Reader>(
  create: (_) => Reader(),
  child: ChangeNotifierProvider<SomethingElse>(
    create: (_) => SomethingElse(),
    child: ChangeNotifierProvider<AnotherThing>(
      create: (_) => AnotherThing(),
      child: someWidget,
    ),
  ),
),
Run Code Online (Sandbox Code Playgroud)

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

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

但是,来自Provider 包本身的另一个建议是使用MultiProvider

MultiProvider(
  providers: [
    ChangeNotifierProvider<Reader>(create: (_) => Reader()),
    ChangeNotifierProvider<SomethingElse>(create: (_) => SomethingElse()),
    ChangeNotifierProvider<AnotherThing>(create: (_) => AnotherThing()),
  ],
  child: _HomeBody(),
)
Run Code Online (Sandbox Code Playgroud)

两种方法的工作原理相同,但第二种方法更具可读性。作为文档的话:

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

示例改编自提供者颤振包页面并适应您的情况。