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

How to pass a parameter to a Mobx Controller (Flutter)

我是一名 Android 开发人员,并且是 Flutter 的新手。我真的很喜欢 Mobx 的工作方式,因为它记得我 Android 的 ViewModel。顺便说一下,当我创建一个 ViewModel 时,我喜欢将存储库作为参数传递给它,这样我就可以使用不同的数据源(即本地或云)对其进行测试。

所以,这是我现在的 class。

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);
  }
}

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

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

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);
  }
}