在卡Buttontheme栏中获取卡数据对象

时间:2019-02-26 13:38:55

标签: dart flutter

早上好, 我是Flutter的新手。 按下按钮后,我需要从卡中打开新页面。要打开新页面,我需要用来显示信息的数据卡对象(数据[X])。用于打开新页面的按钮位于ButtonTheme.bar中,但是在此位置,我没有“ data [X]”对象。

这是我的代码:

@override
Widget build(BuildContext context) {
return Scaffold(
    appBar: AppBar(
      title: Text("Records Page", style: TextStyle(color: Colors.white)),
      iconTheme: new IconThemeData(color: Colors.white),
      backgroundColor: Color.fromRGBO(32, 38, 48, 1),
    ),
    drawer: MainDrawer(),
    body: new ListView.builder(
      //reverse: true,
        itemCount: reversedData != null ? reversedData.length : 0,
        itemBuilder: (BuildContext ctxt, int index) {
          if (reversedData[index].stop != null) {
            return Card(
              child: Column(
                mainAxisSize: MainAxisSize.min,
                children: <Widget>[
                  const ListTile(
                    leading: Icon(Icons.calendar_today),
                    title: Text('Last Period'),
                    //subtitle: Text('Music by Julie Gable. Lyrics by Sidney Stein.'),
                  ),
                  new Container(
                    margin: EdgeInsets.symmetric(horizontal: 15),
                    child: new ListView(
                      shrinkWrap: true,
                      children: <Widget>[
                        new Text(
                            "Hour: ${reversedData[index].hourType.description}"),
                        new Text("Job: ${reversedData[index].job.description}"),
                        new Text(
                            "Opened at: ${DateFormat.yMd().add_jm().format(DateTime.parse(reversedData[index].start))}"),
                        new Text(
                            "Closed at: ${DateFormat.yMd().add_jm().format(DateTime.parse(reversedData[index].stop))}"),
                      ],
                    ),
                  ),
                  ButtonTheme.bar(
                    // make buttons use the appropriate styles for cards
                    child: ButtonBar(
                      children: <Widget>[
                        FlatButton(
                          child: const Text('Modify',
                              style: TextStyle(
                                  color: Color.fromRGBO(32, 38, 48, 1))),
                          onPressed: () {
                            Navigator.push(context, new MaterialPageRoute(builder: (__) => new PeriodEditPage(toChangeData: //my card data? ,)));
                          },
                        ),
                      ],
                    ),
                  ),
                ],
              ),
            );
          }
        }));

}

当我要打开新页面时,我只需要拥有特定的卡数据。 希望我很清楚。 谢谢

2 个答案:

答案 0 :(得分:0)

诀窍是在statefulWidget(或statelessWidget)中声明数据,然后在需要的地方使用

您还可以创建一个对象data,在该对象中,您可以将所有信息实例化到小部件中,然后将其传递到另一个屏幕。

这是关于传递数据的简介:https://flutter.dev/docs/cookbook/navigation/passing-data

答案 1 :(得分:0)

最后,我找到了解决问题的方法:

@override
Widget build(BuildContext context) {
return Scaffold(
    appBar: AppBar(
      title: Text("Records Page", style: TextStyle(color: Colors.white)),
      iconTheme: new IconThemeData(color: Colors.white),
      backgroundColor: Color.fromRGBO(32, 38, 48, 1),
    ),
    drawer: MainDrawer(),
    body: new ListView.builder(
        //reverse: true,
        itemCount: reversedData != null ? reversedData.length : 0,
        itemBuilder: (BuildContext ctxt, int index) {
          if (reversedData[index].stop != null) {
            return Card(
              child: Column(
                mainAxisSize: MainAxisSize.min,
                children: <Widget>[
                  const ListTile(
                    leading: Icon(Icons.calendar_today),
                    title: Text('Last Period'),
                    //subtitle: Text('Music by Julie Gable. Lyrics by Sidney Stein.'),
                  ),
                  new Container(
                    margin: EdgeInsets.symmetric(horizontal: 15),
                    child: new ListView(
                      shrinkWrap: true,
                      children: <Widget>[
                        new Text(
                            "Hour: ${reversedData[index].hourType.description}"),
                        new Text(
                            "Job: ${reversedData[index].job.description}"),
                        new Text(
                            "Opened at: ${DateFormat.yMd().add_jm().format(DateTime.parse(reversedData[index].start))}"),
                        new Text(
                            "Closed at: ${DateFormat.yMd().add_jm().format(DateTime.parse(reversedData[index].stop))}"),
                      ],
                    ),
                  ),
                  ButtonTheme.bar(
                    // make buttons use the appropriate styles for cards
                    child: ButtonBar(
                      children: <Widget>[
                        FlatButton(
                          child: const Text('Modify',
                              style: TextStyle(
                                  color: Color.fromRGBO(32, 38, 48, 1))),
                          onPressed: () {
                            Navigator.push(
                                context,
                                new MaterialPageRoute(
                                    builder: (__) => new PeriodEditPage(
                                          toChangeData: reversedData[index],
                                        )));
                          },
                        ),
                      ],
                    ),
                  ),
                ],
              ),
            );
          }
        }));

}

我的问题已经解决,感谢此行:

toChangeData: reversedData[index],

此代码允许使用用于填充我的卡的同一对象打开每个卡的详细信息。

我不太了解对象引用会发生什么,但是对我有用。