【问题标题】:Flutter provider disposeFlutter 提供者处置
【发布时间】:2022-01-12 12:53:04
【问题描述】:

我有一个在不同页面中使用的提供程序,由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。如何防止提供程序被丢弃并在所有页面中继续使用它?

【问题讨论】:

    标签: flutter dispose provider navigator


    【解决方案1】:

    使用 MultiProvider 包裹应用的根目录。一般应用的根目录是 MaterialApp。

    【讨论】:

    • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
    • 你的意思是:Future&lt;void&gt; main() async { WidgetsFlutterBinding.ensureInitialized(); setupLocator(); runApp(MultiProvider(providers: [ ChangeNotifierProvider&lt;MyProvider&gt;( create: (_) =&gt; LanguageChangeProvider()), ChangeNotifierProvider&lt;LanguageChangeProvider&gt;( create: (_) =&gt; LanguageChangeProvider()), ], child: MyApp())); } 我不需要任何Consumer?问题是我watch 时没有收到任何通知。你知道问题出在哪里吗?
    猜你喜欢
    • 2020-04-23
    • 2021-09-23
    • 2020-04-29
    • 2020-03-22
    • 2021-05-18
    • 2020-09-01
    • 2021-03-28
    • 2020-06-07
    • 1970-01-01
    相关资源
    最近更新 更多