如何解决发现奇怪的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 举报,一经查实,本站将立刻删除。