Flutter MVVM堆叠

问题描述

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

但如果需要此方法来运行某些视图逻辑,您最好提供更多信息。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...