Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

"MessageListFragmentController" not found. You need to call "Get.put(MessageListFragmentController())" or "Get.lazyPut(()=>MessageListFragmentController())" #2944

Open
wd-wd opened this issue Oct 17, 2023 · 20 comments
Assignees

Comments

@wd-wd
Copy link

wd-wd commented Oct 17, 2023

在page快速打开或关闭的时候,会出现打开page,controller用的上一次界面打开的controller.然后这个controller会执行onclose方法,接下来后面的界面就会找不到这个controller了。 就是controller的周期和page周期不同,controller延迟的结束,和page复用controller,导致实际界面打开,这个controller已经close的错误。version 4.5.6和4.6.6

@Adrift001
Copy link

这就是用框架的弊端, bug一大堆. 5.0也是有不少问题.

@Adrift001
Copy link

真是日了狗了.

@Adrift001
Copy link

以后可别随随便便升级flutter版本了, 哈哈哈

@dahvlhldle
Copy link

dahvlhldle commented Oct 19, 2023

有什么解决办法么?当进入页面的时候快速滑动页面边缘,然后取消返回,页面会执行

 CLOSE TO ROUTE  /Task
=============dispose============
 GOING TO ROUTE   /Task
"TaskController" onDelete() called`
TaskController  deleted from memory

但是页面并没有改变,页面init也不再调用。后续TaskController就找不到了。

@Adrift001
Copy link

我打算回退flutter版本了. 日他哥哥.

@Adrift001
Copy link

4.6.6 还有这个问题吗? 这个问题没修复吗?

@wd-wd
Copy link
Author

wd-wd commented Oct 20, 2023

有什么解决办法么?当进入页面的时候快速滑动页面边缘,然后取消返回,页面会执行

 CLOSE TO ROUTE  /Task
=============dispose============
 GOING TO ROUTE   /Task
"TaskController" onDelete() called`
TaskController  deleted from memory

但是页面并没有改变,页面init也不再调用。后续TaskController就找不到了。

我不知道你这个是啥操作,我遇到的问题是快速进入返回多次,会出现找不到controller。刚开始报错是smartrefesh插件,我换掉后就是getx自己找不到controller了。快速进入返回多次,会出现找不到controller我的解决方案是在一级界面的button点击时手动put,返回时手动delete,目前这样做没有问题,但这个问题的根本原因没有解决。我的方案可能不适合你

@Adrift001
Copy link

@wd-wd 4.6.6没有这个问题了吧, 还有吗? 我这怎么没发现呢?

@wd-wd
Copy link
Author

wd-wd commented Oct 20, 2023

@wd-wd 4.6.6没有这个问题了吧, 还有吗? 我这怎么没发现呢?

我升级到4.6.6快速进入返回,多次,仍然会出现找不到controller的问题

@Adrift001
Copy link

@wd-wd 我这没啥问题, 看看是不是使用不当?

@Adrift001
Copy link

GetPage(
      name: AppRoutes.customerDetail,
      page: () => const CustomerDetailPage(),
      binding: CustomerDetailBinding(),
 )

我是用这种方式

@Adrift001
Copy link

之前4.6.5的时候, 我也是找不到, 表现就是白屏. 更新到4.6.6, 还没发现这个问题.

@littleLeeLee
Copy link

GetPage(
      name: AppRoutes.customerDetail,
      page: () => const CustomerDetailPage(),
      binding: CustomerDetailBinding(),
 )

我是用这种方式

我跟你使用的方式一样,但是也会有退出再进入会丢失controll的问题

@SUNbrightness
Copy link

我也是4.6.5的时候, not found, 表现就是白屏. 更新到4.6.6,就ok了

@wpzym1125
Copy link

真是谢谢你们了,4.6.5我这个问题找了好就的原因,升级到4.6.6就好了,从来没有想过还会是这个原因。。。。。

@Adrift001
Copy link

哈哈哈哈, you are welcome.

@ginnyhuang
Copy link

ginnyhuang commented Jan 10, 2024

感謝樓上的解法。不過我升上 4.6.6 後還是有機率出現錯誤,但機率已經大幅減少了 ( 刻意地快速進入退出多次後也只出現過一次錯誤 )
不過我的使用方法是自己建構 StatelessWidget,配合 Get.put(GetXController) 使用,不知道會不會有差異。

@385841539
Copy link

问题的核心是 flutter 中页面生命周期相应较慢 , 插件 中delete 上一个 controller 的方法晚于 最新 put 的方法 , 所以导致找不到的 , 我大致修了一下 , 是在 put的时候检查有没有 , 有的话强制删除 , 然后重新建一个 controller 这个要打个标记 , 在 delete中 判断是否有这个标记 ,有的话 就别删除了。

385841539 pushed a commit to 385841539/getx that referenced this issue May 17, 2024
jonataslaw#2944
"$S" not found. You need to call "Get.put($S())" or "Get.lazyPut(()=>$S())"

#branch=dr/fix_not_found_viewController
#targetBranch=4ac2e3b Merge pull request jonataslaw#3095 from Aniketkhote/master
@385841539
Copy link

可以按照我的代码去尝试修复

@lwq1365102044
Copy link

这个问题,我的解决思路是把GetController绑定所有关联这个GetController生成的GetBuild组件,只有这个GetController绑定的所有GetBuild组件都销毁后,才会自动销毁这个GetController,不用再手动的去delete GetController。
主要代码就是在GetInstance中添加了一个自定义的mixin类,
参考代码

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

10 participants