不包含脚手架错误。我知道我的方法没有脚手架方法,但是它是具有脚手架的方法的子代

时间:2018-07-25 12:36:10

标签: flutter

// 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,几天前才开始学习它,所以如果您还告诉我我在笔记本应用程序上的工作方式是否正确,这会很有帮助。

1 个答案:

答案 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"),
));