使用Bloc,RxDart和Flutter创建用户个人资料页面

时间:2019-05-18 03:37:22

标签: firebase flutter bloc rxdart

我的目标是使用bloc模式在Flutter中创建一个编辑配置文件页面。

我一直在寻找一种更好/更干净的方法来使用Bloc在Flutter中创建用户个人资料页面,但是我什么都找不到。

现在我必须列出每个字段。这是2个字段的示例:

final _firstNameController = BehaviorSubject<String>();
final _lastNameController = BehaviorSubject<String>();

Function(String) get firstNameChanged => _firstNameController.sink.add;
Function(String) get lastNameChanged => _lastNameController.sink.add;

Stream<String> get firstNameStream => _firstNameController.stream;
Stream<String> get lastNameStream => _lastNameController.stream;

String get firstName => _firstNameController.value;
String get lastName => _lastNameController.value;


@override
  void dispose() {
_firstNameController?.close();
_lastNameController?.close();
}

还有很多字段,如果可以避免的话,我不想拥有所有这些代码。

我希望仅拥有1个用户块并更新该用户的特定字段。我已将以下内容添加到用户块中。

final _userFetcher = BehaviorSubject<User>();

Observable<User> get userStream => _userFetcher.stream;
User get user => _userFetcher.value;
Function(User) get changeUser => _userFetcher.sink.add;

@override
  void dispose() async {
    await _userFetcher.drain();
    _userFetcher.close();
  }

这是我的用户模型的一个示例:

class User {

  final Name name;

  User.fromJson(Map<String, dynamic> json)
      : name = Name.fromJson(json);

  Map<String, dynamic> toJson() => {
    "first": name.first,
    "last": name.last,
  };
}

问题是我不知道如何使用文本字段来编辑“用户”模型中的“拳头名称”和“姓氏”字段。

这是否可能,我是用错误的方式进行操作,还是应该坚持逐一列出每个字段?

2 个答案:

答案 0 :(得分:1)

要单独管理每个字段的所有这些流可能很麻烦。我建议您尝试一下该库flutter bloc。这是一个很好的程序,可以很好地处理状态管理。您只需要定义状态和事件,然后为每个事件生成一个状态。

例如,您想在用户键入时验证密码字段。您定义一个事件(例如,PasswordChanged)。这将在块中调用方法。您可以在其中编写业务逻辑以检查验证。

在验证逻辑之后,您可以产生一个新的State(错误,成功)。这将导致您的用户界面被重建,然后您可以根据状态更新用户界面。

您应该签出该库的文档。那里也有一些很好的例子。

答案 1 :(得分:0)

感谢大家的帮助!

最终,我可以通过在textField中实现以下内容来编辑上面列出的用户模型中嵌套的名字和姓氏字段:

onChanged:(text) {
        User thisUser = _bloc.user;
        thisUser.name.last = text;
      }