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
我是 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