Dart 颤振-在小部件之间传递数据

Dart 颤振-在小部件之间传递数据,dart,flutter,Dart,Flutter,我有两个小部件: 报告列表 报告详情 我试图将报表数据从RepostList小部件传递到ReportDetail小部件,并进行另一个API调用,以在ReportDetail小部件中获取有关报表的更多信息 在我的报告列表中,导航的工作方式如下: onPressed: () { Navigator.push(context, new MaterialPageRoute(builder: (context){

我有两个小部件:

  • 报告列表
  • 报告详情
  • 我试图将报表数据从RepostList小部件传递到ReportDetail小部件,并进行另一个API调用,以在ReportDetail小部件中获取有关报表的更多信息

    在我的报告列表中,导航的工作方式如下:

    onPressed: () {
                            Navigator.push(context, new MaterialPageRoute(builder: (context){
                              return new ReportDetail(reports[i]);
                            }));
                          },
    
    我的ReportDetail类:

    class ReportDetail extends StatefulWidget {
    
      final report;
    
      ReportDetail({Key key, @required this.report}) : super(key: key);
    
      @override
      ReportDetailState createState() {
        return new ReportDetailState();
      }
    }
    
    class ReportDetailState extends State<ReportDetail> {
    
      var report;
    
      Color mainColor = const Color(0xff3C3261);
    
      void getData() async {
        debugPrint(this.report);
        var report = await getReport(this.report['id']);
    
        setState(() {
          this.report = report;
        });
      }
    
      @override
      Widget build(BuildContext context) {
        getData();
    
        if (this.report == null) {
          debugPrint(this.report);
          return new Scaffold(
            appBar: new AppBar(
              title: new Text("Loading..."),
            ),
          );
        } else {
          var list = (report['items'] as List)
              .map((item) =>
              TableRow(children: [
                Text(item['id'].toString()),
                Text(item['report_id'].toString()),
                Text(item['place'])
              ]))
              .toList();
          list.insert(
              0,
              TableRow(children: [
                Text("R1"),
                Text("R2"),
                Text("R3"),
              ]));
          return Scaffold(
              appBar: AppBar(title: Text(report['name'])),
              body: Container(child: Table(children: list)));
        }
      }
    }
    
    class ReportDetail扩展StatefulWidget{
    最后报告;
    ReportDetail({Key,@required this.report}):super(Key:Key);
    @凌驾
    ReportDetailState createState(){
    返回新的ReportDetailState();
    }
    }
    类ReportDetailState扩展了状态{
    var报告;
    颜色mainColor=const Color(0xff3C3261);
    void getData()异步{
    调试打印(本报告);
    var report=wait getReport(this.report['id']);
    设置状态(){
    this.report=报告;
    });
    }
    @凌驾
    小部件构建(构建上下文){
    getData();
    if(this.report==null){
    调试打印(本报告);
    归还新脚手架(
    appBar:新的appBar(
    标题:新文本(“加载…”),
    ),
    );
    }否则{
    变量列表=(将['items']报告为列表)
    .map((项目)=>
    TableRow(儿童:[
    文本(项['id'].toString()),
    文本(项['report_id'].toString()),
    文本(项目['place'])
    ]))
    .toList();
    list.insert(
    0,
    TableRow(儿童:[
    文本(“R1”),
    文本(“R2”),
    文本(“R3”),
    ]));
    返回脚手架(
    appBar:appBar(标题:文本(报告['name']),
    主体:容器(子对象:表(子对象:列表));
    }
    }
    }
    
    我有两个问题:

  • 我的报告列表中出现以下错误:

    位置参数太多:应为0,但找到1

  • 在ReportDetail小部件中,如何确保在创建表之前从API中获得数据(请求已完成,并且this.report现在包含数据)


  • 从“Navigator.push()”中删除return关键字,如onPressed:(){Navigator.push(上下文,new MaterialPageRoute(builder:(上下文)=>new ReportDetail(reports[i]));},如果您有两个问题,最好是打开两个问题,否?1-在onPressed中传递数组“reports”,但我在ReportDetail类的代码中找不到它。请查看此答案@AmitJangid谢谢,这正是我要找的。从“Navigator.push()”中删除返回关键字的可能重复项,如onPressed:(){Navigator.push(上下文,new MaterialPageRoute(builder:(context)=>new ReportDetail(reports[I]);},如果您有两个问题,最好是打开两个问题,不是?1-在onPressed中传递数组“reports”,但我在ReportDetail类的代码中找不到它。请查看此答案@AmitJangid谢谢,这正是我要找的。可能是