在使用 GetX 的 flutter 项目中,哪个导航代码更适合小部件或控制器?

发布于 2025-01-10 08:16:19 字数 196 浏览 0 评论 0原文

我正在使用 GetX 制作一个 flutter 应用程序。

我想知道在小部件和控制器之间的哪里编写 GetX 的导航功能。

ex) GetX.toNamed(), GetX.back()

如果小部件必须处理它,那么当屏幕出现时,如何将事件从控制器传递到小部件控制器联网后需要移动吗?

I'm making a flutter app using GetX.

I want to know where to write the navigation function of GetX, between widgets and controllers.

ex) GetX.toNamed(), GetX.back()

If the widget has to handle it, how do you deliver an event from the controller to the widget when the screen needs to be moved after networking in the controller?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

伴我心暖 2025-01-17 08:16:19

这很简单。

创建另一个控制器

并检查您的条件,然后

if true GetX.back() else return null

示例。

WillPopScope(
    onWillPop: () async {
      bool res = await controller.checkfun() ?? false;
      if (res) {
        return true;
      }
      return false;
    },
    child: ...
)

its simple.

create another controller

and check your condition then

if true GetX.back() else return null

Example.

WillPopScope(
    onWillPop: () async {
      bool res = await controller.checkfun() ?? false;
      if (res) {
        return true;
      }
      return false;
    },
    child: ...
)
冰魂雪魄 2025-01-17 08:16:19

旧的错误答案。

恕我直言,在小部件中。
100 次导航中有 99 次是由用户操作引起的。
您不想在小部件事件处理程序

controller.back()controller.next()

中编写,然后在控制器中编写:

void back () {Get.back(); }void next() {Get.toNamed('/next')}

因此,大部分导航无论如何都将在小部件中完成。
在剩下的 1% 中,您根据更改的状态重建小部件树,并且重建的结果是显示不同的屏幕。

更新。
最近,我遇到了很多情况,从控制器调用导航方法看起来更自然和优雅。
所以,我目前的意见是灵活一些:

如果涉及一些逻辑 - 从控制器调用:

  //widget
  onPressed: () {
       controller.login(
                          emailController.text, 
                          passwordController.text);
  }


//controller
void login(t1, t2){
    ...
    Get.offAll(() => Home());
} 

如果没有逻辑,则直接从小部件调用:

  onPressed: () {
      Get.to(SignUp());
  },
            

Old wrong answer.

IMHO in widgets.
In 99 cases out of 100 navigation is caused by user action.
You don't want to write in your widget event handler

controller.back() or controller.next()

and then in the controller:

void back () {Get.back(); } or void next() {Get.toNamed('/next')}

So, the most of navigation will be done in widgets anyway.
In the remaining 1% you rebuild the widget tree according to the changed state and as a result of rebuilding you show a different screen.

Update.
Recently, I had a lot of situations when calling navigation methods from controllers looks more natural and elegant.
So, my current opinion is to be flexible:

If some logic is involved - call from controller:

  //widget
  onPressed: () {
       controller.login(
                          emailController.text, 
                          passwordController.text);
  }


//controller
void login(t1, t2){
    ...
    Get.offAll(() => Home());
} 

If there is no logic, call directly from the widget:

  onPressed: () {
      Get.to(SignUp());
  },
            
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文