我们尝试开发一个颤动的应用程序,我们创建一个状态小部件作为页面.
我们想要在2个不同的文件中将构建函数与其他状态变量和状态函数分开,构建函数可以访问这个状态类
我们创建一个类:
我们想要在2个不同的文件中将构建函数与其他状态变量和状态函数分开,构建函数可以访问这个状态类
我们创建一个类:
PageClassState extend State<PageClass>{ string value = 'string value'; }
并在一个可以访问此变量的PageClassState的新类中扩展它
我们写 :
PageClassView extend PageClassState{ @override Widget Build(){ return(new Text(this.value)) } }
但是在PageClassState中我们得到一个错误,说我们必须覆盖类中的构建方法.是否有任何建议来解决问题并在flutter中实现MVVM设计模式?
解决方法
我建议将ViewModel代码移动到一个不扩展State的单独类中.保持ViewModel平台独立.
您的窗口小部件状态可以包含viewModel的实例并与之交互.
您的窗口小部件状态可以包含viewModel的实例并与之交互.
你可以找到一个more detailed example here
如果子窗口小部件需要访问您的ViewModel,您可以使用@RémiRousselet建议的继承窗口小部件.
我很快为你实现了这个:
class ViewModelProvider extends InheritedWidget { final ViewModel viewModel; ViewModelProvider({Key key,@required this.viewModel,Widget child}) : super(key: key,child: child); @override bool updateShouldNotify(InheritedWidget oldWidget) => true; static ViewModel of(BuildContext context) => (context.inheritFromWidgetOfExactType(ViewModelProvider) as ViewModelProvider).viewModel; }
子窗口小部件可以通过调用来获取ViewModel
var viewModel = ViewModelProvider.of(context);
如果您有任何问题,请告诉我:)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。