error: The argument type 'Null' can't be assigned to the parameter type 'Map<String, dynamic>'

error: The argument type 'Null' can't be assigned to the parameter type 'Map<String, dynamic>'

我正在使用一些在线教程编写我的第一个 Flutter 应用程序,但发现无法修复的错误。 我正在尝试通过 Navigator 添加导航,但我不明白为什么它不起作用。

一旦我在 GestureDetector 中使用 Navigator 并且它工作正常,但我不知道我应该在 floatingActionButton 中做什么以使其以相同的方式工作。注意(NoteMode.Adding, null) 可能应该是别的东西而不是 null, 因为这个 null 出错(标题错误)。谁能解释一下我做错了什么以及我不明白的地方

笔记列表

  @override
  _NoteListState createState(){return _NoteListState();}
}

class _NoteListState extends State<NoteList> {

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("Notes"),
      ),
      body: FutureBuilder(
        future: NoteProvider.getNoteList(),
        builder: (context, AsyncSnapshot snapshot) {
          if (snapshot.connectionState == ConnectionState.done) {
            final notes = snapshot.data;
            return ListView.builder(
              itemBuilder: (context, index) {
                return GestureDetector(
                  onTap: () {
                    Navigator.push(
                        context, MaterialPageRoute(builder: (context) =>
                        Note(NoteMode.Editing, (notes as dynamic)[index]))
                    );
                  },
                  child: Card(
                    child: Padding(
                      padding: const EdgeInsets.only(
                          top: 30.0, bottom: 30.0, left: 13, right: 22),
                      child: Column(
                        crossAxisAlignment: CrossAxisAlignment.start,
                        children: <Widget>[
                          _NoteTitle((notes as dynamic)[index]['title']),
                          Container(height: 3,),
                          _NoteText((notes as dynamic)[index]['text']),
                        ],
                      ),
                    ),
                  ),
                );
              },
              itemCount: notes.length,
            );
          }
          return Center(child: CircularProgressIndicator());
        },
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          Navigator.push(context, MaterialPageRoute(builder: (context) => Note(NoteMode.Adding, null)));
        },
        child: Icon(Icons.add),
      ),

        );
    }

}

备注

enum NoteMode{
  Editing,
  Adding
}

class Note extends StatefulWidget{

  final NoteMode noteMode;
  final Map<String, dynamic> note;

  Note(this.noteMode, this.note,);

  @override
  State<Note> createState() => _NoteState();
}

class _NoteState extends State<Note> {
  final TextEditingController _titleController = TextEditingController();
  final TextEditingController _textController = TextEditingController();

  List<Map<String, String>> get _notes => NoteInheritedWidget.of(context).notes;

  @override
  void didChangeDependencies(){
    if(widget.noteMode == NoteMode.Editing){
      _titleController.text = widget.note['title'];
      _textController.text = widget.note['text'];
    }
    super.didChangeDependencies();
  }
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(
          widget.noteMode == NoteMode.Adding ? 'Add note' : 'Edit note',
        ),
      ),
      body: Padding(
        padding: const EdgeInsets.all(40.0),
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            TextField(
              controller: _titleController,
              decoration: InputDecoration(
                hintText: "Note title",
              ),
            ),
            Container(height: 8,),
            TextField(
              controller: _textController,
              decoration: InputDecoration(
                hintText: "Note text",
              ),
            ),
            Container(height: 15,),
            Row(
              mainAxisAlignment: MainAxisAlignment.spaceEvenly,
              children: <Widget>[
                _NoteButton('SAVE', Colors.lightBlue, (){
                  final title = _titleController.text;
                  final text = _textController.text;
                  if(widget.noteMode == NoteMode.Adding){
                    NoteProvider.insertNote({
                      'title': title,
                      'text': text
                    });
                  } else if (widget.noteMode == NoteMode.Editing){
                    NoteProvider.updateNote( {
                      'id': widget.note['id'],
                      'title': _titleController.text,
                      'text': _textController.text,
                    });
                  }
                  Navigator.pop(context);}),
                _NoteButton('DISCARD', Colors.grey, (){Navigator.pop(context);}),
                widget.noteMode == NoteMode.Editing ?
                _NoteButton('DELETE', Colors.redAccent, () async {
                  await NoteProvider.deleteNote(widget.note['id']);
                  Navigator.pop(context);})
                    : Container(),
              ],
            )
          ],
        ),
      ),
    );
  }
}

要么您必须传递 Map 来代替 null,因为您在该页面上收到了 Map

Navigator.push(context, MaterialPageRoute(builder: (context) => Note(NoteMode.Adding, {"key":"value"})));

或者您必须将 Map 设置为可为空

class Note extends StatefulWidget{

  final NoteMode noteMode;
  final Map<String, dynamic>? note;

  Note(this.noteMode, this.note,);

  @override
  State<Note> createState() => _NoteState();
}