flutter - 错误 : The argument type '(int) → dynamic' can't be assigned to the parameter type '(String) → void'

标签 flutter parameters textfield bloc

我有一些字段发布 StringintString 字段工作正常,我在数据库中获取这些值,在 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);
  }

streamSink 看起来像这样

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/

相关文章:

image - 关于带有小图标的 TextField

键盘上方的额外/不需要的空间

flutter - 使用JsonPlaceHolder时出现错误: The argument type 'String' can't be assigned to the parameter type 'Uri' .

android - 无法从静态方法 Flutter 访问实例成员

Swift:在初始化器中传递一个 func 作为参数

flutter 文本字段 "Changing the content within the the composing region may cause the input"

mysql - 从MySQL向Flutter插入列表到FormBuilderCheckboxList中的选项

C++ 错误 : no matching function for call to

java - java中的 '...'是什么?

Flutter TextField LabelText 中心