// On this noteItem long press i want to show a snackbar
class NoteItem extends StatelessWidget {
NoteItem({Note note, this.removeNote}): note = note, super(key: ObjectKey(note));
final Note note;
final RemoveNote removeNote;
@override
Widget build(BuildContext context){
return ListTile(
onLongPress: () {
removeNote(note);
},
leading: CircleAvatar(
backgroundColor: Theme.of(context).primaryColor,
child: Text(note.title[0]),
),
title: Text(note.title),
);
}
}
// This class gives the state`enter code here`
class _NoteListState extends State<NoteList> {
void _addNote() {
setState(() {
widget.notes.add(Note(title: 'New Note', description: 'Successfully Added New Note'));
});
}
void _removeNote(Note note) {
setState(() {
widget.notes.remove(note);
Scaffold.of(context).showSnackBar( SnackBar( content: Text('Note Deleted!')));
});
}
@override
Widget build(BuildContext context){
return Scaffold(
appBar: AppBar(
title: Text('Notes List'),
),
body: ListView(
padding: EdgeInsets.symmetric(vertical: 8.0),
children: widget.notes.map((Note note) {
return NoteItem(
note: note,
removeNote: _removeNote,
);
}).toList(),
),
floatingActionButton: FloatingActionButton(
onPressed: _addNote,
tooltip: 'Add Note',
child: Icon(Icons.add),
),
);
}
}
如果您想查看完整的代码,请访问以下链接:-https://pastebin.com/h5HJWwdg
我试图从NoteItem返回一个支架,但是在遇到错误后才意识到您不能这样做。还尝试过使用也不起作用的生成器。如果可能的话,请直接看一些文档会很有帮助,这样我以后就可以避免此类错误。
我正在学习Flutter,几天前才开始学习它,所以如果您还告诉我我在笔记本应用程序上的工作方式是否正确,这会很有帮助。
答案 0 :(得分:0)
方法_removeNote(您尝试在其中获取Scaffold的方法)是NodeListState的属性,该属性是NodeList的状态。 NodeList可能在树中上方没有支架。但是,它还是一个儿童的脚手架。
这是我的工作。
在NodeList中创建属性
final _scaffoldKey = GlobalKey<ScaffoldState>();
将其分配给我的脚手架的关键属性。
Scaffold(
key: _scaffoldKey,
然后得到这样的脚手架...
_scaffoldKey.currentState.showSnackBar(new SnackBar(
content: new Text("Select player"),
));