0

我的目标是使用 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,
  };
}

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

这可能吗,我是不是走错了路,还是应该坚持单独列出每个字段?

4

2 回答 2

1

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

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

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

你应该查看这个库的文档。它也有一些很好的例子。

于 2019-05-19T06:39:08.747 回答
0

谢谢你们每一个人的帮助!

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

onChanged:(text) {
        User thisUser = _bloc.user;
        thisUser.name.last = text;
      }
于 2019-05-19T15:23:48.530 回答