有没有一种方法可以使用pushNamed将多个索引参数传递给另一个屏幕? [英] Is there a way to pass multiple index arguments to another screen using pushNamed?
问题描述
我正在尝试使用ListViewBuilder和Cards导航到新屏幕.我目前已设置了我的命名路由,以便它接受我解析的json模型的索引.所以问题是我如何传递'name'(String)参数以及'nextEpisodes'(ListString)和'prevEpisodes'(ListString).我想在下一个屏幕上访问所有这些变量.
谢谢.
ListView.builder(rinkWrap:是的,itemCount:slist.length,itemBuilder :(上下文,索引){print(slist [index] .prevEpisodes);退货卡(子代:ListTile(onTap:(){Navigator.of(context).pushNamed('/episodes',参数:slist [index] .name);},标题:文本(slist [index] .name),//字幕:文本(shows [index] .showNextAirDate),//开头:CircleAvatar(// 背景图片://AssetImage('assets/$ {shows [index] .showPic}'),//),尾随:Icon(Icons.keyboard_arrow_right,颜色:Colors.black26,尺寸:30.0)),);}),
您可以像这样通过 List
的特定索引将整个列表项从一个屏幕发送到另一个屏幕
在A类中
列表< YOUR_BEAN>list = new List< YOU_BEAN>();Navigator.push(语境,MaterialPageRoute(生成器:(上下文)=>B(bean:list [index])),////这里B是您需要从A类获取数据的类);
在 B
类中,您需要添加构造函数以从 A
类中捕获值,如下所示:
B类扩展了StatefulWidget {YOUR_BEAN豆;B({Key key,@required this.bean}):超级(key:key);/////您将在此处从构造器获取数据,并在类似于"widget.bean"的类中使用它@override状态< StatefulWidget>createState(){//TODO:实现createState返回_B();}}
然后请检查它的示例以将数据从一个类传递到另一类
将数据发送到 B 类的A类
import'package:cached_network_image/cached_network_image.dart';导入'package:flutter/cupertino.dart';导入'package:flutter/material.dart';导入'package:flutter/rendering.dart';导入"B.dart";导入'Fields.dart';A类扩展了StatefulWidget {@override状态< StatefulWidget>createState(){//TODO:实现createState返回_A();}}类_A扩展了状态< A>.{窗口小部件build(BuildContext context){返回MaterialApp(标题:屏幕A",debugShowCheckedModeBanner:否,主题:ThemeData(primaryColor:Colors.red,accentColor:颜色(0xFFFEF9EB),),家:脚手架(appBar:新的AppBar(),身体:容器(边距:EdgeInsets.all(20.0),子:列(子代:< Widget> [填充(填充:EdgeInsets.all(10.0),子级:Text(屏幕A"),),展开(子级:ListView.builder(itemCount:fields.length,itemBuilder:(BuildContext ctxt,整数索引){返回ListTile(标题:new Text("Rating#$ {fields [index] .rating}"),字幕:新文本(fields [index] .title),onTap:(){Navigator.push(语境,MaterialPageRoute(生成器:(上下文)=>B(bean:字段[index])),////这里B是您需要从A类获取数据的类);},);}),)],),)));}}List< Fields>字段= [新领域('一',1,),新领域('二',2,),新领域('三',3,),新领域('四个',4,),新领域('五',5,),];
现在检查 B 类,该类将从 A 类中获取数据
import'package:flutter/material.dart';导入'Fields.dart';B类扩展了StatefulWidget {田豆;B({Key key,@required this.bean}):超级(key:key);/////您将在此处从构造器获取数据,并在类似于"widget.bean"的类中使用它@override状态< StatefulWidget>createState(){//TODO:实现createState返回_B();}}类别_B扩展了状态< B>.{@override窗口小部件build(BuildContext context){//TODO:实现构建返回MaterialApp(标题:屏幕A",debugShowCheckedModeBanner:否,主题:ThemeData(primaryColor:Colors.red,accentColor:颜色(0xFFFEF9EB),),家:脚手架(appBar:新的AppBar(),身体:容器(边距:EdgeInsets.all(20.0),子:列(子代:< Widget> [填充(填充:EdgeInsets.all(10.0),孩子:中心(子代:Text(屏幕B",样式:TextStyle(fontSize:20.0),),)),Text("Rating =>>> $ {widget.bean.rating}和标题$ {widget.bean.title}")],),)));}}
我将Pojo类用于列表,请检查一次
Fields.dart
class字段{最终的字符串标题;最终诠释等级;字段(this.title,this.rating);}
上述程序的输出如下.
I'm trying to navigate to a new screen using ListViewBuilder and Cards. I currently have my named route set so that it accepts an index of my parsed json model. So the question is how do I pass the 'name' (String) parameter, as well as, 'nextEpisodes' (ListString) and 'prevEpisodes' (ListString). I'd like to access all of these variables on the next screen.
Thanks in advance.
ListView.builder(
shrinkWrap: true,
itemCount: slist.length,
itemBuilder: (context, index) {
print(slist[index].prevEpisodes);
return Card(
child: ListTile(
onTap: () {
Navigator.of(context).pushNamed('/episodes', arguments: slist[index].name);
},
title: Text(slist[index].name),
// subtitle: Text(shows[index].showNextAirDate),
// leading: CircleAvatar(
// backgroundImage:
// AssetImage('assets/${shows[index].showPic}'),
// ),
trailing: Icon(Icons.keyboard_arrow_right,
color: Colors.black26, size: 30.0)),
);
}),
You can send whole list item from particular index of the List
from one screen to another like this way
Inside the class A
List<YOUR_BEAN> list = new List<YOU_BEAN>();
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => B(bean: list [index])), //// HERE B IS THE CLASS ON WHICH YOU NEED TO CARRY DATA FROM CLASS A
);
And inside the B
class you need to add the constructor to catch the value from A
class like below
class B extends StatefulWidget {
YOUR_BEAN bean;
B ({Key key, @required this.bean}) : super(key: key); ////YOU WILL GET THE DATA HERE FROM THE CONSTRUCTOR , AND USE IT INSIDE THE CLASS LIKE "widget.bean"
@override
State<StatefulWidget> createState() {
// TODO: implement createState
return _B();
}
}
And please check the example of it to pass data from one class to another
A class which send data to B class
import 'package:cached_network_image/cached_network_image.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';
import 'B.dart';
import 'Fields.dart';
class A extends StatefulWidget {
@override
State<StatefulWidget> createState() {
// TODO: implement createState
return _A();
}
}
class _A extends State<A> {
Widget build(BuildContext context) {
return MaterialApp(
title: 'Screen A',
debugShowCheckedModeBanner: false,
theme: ThemeData(
primaryColor: Colors.red,
accentColor: Color(0xFFFEF9EB),
),
home: Scaffold(
appBar: new AppBar(),
body: Container(
margin: EdgeInsets.all(20.0),
child: Column(
children: <Widget>[
Padding(
padding: EdgeInsets.all(10.0),
child: Text("Screen A"),
),
Expanded(
child: ListView.builder(
itemCount: fields.length,
itemBuilder: (BuildContext ctxt, int index) {
return ListTile(
title: new Text("Rating #${fields[index].rating}"),
subtitle: new Text(fields[index].title),
onTap: (){
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => B(bean: fields [index])), //// HERE B IS THE CLASS ON WHICH YOU NEED TO CARRY DATA FROM CLASS A
);
},
);
}),
)
],
),
)));
}
}
List<Fields> fields = [
new Fields(
'One',
1,
),
new Fields(
'Two',
2,
),
new Fields(
'Three',
3,
),
new Fields(
'Four',
4,
),
new Fields(
'Five',
5,
),
];
Now check B class which receive the data from A class
import 'package:flutter/material.dart';
import 'Fields.dart';
class B extends StatefulWidget{
Fields bean;
B ({Key key, @required this.bean}) : super(key: key); ////YOU WILL GET THE DATA HERE FROM THE CONSTRUCTOR , AND USE IT INSIDE THE CLASS LIKE "widget.bean"
@override
State<StatefulWidget> createState() {
// TODO: implement createState
return _B ();
}
}
class _B extends State<B> {
@override
Widget build(BuildContext context) {
// TODO: implement build
return MaterialApp(
title: 'Screen A',
debugShowCheckedModeBanner: false,
theme: ThemeData(
primaryColor: Colors.red,
accentColor: Color(0xFFFEF9EB),
),
home: Scaffold(
appBar: new AppBar(),
body: Container(
margin: EdgeInsets.all(20.0),
child: Column(
children: <Widget>[
Padding(
padding: EdgeInsets.all(10.0),
child: Center(
child: Text("Screen B" ,style: TextStyle(fontSize: 20.0),),
)
),
Text("Rating=>>> ${widget.bean.rating} and Title ${widget.bean.title} ")
],
),
)));
}
}
And I have used the Pojo class for the list ,please check it once
Fields.dart
class Fields {
final String title;
final int rating;
Fields(this.title, this.rating);
}
And the output of the above program as follow.
这篇关于有没有一种方法可以使用pushNamed将多个索引参数传递给另一个屏幕?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!