我有一些字段发布 String
和 int
,String
字段工作正常,我在数据库中获取这些值,在 int
类型字段中,我收到此错误消息。
The argument type '(int) → dynamic' can't be assigned to the parameter type '(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),
);
},
);
}
创建数据的 bloc 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');
}
});
最佳答案
尝试:
onChanged: (strNum) => trackerBloc.setsSink((int.parse(strNum))),
关于flutter - 错误 : The argument type '(int) → dynamic' can't be assigned to the parameter type '(String) → void' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56898595/