问题描述
大家好,我想在颤振中将计数器的数据传递到新屏幕。我已经尝试将数据放入构造函数中,但它不起作用。这是代码:
int _counterb = 0;
setState(() {
Navigator.of(context).push(
MaterialPageRoute(builder:
(BuildContext context) =>
Draw(_counterb: _counterb),),);
});
那么如何将_counterb的这个数据传到第二页呢?
编辑
我解决了这个问题。但现在我遇到了另一个。我想传递 12 个值。但只需要两个。如何传递 2 个以上的位置参数?
解决方法
您是否尝试访问 _counterb
页面上的 Draw
变量?
我假设平局是 StatefulWidget
class Draw extends StatefulWidget {
final int counter1,counter2,counter3; //Declare any number of variables you want
const Draw({this.counter1,this.counter2,this.counter3});
@override
DrawState createState() => DrawState();
}
class DrawState extends State<Draw> {
@override
Widget build(BuildContext context) {
return Text("${widget.counter1} ${widget.counter2} ${widget.counter3}");
}
}
您的 Navigator
看起来像这样
Navigator.of(context).push(
MaterialPageRoute(builder:
(BuildContext context) =>
Draw(counter1: _counter1,counter2: _counter2,counter3: _counter3),),);
,
我建议使用 provider 或 getx 来管理应用程序中的状态,而不是将 12 个参数传递给不同的屏幕;
如果你还想这样做,你可以通过settings
例如:
Navigator.of(context).push(
MaterialPageRoute(builder:
(BuildContext context) =>
Draw(),settings: RouteSettings(arguments: {'counterb': _counterb,},);
并通过以下方式在 Draw() 屏幕中访问它:
@override
void didChangeDependencies() {
final routeArg =
ModalRoute.of(context)!.settings.arguments as Map<dynamic,dynamic>;
final counterb = routeArg['counterb'];
}
这里也不需要 setState()