Error: The method 'add' was called on null. Receiver: null Tried calling: add("Test"), In flutter map

Error: The method 'add' was called on null. Receiver: null Tried calling: add("Test"), In flutter map

有一个 Dismissible 小部件具有 'undo' 项目映射删除的功能。当我关闭不是您在地图上输入的最后一个项目时,它工作正常,但是当该项目是您输入的最后一个项目时,它会抛出此错误:

The method 'add' was called on null. Receiver: null Tried calling: add("Test")

这是代码:

return Dismissible(
      key: Key(event),
      child: ....my child
      onDismissed: (direction) {

        setState(() {
          _events[_thisDay].remove(event);
          if(_events[_thisDay].length == 0){
            _events.remove(_day);
          }
        });


        Scaffold.of(context).showSnackBar(SnackBar(
          content: Text(
            "Event $event dismissed !"),
          action: SnackBarAction(
            label: "Undo",
            onPressed: () => setState(() =>_events[_thisDay].add(event))), // HERE
        ));
      },
      background: Container(color: Colors.red),
    );

*我该如何处理这个错误? _events 为空。 _thisDay 不是

您可以检查 null,然后将 _events[_thisDay] 初始化为空 Map。您的代码应如下所示:

Scaffold.of(context).showSnackBar(SnackBar(
      content: Text(
        "Event $event dismissed !"),
      action: SnackBarAction(
        label: "Undo",
        onPressed: () { 
          setState(() {
            _events[_thisDay] ??= <DateTime, String>{}; // if null, will be assigned to an empty map
            _events[_thisDay].add(event);
          });
        }),
    ));