首页 > 解决方案 > currentState null 颤动

问题描述

我有这门课,我不明白为什么,但是如果我登录它会出错,并且会破坏整个视图。该错误导致我进入“.currentState!”

我不明白为什么,我错了什么?我是否歪曲了数据?在我看来一切都已初始化,他们还告诉我错误是我没有初始化某些东西..但在我看来是非常正确的

    class GiornoSettimanale extends StatefulWidget {
  const GiornoSettimanale({
    required this.day,
    this.onOpenSelected,
    this.onCloseSelected,
    this.onOpeningCreated,
    this.onOpeningDeleted,
    this.initialValues,
    Key? key,
  }) : super(key: key);

  final Day day;

  final void Function(TimeOfDay time, int index)? onOpenSelected;

  final void Function(TimeOfDay time, int index)? onCloseSelected;

  final void Function(int index)? onOpeningCreated;

  final void Function(int index)? onOpeningDeleted;

  final List<OpeningHours?>? initialValues;

  @override
  GiornoSettimanaleState createState() => GiornoSettimanaleState();
}

final _openingsKeys = <Tuple<int, GlobalKey<DayWidgetState>>>[];

  final _openings = <Tuple<int, DayWidget>>{}.obs;

  void firstOpeningHour(TimeOfDay time, int index) {
    if (!_isClosed.value && _openings.isNotEmpty && index < _openings.length)
      _openingsKeys[index].second.currentState!.customOpeningHour = time;
  }

  void firstClosingHour(TimeOfDay time, int index) {
    if (!_isClosed.value && _openings.isNotEmpty && index < _openings.length)
      _openingsKeys[index].second.currentState!.customClosingHour = time;
  }

void initState() {
    super.initState();
    final key = Tuple(0, GlobalKey<DayWidgetState>());
    _openingsKeys.add(key);
    _openings.add(
      Tuple(
        0,
        DayWidget(
          iconRemove: false,
          key: key.second,
          onOpeningSelected: widget.onOpenSelected != null
              ? (time) => widget.onOpenSelected!.call(time, 0)
              : null,
          onClosingSelected: widget.onCloseSelected != null
              ? (time) => widget.onCloseSelected!.call(time, 0)
              : null,
        ),
      ),
    );

    _isClosed.listen((isClosed) {
      if (isClosed) {
        _openings.clear();
        _openingsKeys.clear();
      } else {
        final key = Tuple(0, GlobalKey<DayWidgetState>());
        _openingsKeys.add(key);
        _openings.add(
          Tuple(
            0,
            DayWidget(
              iconRemove: false,
              key: key.second,
              onOpeningSelected: widget.onOpenSelected != null
                  ? (time) => widget.onOpenSelected!.call(time, 0)
                  : null,
              onClosingSelected: widget.onCloseSelected != null
                  ? (time) => widget.onCloseSelected!.call(time, 0)
                  : null,
            ),
          ),
        );
      }
    });

    if (widget.initialValues != null) {
      widget.initialValues?.asMap().entries.forEach((element) {
        final index = element.key;
        final openingHours = element.value;

        addNewDay(index);

        _openingsKeys
            .firstWhere((element) => element.first == index)
            .second
            .currentState!
          ..customClosingHour = openingHours!.close
          ..customOpeningHour = openingHours.open;
      });
    }
  }

标签: flutterwidgetstate

解决方案


推荐阅读