如何将参数传递给 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);
}
}
我是一名 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);
}
}