Flutter _TypeError(type '(int)=> void'不是类型'(dynamic)=> void'的子类型)

zfciruhq  于 2023-08-07  发布在  Flutter
关注(0)|答案(1)|浏览(163)

我想应该熟悉Flutter动力学,但是在运行时我得到一个错误:

class SelectMonthDialog<int> extends StatefulWidget {
  final int _month;
  final void Function(int month) _onItemSelected;
  final void Function() onCancel;
  const SelectMonthDialog(this._month, this._onItemSelected, this.onCancel,
      {super.key});

  @override
  State<SelectMonthDialog> createState() => SelectMonthDialogState();
}

class SelectMonthDialogState extends State<SelectMonthDialog> {
  late int _month;

  @override
  void initState() {
    super.initState();
    _month = widget._month;
  }

  @override
  Widget build(BuildContext context) => AlertDialog(
        content: NumberPicker(
          value: _month,
          minValue: 1,
          maxValue: 12,
          onChanged: (value) => setState(() => _month = value),
          textMapper: <int>(number) =>
              DateFormat(DateFormat.MONTH).format(DateTime(0, number)),
        ),
        actions: <Widget>[
          TextButton(
            onPressed: () => widget._onItemSelected(_month),
            child: Text(AppLocalizations.of(context)!.ok,
                style: const TextStyle(color: Colors.grey)),
          ),
          TextButton(
            onPressed: () => widget.onCancel(),
            child: Text(AppLocalizations.of(context)!.cancel,
                style: const TextStyle(color: Colors.grey)),
          ),
        ],
      );
}

字符串


的数据
为什么它被认为是动态的?
编辑:
如果我把implicit-casts: false加到DateTime(0, number)analysis_options.yaml上,我看到number是动态的,所以SelectMonthDialog是变量。为什么?为什么?
以下是什么意思?
The argument type 'int' can't be assigned to the parameter type 'int'

s5a0g9ez

s5a0g9ez1#

你实际上已经通过写作定义了它是动态的

class SelectMonthDialog<int> extends StatefulWidget {

字符串
通过在这里写<int>,你可以使它成为一个动态类型。您的类实际上与

class SelectMonthDialog<T> extends StatefulWidget {
  final T _month;
  final void Function(T month) _onItemSelected;
  final void Function() onCancel;
  const SelectMonthDialog(this._month, this._onItemSelected, this.onCancel,
      {super.key});

  @override
  State<SelectMonthDialog> createState() => SelectMonthDialogState();
}


因此,它不是普通的int类型。你需要简单地删除<int>,因为我认为在你的情况下,你不会想要这个。所以简单地写

class SelectMonthDialog extends StatefulWidget {

相关问题