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

Gui*_*ira 3 parameters constructor controller flutter mobx

我是一名 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);
  }
}
Run Code Online (Sandbox Code Playgroud)

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

小智 5

您需要的是声明构造函数 forCreateBillController而不是_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);
  }
}
Run Code Online (Sandbox Code Playgroud)