【发布时间】:2019-11-15 19:47:22
【问题描述】:
我有一些字段发布 String 和 int,String 字段工作正常,我在数据库中获取这些值,在 int 类型字段我收到此错误消息.
参数类型“(int) → dynamic”不能赋值 到参数类型'(String) → void'。
我正在使用 bloc 发布到 Firebase 数据库。
这是它的外观。
Widget build(BuildContext context) {
final trackerBloc = Provider.of<TrackerBloc>(context);
String docId = DateTime.now().millisecondsSinceEpoch.toString();
return Scaffold(
appBar: AppBar(
title: Text('Create'),
),
body: SingleChildScrollView(
child: Padding(
padding: EdgeInsets.all(20.0),
child: Column(
children: <Widget>[
Padding(
padding: EdgeInsets.all(20.0),
child: Text(
'Create',
style: TextStyle(fontSize: 20.0),
),
),
_buildNumberField(trackerBloc),
...
textField 本身看起来像这样:
Widget _buildNumberField(TrackerBloc trackerBloc) {
return StreamBuilder<Object>(
stream: trackerBloc.numberStream,
builder: (context, snapshot) {
return TextField(
controller: _controllerNumber,
onChanged: trackerBloc.numberSink, /// <- The argument type '(int) → dynamic' can't be assigned to the parameter type '(String) → void'.
decoration: InputDecoration(
labelText: 'Equipment Number', errorText: snapshot.error),
);
},
);
}
创建数据的集团Future 如下所示。在这里,我已经从 numberField 中获得了 null value
Future<void> createData(docId) {
final Tracker createTracker = Tracker(
id: docId,
comment: _commentController.value,
exercise: _exerciseController.value,
number: _numberController.value,
repetition: _repetitionController.value,
sets: _setsController.value,
weight: _weightController.value
);
print(_commentController.value + _numberController.value.toString());
return trackerDb.createData(docId, createTracker);
}
stream 和 Sink 看起来像这样
final _numberController = BehaviorSubject<int>();
Stream<int> get numberStream => _numberController.stream.transform(validateNumbers);
Function(int) get numberSink => _numberController.sink.add;
// the vallidation process
Stream<bool> get submitValid => Observable.combineLatest6(commentStream, exerciseStream, numberStream, repStream, setsStream, weightStream, (e, m, p, q, r, t,) => true);
final validateNumbers = StreamTransformer<int, int>.fromHandlers(handleData: (numbers, sink){
if(numbers > 1) {
sink.add(numbers);
} else {
sink.addError('add at least something man');
}
});
【问题讨论】:
标签: flutter parameters textfield bloc