如何在两个类之间导航,其中一个类需要传递数据?在颤动中

问题描述 投票:0回答:1

我有2个类,其中一个需要传数据,B类没有这个类的数据,比如登录类把注册数据传给A类,但是B类没有这个数据,但是需要进入A级?

我用过

Navigation.of(context).pushNamed(context, classB.id)

但不工作

flutter dart flutter-layout flutter-web
1个回答
7
投票

你可以使用

constructor
但在这种情况下,无论何时你使用这个类,你都必须提供值,你也可以创建类值
nullable
并在构建时检查它。另一种方式是通过路由传递数据。

更多带参数导航

这里有一些例子:

使用 ModalRoute 传递数据

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

接收数据

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"),
        ],
      ),
    );
  }
}

使用 ModalRoute 传递空数据

 Navigator.of(context).push(
                  MaterialPageRoute(
                    builder: (context) => WidgetB(),
                  ),
                );

在接收端


class WidgetB extends StatelessWidget {
  static final routeName = "/widgetB";
  @override
  Widget build(BuildContext context) {
  
    return Scaffold(
      body: Column(
        children: [
          Text("Widget B"),
        ],
      ),
    );
  }
}

使用构造函数传递数据 使用小部件时必须提供。

 Navigator.of(context).push(
                  MaterialPageRoute(
                    builder: (context) => WidgetC(data: "for C"),
                  ),
                );

接收器

class WidgetC extends StatelessWidget {
  final String data;

  const WidgetC({Key? key, required this.data}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Column(
        children: [Text("Widget C "), Text("data using Constructor: $data")],
      ),
    );
  }
}

使用构造函数传递数据(可选)

Navigator.of(context).push(
                  MaterialPageRoute(
                    builder: (context) => WidgetD(),
                  ),
                );

接收器


class WidgetD extends StatelessWidget {
  final String? data;

  WidgetD({Key? key, this.data = ""}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Column(
        children: [
          Text("Widget D nullable "),
          Text("data using Constructor: $data")
        ],
      ),
    );
  }
}

© www.soinside.com 2019 - 2024. All rights reserved.