如何将参数传递给Mobx控制器Flutter

问题描述

我是一名Android开发人员,是Flutter的新手。我真的很喜欢Mobx的工作方式,因为它使我想起了Android的viewmodel。顺便说一句,当我创建viewmodel时,我喜欢通过存储库作为参数来创建它,因此我可以使用不同的数据源(即本地或云)对其进行测试。

所以,这是我现在的课程。

import 'package:mobx/mobx.dart';

part 'create_bill_controller.g.dart';

class CreateBillController = _CreateBillControllerBase
    with _$CreateBillController;

abstract class _CreateBillControllerBase with Store {
  final appBarTitle = 'Criar Conta';
  final criarConta = 'Criar conta';
  final nomeDaConta = 'Nome da conta';
  final seuNome = 'Seu nome';

  @action
  createBill(String billname,String userName) {
    // here,dataSource should be given in a constructor
    datasource.createBill(billName,userName);
  }
}

如何将数据源(存储库)作为参数传递给此类?

解决方法

您需要为CreateBillController而不是_CreateBillControllerBase声明构造函数,因为Dart中的子类没有继承构造函数。最简单的方法是将传入的数据源分配给构造函数中父类中的相应属性,如下面的代码片段所示。您还可以为_CreateBillControllerBase实现一个构造函数,并在super(datasource)的构造函数中调用CreateBillController

import 'package:mobx/mobx.dart';

part 'create_bill_controller.g.dart';

class CreateBillController extends _CreateBillControllerBase with _$CreateBillController {
  // HERE! Implement constructor for CreateBillController
  // Do this if you have a constructor for _CreateBillControllerBase
  //
  //   CreateBillController(DataSource datasource) : super(datasource)
  //
  CreateBillController(DataSource datasource) {
    super.datasource = datasource;
  }
}

abstract class _CreateBillControllerBase with Store {
  final appBarTitle = 'Criar Conta';
  final criarConta = 'Criar conta';
  final nomeDaConta = 'Nome da conta';
  final seuNome = 'Seu nome';
  // HERE! Declare datasource
  DataSource datasource;

  @action
  createBill(String billname,String userName) {
    datasource.createBill(billName,userName);
  }
}