微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

发现奇怪的bug:GetX+Provider 相处得不太好

如何解决发现奇怪的bug:GetX+Provider 相处得不太好

所以我用 GetX 和 Provider 尝试了一些东西。但我发现了一个奇怪的问题。当我尝试使用 Navigator 时,它工作正常。但不是 GetX。

Flutter SDK 版本:2.0.1 稳定

包:GetX,提供者

操作系统:MacOS BigSur

运行:模拟器最新的xcode

IDE:VS 代码

我有创建登陆屏幕的路线(它有 4 个页面和 4 个视图模型的页面视图) 这是路线的代码

  GetPage<void>(
    name: '/landing',page: () => ChangeNotifierProvider<Landingviewmodel>(
      create: (_) => Landingviewmodel(),builder: (_,__) => MultiProvider(
        providers: <SingleChildWidget>[
          ChangeNotifierProvider<Dashboardviewmodel>(
            create: (_) => Dashboardviewmodel(),),],__) => LandingScreen(),

在着陆视图模型中我有这些页面(忽略 SizedBox,它们尚未实现)

  final List<Widget> pages = <Widget>[
    DashboardPage(),TicketPage(),const SizedBox(),];

当我尝试将提供者值传递给其他屏幕时出现问题。 我使用此代码移动到其他屏幕:

方法#1:

      print('findme: findTicket');
      Get.to<dynamic>(
        ChangeNotifierProvider<Dashboardviewmodel>.value(
          value: this,child: const ChooseTicketScreen(),);

第一种方法按预期工作。 (Get.to 等于 Navigator.push) 在我尝试使用方法 #2 移动到下一个屏幕后,它们不会移动(当我使用打印方法时,它工作正常,但似乎跳过了 Get.to 块)

方法#2:

    print('findme: chooseTicket');
    Get.to<dynamic>(
      ChangeNotifierProvider<Dashboardviewmodel>.value(
        value: this,child: const DetailTripScreen(),);

当我运行此方法时,(在第一种方法之后)Get.to 根本不起作用(但如果我删除提供者,它们将起作用,但提供者未通过,屏幕出错)

>

当我尝试在 Get.back() 之前使用 Get.to() 时,它们工作正常,但这对我来说不是解决方案。 我只是不明白那里发生了什么

当我在另一个项目上使用 Navigator 时没有问题(但我必须不通过将 BuildContext 更改为 _ 来传递新上下文,像这样 MaterialPageRoute(builder: (_) => YourScreen()) 如果我不这样做,上下文将被更改,我将有一个新的上下文,但找不到提供者值[因为它在旧上下文/以前的上下文中])

也许有人有同样的问题? 我做错了什么吗?

顺便说一下,我是故意拆分供应商的,我完全理解我所做的事情。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。