Dart内部构造函数

时间:2017-07-27 19:31:14

标签: dart flutter

我在执行Widget的构造函数时遇到了奇怪的运行时错误。

这是班级:

class NumberPicker extends StatefulWidget {

  NumberPicker.integer({
    Key key,
    @required int initialValue,
    @required int minValue,
    @required int maxValue,
  })
      : assert(initialValue != null),
        assert(minValue != null),
        assert(maxValue != null),
        assert(maxValue > minValue),
        assert(initialValue >= minValue &&
            initialValue <= maxValue),
        this._internal(
          minDoubleValue: -1.0,
          maxDoubleValue: -1.0,
          initialDoubleValue: -1.0,
          decimalPlaces: 0,
          minIntValue: minValue,
          maxIntValue: maxValue,
          initialIntValue: initialValue
      );


  NumberPicker._internal({
    Key key,
    @required this.minDoubleValue,
    @required this.maxDoubleValue,
    @required this.initialDoubleValue,
    @required this.decimalPlaces,
    @required this.minIntValue,
    @required this.maxIntValue,
    @required this.initialIntValue,
  }) :
        super(key: key);


  final double minDoubleValue;
  final double maxDoubleValue;
  final double initialDoubleValue;
  final int decimalPlaces;
  final int minIntValue;
  final int maxIntValue;
  final int initialIntValue;

  @override
  _NumberPickerState createState() => new _NumberPickerState();
}

当我致电new NumberPicker.integer(initialValue: 50, minValue: 1, maxValue: 100)

我收到以下错误:

I/flutter ( 3873): ══╡ EXCEPTION CAUGHT BY GESTURE ╞═══════════════════════════════════════════════════════════════════
I/flutter ( 3873): The following _CompileTimeError was thrown while handling a gesture:
I/flutter ( 3873): 'package:numberpicker/numberpicker.dart': error: line 20: '=' expected
I/flutter ( 3873):   this._internal(
I/flutter ( 3873):                 ^

值得一提的是代码编译并且我没有关于语法的错误但是当我调用构造函数时,我看到的只是堆栈跟踪:(

任何人都可以向我解释我做错了吗?

3 个答案:

答案 0 :(得分:1)

如果你想调用你班级的其他构造函数,你应该在NumberPicker.integer上使用工厂构造函数,但是我不知道为什么你没有从分析器中得到任何错误,也许你应该填写一个错误。

factory NumberPicker.integer({
  Key key,
  @required int initialValue,
  @required int minValue,
  @required int maxValue,
}) {
  assert(initialValue != null);
  assert(minValue != null);
  assert(maxValue != null);
  assert(maxValue > minValue);
  assert(initialValue >= minValue && initialValue <= maxValue);

  return new NumberPicker._internal(
      minDoubleValue: -1.0,
      maxDoubleValue: -1.0,
      initialDoubleValue: -1.0,
      decimalPlaces: 0,
      minIntValue: minValue,
      maxIntValue: maxValue,
      initialIntValue: initialValue
  );
}

答案 1 :(得分:0)

您的初始值设定项列表中不能包含断言,只能在字段分配中使用。 https://dartpad.dartlang.org/71eab37e91c7d94e2dbcf7817def32d5 工作正常。

答案 2 :(得分:0)

这是不可访问的,而不是this._internal使用NumberPicker._internal,在颤振中不再需要'new'关键字。