将ID从一个页面小部件传递到另一个页面方法

时间:2019-11-08 10:48:47

标签: flutter

我将ID发送到第二页,方法是单击需要在该方法中插入ID的位置,但是在第二页上,该ID仅在窗口小部件中可见,而null在方法中显示。 在这里,我将ID发送到第二页。

Navigator.push(context,
MaterialPageRoute(builder: (context) => new JobPage(value: (_jobsDetails.jobs[Index]['jobFullViewDto']['id']).toString())));

值初始化。

final String value;
JobPage({Key key, @required this.value}) : super(key: key);

我可以在第二页的小部件中看到ID。

@override
  Widget build(BuildContext context) {print(widget.value);

但是我需要在方法中添加id。 在方法ID中为null。

Future<JobDetail> _getAsyncJobDetail() async {
UserService userService = new UserService();
print("widgetId***" + widget.value);
JobDetail details = await userService.jobDetails(widget.value); //null
return details;}

JobPage

class JobPage extends StatefulWidget {
final String value;

JobPage({Key key, @required this.value}) : super(key: key);

@override
_JobPageState createState() => new _JobPageState();

}

class _JobPageState extends State<JobPage> {
JobDetail _jobDetails = new JobDetail();
double pageWidth;
double pageHeight; 

_JobPageState() {
_getAsyncJobDetail().then((val) => setState(() {
      _jobDetails = val;
    }));
}

Future<JobDetail> _getAsyncJobDetail() async {
UserService userService = new UserService();
print("widgetId***" + widget.value);
JobDetail details = await userService.jobDetails(widget.value);
return details;
}

@override
Widget build(BuildContext context) {
print(widget.value);
this.pageWidth = MediaQuery.of(context).size.width - 10;
this.pageHeight = MediaQuery.of(context).size.height;
return Column(
  mainAxisAlignment: MainAxisAlignment.center,
  children: <Widget>[
    Text(
      "${_jobDetails.position}",
      style: TextStyle(
        fontSize: 15,
      ),
    ),
  ],
);

1 个答案:

答案 0 :(得分:1)

不要在State的构造函数中进行所有准备工作(不建议这样做),并且由于Text小部件依赖于要返回的Future,因此应使用{ {1}}。

FutureBuilder