有没有一种方法可以使用pushNamed将多个索引参数传递给另一个屏幕? [英] Is there a way to pass multiple index arguments to another screen using pushNamed?

查看:53
本文介绍了有没有一种方法可以使用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 Bclass 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屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆