提问者:小点点

将数据传递给StatefulWidget并在Flutter中以其状态访问它


我的Flutter应用程序中有两个屏幕:一个记录列表和一个用于创建和编辑记录的屏幕。

如果我将一个对象传递给第二个屏幕,这意味着我要编辑它,如果我传递null,这意味着我正在创建一个新项目。编辑屏幕是一个状态小部件,我不确定如何使用这种方法https://flutter.io/cookbook/navigation/passing-data/我的情况。

class RecordPage extends StatefulWidget {
  final Record recordObject;

  RecordPage({Key key, @required this.recordObject}) : super(key: key);

  @override
  _RecordPageState createState() => new _RecordPageState();
}

class _RecordPageState extends State<RecordPage> {
  @override
  Widget build(BuildContext context) {
   //.....
  }
}

如何访问_RecordPageState中的记录对象?


共3个答案

匿名用户

要在_RecordPageState中使用记录对象,你只需要像下面这样编写widget. object tname

class _RecordPageState extends State<RecordPage> {
  @override
  Widget build(BuildContext context) {
   .....
   widget.recordObject
   .....
  }
}

匿名用户

您不需要使用它的构造函数将参数传递给State。您可以使用widget. myField轻松访问这些。

class MyRecord extends StatefulWidget {
  final String recordName;
  const MyRecord(this.recordName);

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

class MyRecordState extends State<MyRecord> {
  @override
  Widget build(BuildContext context) {
    return Text(widget.recordName); // Here you direct access using widget
  }
}

导航屏幕时传递您的数据:

 Navigator.of(context).push(MaterialPageRoute(builder: (context) => MyRecord("WonderWorld")));

匿名用户

class RecordPage extends StatefulWidget {
  final Record recordObject;

  RecordPage({Key key, @required this.recordObject}) : super(key: key);

  @override
  _RecordPageState createState() => new _RecordPageState(recordObject);
}

class _RecordPageState extends State<RecordPage> {
  Record  recordObject
 _RecordPageState(this. recordObject);  //constructor
  @override
  Widget build(BuildContext context) {.    //closure has access
   //.....
  }
}