Перемещение флаттера Список плиток на страницу сведений о списке - PullRequest
0 голосов
/ 02 мая 2020

есть приложение для выполнения, которое выводит список всех задач на экране. Это мой список просмотра

   class assignedTask extends StatefulWidget {
      static const String id = 'assignedTask';
      @override
      _assignedTaskState createState() => _assignedTaskState();
    }

    class _assignedTaskState extends State<assignedTask> {
      String Title;
      String Summary;

      var tasks;

      crudMedthods crudObj = new crudMedthods();

      var documentID;
      var documents;



      Future<bool> addDialog(BuildContext context) async {
        return showDialog(
            context: context,
            barrierDismissible: false,
            builder: (BuildContext context) {
              return AlertDialog(
                title: Text('Add Data', style: TextStyle(fontSize: 15.0)),
                content: Container(
                  height: 125.0,
                  width: 150.0,
                  child: Column(
                    mainAxisAlignment: MainAxisAlignment.center,
                    children: <Widget>[
                      TextField(
                        decoration: InputDecoration(hintText: 'Enter Title'),
                        onChanged: (value) {
                          this.Title = value;
                        },
                      ),
                      SizedBox(height: 5.0),
                      TextField(
                        decoration: InputDecoration(hintText: 'Enter Summary'),
                        onChanged: (value) {
                          this.Summary = value;
                        },
                      ),
                    ],
                  ),
                ),
                actions: <Widget>[
                  FlatButton(
                    child: Text('Add'),
                    textColor: Colors.blue,
                    onPressed: () {
                      Navigator.of(context).pop();
                      crudObj.addData({
                        'Title': this.Title,
                        'Summary': this.Summary
                      }).then((result) {
                        dialogTrigger(context);
                      }).catchError((e) {
                        print(e);
                      });
                    },
                  )
                ],
              );
            });
      }

      Future<bool> updateDialog(BuildContext context, selectedDoc) async {

        return showDialog(
            context: context,
            barrierDismissible: false,
            builder: (BuildContext context) {
              return AlertDialog(
                title: Text('Update Data', style: TextStyle(fontSize: 15.0)),
                content: Container(
                  height: 125.0,
                  width: 150.0,
                  child: Column(
                    mainAxisAlignment: MainAxisAlignment.center,
                    children: <Widget>[
                      TextField(
                        decoration: InputDecoration(hintText: 'Title'),
                        onChanged: (value) {
                          this.Title = value;
                        },
                      ),
                      SizedBox(height: 5.0),
                      TextField(
                        decoration: InputDecoration(hintText: 'Enter Summary'),
                        onChanged: (value) {
                          this.Summary = value;
                        },
                      ),
                    ],
                  ),
                ),
                actions: <Widget>[
                  FlatButton(
                    child: Text('Update'),
                    textColor: Colors.blue,
                    onPressed: () {
                      Navigator.of(context).pop();
                      crudObj.updateData(selectedDoc, {
                        'Title': this.Title,
                        'Summary': this.Summary
                      }).then((result) {
                        // dialogTrigger(context);
                      }).catchError((e) {
                        print(e);
                      });
                    },
                  )
                ],
              );
            });
      }

      Future<bool> dialogTrigger(BuildContext context) async {
        return showDialog(
            context: context,
            barrierDismissible: false,
            builder: (BuildContext context) {
              return AlertDialog(
                title: Text('Job Done', style: TextStyle(fontSize: 15.0)),
                content: Text('Added'),
                actions: <Widget>[
                  FlatButton(
                    child: Text('Alright'),
                    textColor: Colors.blue,
                    onPressed: () {
                      Navigator.of(context).pop();
                    },
                  )
                ],
              );
            });
      }

      @override
      void initState() {
        crudObj.getData().then((results) {
          setState(() {
            tasks = results;
          });
        });
        super.initState();
      }

      @override
      Widget build(BuildContext context) {
        return new Scaffold(
            appBar: AppBar(
              title: Text('Assigned Tasks'),
              actions: <Widget>[
                IconButton(
                  icon: Icon(Icons.add),
                  onPressed: () {
                    addDialog(context);
                  },
                ),
                IconButton(
                  icon: Icon(Icons.refresh),
                  onPressed: () {
                    crudObj.getData().then((results) {
                      setState(() {
                        tasks = results;
                      });
                    });
                  },
                )
              ],
            ),
            body: _TaskList(),
        );
      }

      Widget _TaskList() {
        if (tasks != null) {
          return StreamBuilder(
            stream: tasks,
            // ignore: missing_return
            builder: (context, snapshot) {
              if (snapshot.data != null) {
                return ListView.builder(
                  itemCount: snapshot.data.documents.length,
                  padding: EdgeInsets.all(7.0),
                  itemBuilder: (context, i) {
                    return  ListTile(
                      title: Text(snapshot.data.documents[i].data["Title"]??""),
                      subtitle: Text(snapshot.data.documents[i].data["Summary"]??""),
                      /*onTap: () {
    *//*
                        updateDialog(
                            context, snapshot.data.documents[i].documentID);
                      },*/
                        onTap: (){
                          Navigator.push(context,MaterialPageRoute(builder:(context)=>detailview(context,snapshot.data.douments[i].documentid)));
                        },

                     onLongPress: () {
                        crudObj.deleteData(snapshot.data.documents[i].documentID);
                      },
                    );
                  },
                );

              }
              return CircularProgressIndicator();
            },
          );
        } else {
          return Text('Loading, Please wait..');
        }
      }
    }

Когда я нажимаю кнопку ontap, он должен go перейти на страницу сведений, которая показывает детали только этой конкретной задачи. (примечание: у меня теперь есть только значения Название и сводка, на данный момент я добавлю остальные, они должны отобразиться на странице сведений). Мой подробный вид выглядит следующим образом постучал значение на странице сведений.

1 Ответ

0 голосов
/ 02 мая 2020

Просто передайте DocumentSnapshot на страницу сведений следующим образом:

onTap: (){
        Navigator.push(context,MaterialPageRoute(builder:(context)=>DetailPage(context,snapshot.data.douments[i])));
      },

На странице сведений получите DocumentSnapshot и получите доступ ко всему, что вы получаете от него.

class DetailPage extends StatelessWidget {
  DocumentSnapshot detailDocument;
  DetailPage(this.detailDocument);
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(detailDocument.data["Title"]),
      ),
      body: Center(
        child: Text(detailDocument.data["Summary"]),
      ),
    );
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...