Flutter 在没有上下文的情况下将逻辑与 UI 分开

Flutter Separating logic from UI Without Context

我是 Flutter 的新手,我一直在开发一个应用程序并尝试实现 MVVM 架构以将逻辑与 UI 分开。 我将提供程序用作状态管理,它在通知新数据方面工作正常。 但是在使用 AppLocalizations class 和 (snackbar,Toast,Alert Dialog) 显示翻译后的错误消息时我有两个主要问题,因为验证输入的逻辑在 ViewModel 中,而这些库需要 CONTEXT 一起工作。 我发现 Get State Management 可以做所有事情,但它有太多问题,例如文档少和责任太多。

注意 我的应用程序是 90% 的数据输入,因此验证是我逻辑的主要部分, 那么对我来说最好的解决方案是什么。 如果我必须使用 Get Package,我应该注意的缺点是什么。 提前致谢。

您可以使用 GetBuilder 构建您的 UI 页面和附加到该 UI 页面的控制器。

这是 SplashPage 和 SplashController 的示例

使用 GetBuilder 的 SplashPage 代码

class SplashPage extends StatelessWidget {
      const SplashPage({Key? key}) : super(key: key);
    
      @override
      Widget build(BuildContext context) {
        return GetBuilder<SplashController>(
            init: SplashController(),
            builder: (controller) => Scaffold(
                  body: Container(
                    child: Center(
                      child: Row(
                        mainAxisSize: MainAxisSize.min,
                        children: [
                          Image.asset(
                            AppImages.logo,
                            width: SizerUtil.width * 0.25,
                            height: SizerUtil.width * 0.25,
                          ),
                          SizedBox(width: 8.sp),
                          Image.asset(
                            AppImages.awaken,
                            width: SizerUtil.width * 0.35,
                            height: SizerUtil.width * 0.35,
                          ),
                        ],
                      ),
                    ),
                  ),
                ));
      }
    }

这是 SplashController 代码

class SplashController extends GetxController {
      @override
      void onInit() {
        super.onInit();
      }
    
      @override
      void onReady() {
        Future.delayed(
            Duration(milliseconds: 1500), () => Get.off(() => OnBoardingPage()));
        super.onReady();
      }
    }

这是 link 教程,GetBuilder 的工作原理 https://morioh.com/p/cffd79df5304