我正在尝试将数据从页面发送到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
答案 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"),
),
);
}
}