如何将数据从一个屏幕传输到另一个屏幕?


@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(
'Category',
),
),
body: Center(
child: FutureBuilder(
future: fetchCategory(),
builder: (ctx, snapShot) {
if (snapShot.connectionState == ConnectionState.waiting) {
return CircularProgressIndicator();
} else {
return ListView.builder(
itemCount: snapShot.data["table"].length,
itemBuilder: (context, index) {
return ListTile(
title: TextButton(
style: TextButton.styleFrom(
textStyle: TextStyle(fontSize: 20),
),
onPressed: () {
Navigator.pushNamed(context, '/second');
},
child: Text(snapShot.data["table"][index]["name"]),
),
//subtitle: Text("price: ${snapShot.data["table"][index]["price"]}"),
);
},
);
}
},
),
),
);
}

我想转移这个数据(快照。数据["表"][索引]["id"]),并使用它来显示结果在第二个屏幕/数据返回字符串/我想用数据在第二页显示具有相同数字的项目,我该怎么做呢

当你使用pushNamed(context, '/second');和如果接收器小部件,没有构造函数来获取数据,你可以通过ModalRoute

Navigator.of(context).push(
MaterialPageRoute(
builder: (context) => WidgetA(),
settings: RouteSettings(
arguments: "id",
)),
);

,第二屏显示为

class WidgetA extends StatelessWidget {
static final routeName = "/widgetA";
@override
Widget build(BuildContext context) {
final data = ModalRoute.of(context)!.settings;
late String retriveString;
if (data.arguments == null)
retriveString = "empty";
else
retriveString = data.arguments as String;
return Scaffold(
body: Column(
children: [
Text("Widget A"),
Text("Got data from parent $retriveString"),
],
),
);
}
}

我建议你访问这个我已经描述了不同的方式传递数据。

你可以使用参数

传递数据
onPressed: () {
Navigator.pushNamed(context, '/second', arguments: snapShot.data["table"][index]);
},

相关内容

最新更新