Flutter提供商处置



我有一个用于Navigator管理的不同页面的提供程序

我在第一个路由器中创建了提供商:

class FirstPageView extends StatelessWidget {
static MyProvider myProvider = MyProvider();
const FirstPageView({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return MultiProvider(
providers: [
ChangeNotifierProvider<FirstPageRouter>(
create: (context) => FirstPageRouter()),
ChangeNotifierProvider<MyProvider>(
create: (context) => myProvider,
),
],
child: Consumer2<FirstPageRouter, MyProvider>(
builder: (context, model, myProvider, child) => Scaffold(
appBar: MyAppBar(model),
body: Body(model, myProvider),
),
),
);
}
}

我无法重新创建MyProvider。此提供程序连接到一个硬件端口,我无法在每个页面中重新创建它。所以我在下一页中使用了相同的提供商:

class SecondPageView extends StatelessWidget {
static MyProvider myProvider = MyProvider();
const SecondPageView({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return MultiProvider(
providers: [
ChangeNotifierProvider<SecondPageRouter>(
create: (context) => SecondPageRouter()),
ChangeNotifierProvider<MyProvider>(
create: (context) => FirstPageView.myProvider,
),
],
child: Consumer2<SecondPageRouter, MyProvider>(
builder: (context, model, myProvider, child) => Scaffold(
appBar: MyAppBar(model),
body: Body(model, myProvider),
),
),
);
}
}

现在我的问题是,当我返回并在每个页面中弹出导航器Navigator.of(context).pop();时,Flutter会处理FirstPageView.myProvider。如何防止处置提供程序并在所有页面中继续使用它?

用MultiProvider包装应用程序的根。通常,应用程序的根目录是MaterialApp。

最新更新