问题描述
我是Flutter和MVVM的新手。我不明白如何在计时器结束后触发视图中的方法。我知道我可以通知Listeners并在Widget树中使用viewmodel中的属性。但是,如果我想调用方法怎么办?
查看:
import 'package:Flutter/material.dart';
import 'package:gagm_app/splash/splash_page_view_model.dart';
import 'package:stacked/stacked.dart';
class SplashPage extends StatefulWidget {
@override
_SplashPageState createState() => _SplashPageState();
}
class _SplashPageState extends State<SplashPage> {
SplashPageviewmodel _viewmodel;
void methodToTrigger() {
//doSomething
}
@override
Widget build(BuildContext context) {
return viewmodelBuilder.reactive(
onModelReady: (model) => {_viewmodel = model},builder: (context,model,child) => Container(
decoration: Boxdecoration(
image: decorationImage(
image: NetworkImage(
'https://images.unsplash.com/photo-1547665979-bb809517610d?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=675&q=80'),fit: BoxFit.cover),),viewmodelBuilder: () => SplashPageviewmodel());
}
}
viewmodel:
import 'dart:async';
import 'package:stacked/stacked.dart';
class SplashPageviewmodel extends Baseviewmodel {
bool _hasFinishedTimer = false;
bool get hasFinshedTimer => _hasFinishedTimer;
void startTimer() {
Timer _timer;
_timer = Timer.periodic(Duration(seconds: 2),(timer) {
_hasFinishedTimer = true;
_timer.cancel();
//view.methodToTrigger()
notifyListeners();
});
}
}
解决方法
在视图模型中添加您的方法,然后可以从视图中调用该方法。
,我想这个插件将帮助您理解。另外,您可以查看源代码以了解如何使用tigger方法。
https://pub.dev/packages/mvvm_flutter
,
遵循 MVVM 原则,您在 View 内部没有逻辑,除了如何显示视图。我想你应该把你的方法移到你的 ViewModel 中。
但如果需要此方法来运行某些视图逻辑,您最好提供更多信息。