我有2个类,其中一个需要传数据,B类没有这个类的数据,比如登录类把注册数据传给A类,但是B类没有这个数据,但是需要进入A级?
我用过
Navigation.of(context).pushNamed(context, classB.id)
但不工作
你可以使用
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")
],
),
);
}
}