我最近开始使用provider
进行状态管理,并且我知道一次使用一个。
class Home extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
body: ChangeNotifierProvider<Reader>(
create: (context) => new Reader(),
child: _HomeBody(),
),
);
}
}
但是现在我有两个不同的类,我想添加两个类并能够在我的小部件树中进行访问。
如何在ChangeNotifierProvider
中添加多个Flutter
?
答案 0 :(得分:2)
一个选项(不建议)是嵌套2个提供程序:
ChangeNotifierProvider<Reader>(
create: (_) => Reader(),
child: ChangeNotifierProvider<SomethingElse>(
create: (_) => SomethingElse(),
child: ChangeNotifierProvider<AnotherThing>(
create: (_) => AnotherThing(),
child: someWidget,
),
),
),
不建议这样做,因为如文档所述:
在大型应用程序中注入许多值时,Provider可能会迅速嵌套:
但是,Provider package itself的另一个建议是使用MultiProvider:
providers: [
ChangeNotifierProvider<Reader>(create: (_) => Reader()),
ChangeNotifierProvider<SomethingElse>(create: (_) => SomethingElse()),
ChangeNotifierProvider<AnotherThing>(create: (_) => AnotherThing()),
],
child: _HomeBody(),
)
两种方法的工作原理相同,但第二种方法更具可读性。作为文档文字:
两个示例的行为严格相同。 MultiProvider仅更改代码的外观。
根据provider flutter package page改编并适合您的情况的示例。
答案 1 :(得分:1)
您可以使用MultiProvider
本指南对我有帮助,希望对您有帮助...
MultiProvider(
providers: [
ChangeNotifierProvider<Counter>(builder: (context) => Counter(0)),
ProxyProvider<Counter, ThemeSwitch>.custom(
builder: (context, counter, previous) {
final theme = previous ?? ThemeSwitch(ThemeState.light);
theme.themeState =
(counter.value > 5) ? ThemeState.dark : ThemeState.light;
return theme;
},
dispose: (context, value) => value.dispose(),
providerBuilder: (_, value, child) =>
ChangeNotifierProvider.value(notifier: value, child: child),
),
],
)