如何在颤抖的视图之间发送和接收参数

时间:2020-04-14 11:40:58

标签: android ios flutter routes

我正在尝试将数据从页面发送到flutter项目中的另一个页面,尝试了在另一个问题中发现的所有方法,但都失败了,这是我的代码:

第一页:

Navigator.pushNamed(context, '/line_details', arguments: {'line':line,});

第二页:

class _LineDetailsState extends State<LineDetails> {

  Map data = {};

  @override
  Widget build(BuildContext context) {
    data  = ModalRoute.of(context).settings.arguments;
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Colors.deepPurple,
        title: Text("$data"),
      ),
    );
  }
}

注释line是创建的自定义对象。

错误:始终会返回null,即使尝试以{"test": "test string"}的形式发送单个字符串,它也会返回null

3 个答案:

答案 0 :(得分:2)

您的示例运行正常

MaterialApp中的路线

routes: { "/line_details": (context) => LineDetails(), },

按下FlatButton:

onPressed: () => Navigator.pushNamed(context, '/line_details', arguments: {'line':'test',}),

LineDetails类

class LineDetails extends StatefulWidget {

  @override
  _LineDetailsState createState() => _LineDetailsState();
}

class _LineDetailsState extends State<LineDetails> {

  Map data = {};

  @override
  Widget build(BuildContext context) {
    data  = ModalRoute.of(context).settings.arguments;

    print(data);
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Colors.deepPurple,
        title: Text("$data"),
      ),
    );
  }

}

与GestureDetector一起工作

new GestureDetector(
            onTap: () => Navigator.pushNamed(context, '/line_details', arguments: {'line':'test',}),
            child: new Container(child: new Text("GestureDetector"),),
          ),

答案 1 :(得分:0)

尝试一下:

Navigator.push(
    context,
    LineDetailsState(
        builder: (context) => LineDetailsState(
              line: line
            )))

class LineDetailsState extends StatefulWidget {
  LineDetailsState(this.line);

  Line line;

  @override
  _LineDetailsState createState() => _LineDetailsState();
}

class _LineDetailsState extends State<LineDetails> {

  Map data = {};

  @override
  Widget build(BuildContext context) {
    data  = ModalRoute.of(context).settings.arguments;
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Colors.deepPurple,
        title: Text("$data"),
      ),
    );
  }
}

用“自定义对象”的名称代替“行”

答案 2 :(得分:0)

您的示例看起来很正确,您可以尝试的另一件事是键入您的参数 像下面这样帮助飞镖掉毛。请注意,这与您获取空值无关

    class LineDetails extends StatefulWidget {

  @override
  _LineDetailsState createState() => _LineDetailsState();
}

class _LineDetailsState extends State<LineDetails> {

  Map data = {};

  @override
  Widget build(BuildContext context) {
    data  = ModalRoute.of(context).settings.arguments as Map<String,object>;

    print(data);
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Colors.deepPurple,
        title: Text("$data"),
      ),
    );
  }

}