【问题标题】:How to pass a parameter to a Mobx Controller (Flutter)如何将参数传递给 Mobx 控制器 (Flutter)
【发布时间】:2020-08-23 16:56:40
【问题描述】:

我是一名 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);
  }
}

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

【问题讨论】:

  • 我不是 100% 确定,但如果 Dart 与 JS 很接近,那么您可能需要使用constructor 函数?并通过它传递所有动态的东西dart.dev/guides/language/language-tour#constructors
  • 嗨,@Danila。我也是这么想的,但是我使用的是 MobX,当我尝试在抽象类中使用构造函数时它不起作用。

标签: flutter parameters constructor controller mobx


【解决方案1】:

你需要为CreateBillController而不是_CreateBillControllerBase声明构造函数,因为构造函数不被Dart中的子类继承。最简单的方法是在构造函数中将传入的数据源分配给父类中的相应属性,如下面的sn-p所示。您也可以为_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);
  }
}

【讨论】:

    猜你喜欢
    • 2018-07-14
    • 1970-01-01
    • 2022-10-31
    • 1970-01-01
    • 1970-01-01
    • 2019-12-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多