Flutter 将计数器的值传递到另一个页面

问题描述

大家好,我想在颤振中将计数器的数据传递到新屏幕。我已经尝试将数据放入构造函数中,但它不起作用。这是代码

  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()