如何解决Flutter 如何使用 rxdart 在提交时检查文本字段是否为空
我有 2 个文本字段来检查是否为空 On value change 但问题是如果我 按下提交功能 并且文本字段为空它不会显示错误。如何在提交时实现检查值并在文本字段上显示错误?
界面
Widget buildColumn() => Form(
child: Column(
mainAxisAlignment: MainAxisAlignment.start,children: <Widget>[
Padding(
padding: const EdgeInsets.all(8.0),child: buildTitle(),),SizedBox(
height: 10,Padding(
padding: const EdgeInsets.all(8.0),child: buildDesription(),buildSubmit()
],));
Widget buildTitle() => StreamBuilder<String>(
stream: manager.title,builder: (context,snapshot) {
debugPrint(snapshot.toString());
return TextField(
onChanged: manager.inTitle.add,decoration: InputDecoration(
labelText: 'Title',labelStyle: TextStyle(fontWeight: FontWeight.bold),errorText:
snapshot.error == null ? null : snapshot.error.toString()),);
});
Widget buildDesription() => StreamBuilder<String>(
stream: manager.description,snapshot) {
return TextField(
onChanged: manager.inDescription.add,decoration: InputDecoration(
labelText: 'Description',);
});
Widget buildSubmit() => StreamBuilder<Object>(
stream: manager.isFormValid,snapshot) {
return ElevatedButton(
onPressed: () {
if (snapshot.hasData) {
manager.submit();
debugPrint("YEs");
}
},child: Text("SEND"));
});
}
经理 提交时不检查标题和描述是否为空
class CreatePostManager with Validation {
final _repository = PostRepository();
final _postsFetcher = PublishSubject<Post>();
Stream<Post> get addPost => _postsFetcher.stream;
final _title = BehaviorSubject<String>();
Stream<String> get title => _title.stream.transform(validateTitle);
Sink<String> get inTitle => _title.sink;
final _description = BehaviorSubject<String>();
Stream<String> get description =>
_description.stream.transform(validateDescription);
Sink<String> get inDescription => _description.sink;
final _loading = BehaviorSubject<bool>();
Stream<bool> get loading => _loading.stream.transform(checkLoading);
Sink<bool> get inLoading => _loading.sink;
Stream<bool> get isFormValid =>
Rx.combineLatest2(title,description,(a,b) => true);
Future submit() async {
inLoading.add(true);
String title = _title.value;
String description = _description.value;
Post itemModel = await _repository.addPost(title,description);
_postsFetcher.sink.add(itemModel);
inLoading.add(false);
return itemModel;
}
dispose() {
_postsFetcher.close();
}
}
验证器
mixin Validation {
final validateTitle =
StreamTransformer<String,String>.fromHandlers(handleData: (value,sink) {
if (value.isEmpty) {
sink.addError("Title cannot be empty");
}else {
sink.add(value);
}
});
final validateDescription =
StreamTransformer<String,sink) {
if (value.isEmpty) {
sink.addError("Description cannot be empty");
}else {
sink.add(value);
}
});
final checkLoading =
StreamTransformer<bool,bool>.fromHandlers(handleData: (value,sink) {
sink.add(value);
});
}
提交时,我想检查文本字段是否为空并显示错误消息。目前只在用户输入时显示。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。