【问题标题】:How do we transfer data from one screen to another screen in flutter?我们如何在 Flutter 中将数据从一个屏幕传输到另一个屏幕?
【发布时间】:2021-11-08 14:03:09
【问题描述】:
@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"]}"),
               );
             },
           );
         }
       },
     ),
   ),
 );
 }

我想传输这些数据 (snapShot.data["table"][index]["id"]) 并用它在第二个屏幕上显示结果/数据返回字符串/ 我想用数据在第二页显示相同编号的项目,我该怎么做

【问题讨论】:

  • 参考我的回答here希望对你有帮助

标签: flutter flutter-http


【解决方案1】:

当您使用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"),
        ],
      ),
    );
  }
}

我建议您访问this,我在其中描述了传递数据的不同方式。

【讨论】:

    【解决方案2】:

    您可以使用参数传递数据

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

    【讨论】:

      猜你喜欢
      • 2019-10-27
      • 2019-05-10
      • 2021-01-06
      • 2021-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-03
      • 2021-10-25
      相关资源
      最近更新 更多