我的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内部的recordObject**?
8条答案
按热度按时间hwazgwia1#
要在_RecordPageState中使用recordObject,您必须像下面这样编写widget.objectname
lstz6jyr2#
完整示例
您不需要使用State的构造函数向State传递参数。您可以使用widget.myField轻松访问这些参数。
在导航屏幕时传递数据:
af7jpaap3#
rur96b6h4#
示例如下:
x3naxklr5#
我必须导航回列表页面中的任何一个屏幕,但当我这样做时,我的onTap功能停止工作,导航停止。
hmtdttj46#
你不必为此在状态类中创建任何新的对象或变量,你只需要在有状态类中为你的对象定义一个final和nullable变量。你可以像
widget.recordObject
一样通过widget.
访问这个变量zwghvu4y7#
你应该使用一个发布/订阅机制。我更喜欢在许多情况下和语言中使用Rx。对于 dart /Flutter,这是一个包:https://pub.dev/packages/rxdart
例如,您可以使用BehaviorSubject从widget A发出数据,将流传递给widget B,后者监听更改并在setState中应用更改。
小部件A:
小部件B:
9bfwbjaz8#
在我的应用程序中,我通常不使用有状态的小部件,而是主要使用main.dart中的
ChangeNotifierProvider<T>
,一些模型类和
在我的无状态小部件中。IMO这使我能够更精确地控制运行时状态更改后的重建,与有状态小部件相比。
配方可以在官方的docs中找到,这个概念被称为“提升状态”。