我们尝试开发一个Flutter应用程序,并创建一个有状态的小部件作为页面。
我们希望将构建函数与其他状态变量和状态函数分离在2个不同的文件中,构建函数可以访问我们创建类的状态类this
:
PageClassState extend State<PageClass>{
string value = 'string value';
}
并在一个新的类中扩展它,这个类可以访问PageClassState
this
变量,我们写:
PageClassView extend PageClassState{
@override
Widget Build(){
return(new Text(this.value))
}
}
但是在PageClassState
中,我们得到一个错误,说我们必须覆盖类中的build方法。有没有什么建议来解决这个问题,并在flutter中实现MVVM设计模式?
5条答案
按热度按时间xpszyzbs1#
我建议将ViewModel代码移到一个不扩展
State
的单独类中。保持ViewModel平台独立。您的Widget状态可以具有viewModel的示例并与之交互。您可以找到more detailed example here
如果子Widget需要访问您的ViewModel,您可以使用@Rémi Rousselet建议的继承Widget。我很快就为你实现了这一点:
子部件可以通过调用
让我知道如果你有任何问题:)
qij5mzcb2#
这不是正确的方法。你不应该拆分
State<T>
,它是build
方法。问题是,不要扩展小部件。组成他们。实现类似功能的正确方法是使用
InheritedWidget
。这些将保存您的数据,但不做其他任何事情。它的子节点将能够使用MyInherited.of(context)
请求这些数据。你也可以创建一个
builder
。类似于:jogvjijk3#
我一直在使用这个插件维护大型应用程序的Flutter。mvvm_flutter
它非常轻,易于使用检查一些例子。它很容易维护用户界面远离业务逻辑的
u59ebvdq4#
mvvm包,一个Flutter MVVM(Model-View-ViewModel)实现。
full example
ix0qys7i5#
参考资料请看我的github https://github.com/anandh-ps/flutter_mvvm_example
MediaService.dart
MediaRepository.dart
MediaViewModel.dart
HomeScreen.dart