Flutter - Как я могу запросить тот же идентификатор документа - на следующей странице - как ListTile, который был ранее нажат - PullRequest
2 голосов
/ 10 июля 2020

В основном я говорю - у меня есть listview.builder, и каждый ListTile отображает три поля из определенного документа в моей коллекции firestore. Я хочу реализовать следующее: при щелчке по этому списку пользователь должен перейти на страницу, которая отображает больше полей из того же документа. Я хочу знать, что я должен запрашивать и как я могу получить тот же идентификатор документа.

Для большего понимания возьмите, например, приложение чата. Когда щелкнули плитку списка, показывающую профиль другого пользователя pi c и имя, как я могу гарантировать, что следующая страница, предназначенная для отображения большего количества полей об этом пользователе, запрашивает свои данные из того же документа, что и плитка списка, на которую ранее был нажат.

Не уверен, что я это хорошо объяснил, но все равно спасибо, был бы признателен за некоторую помощь.

Часть моего ListView.builder, для большего контекста

FutureBuilder(
        future: getFifaTourneyData(),
        builder: (_, snapshot) {
          return ListView.builder(
              itemCount: snapshot.data.length,
              itemBuilder: (_, index) {
                return GestureDetector(
                    child: Container(
                      margin: EdgeInsets.only(top: 5),
                      width: 120,
                      height: 195,
                      decoration: BoxDecoration(
                        color: Colors.black,
                        borderRadius: BorderRadius.circular(4),
                        image: DecorationImage(
                            image:
                                AssetImage("assets/images/FifaImage3.jpg"),
                            colorFilter: new ColorFilter.mode(
                                Colors.black.withOpacity(0.5),
                                BlendMode.dstATop),
                            fit: BoxFit.cover),
                      ),
                      child: Container(
                        margin:
                            EdgeInsets.only(right: 10, left: 10, bottom: 0),
                        height: 190,
                        width: 340,
                        padding: EdgeInsets.all(10),
                        child: Column(children: <Widget>[
                          Container(
                            child: Row(
                                mainAxisAlignment:
                                    MainAxisAlignment.spaceBetween,
                                children: <Widget>[
                                  Icon(
                                    FontAwesomeIcons.playstation,
                                    color: Colors.white,
                                    size: 35,
                                  ),
                                  Padding(
                                    padding:
                                        EdgeInsets.fromLTRB(130, 0, 0, 0),
                                  ),
                                  Text(
                                    "12 / 16 registered",
                                    style: TextStyle(
                                        color: Colors.white, fontSize: 13),
                                  )
                                ]),
                          ),
                          Padding(padding: EdgeInsets.only(top: 20)),
                          Container(
                            alignment: Alignment.center,
                            child: Text(
                                snapshot.data[index].data['tourneyname'] !=
                                        null
                                    ? snapshot
                                        .data[index].data['tourneyname']
                                    : 'No Name',
                                style: TextStyle(
                                    color: Colors.white,
                                    fontSize: 23,
                                    fontWeight: FontWeight.bold)),
                          ),
                          Padding(padding: EdgeInsets.only(top: 7)),
                                     .........
                      

1 Ответ

1 голос
/ 11 июля 2020

Если на следующей странице вам нужен только идентификатор документа, вы можете передать его в конструктор следующим образом:

GestureDetector(
  onTap: () {
    Navigator.of(context).push(
      MaterialPageRoute(builder: (_) => NextPage(snapshot.data.documents[index].documentID)
    );
  },
  child: Container........
),

Конструктор виджета следующей страницы будет иметь вид:

class NextPage extends StatelessWidget {
   final String docID;

   NextPage(this.docID);

   @override
    Widget build(BuildContext context) {
         return ........
    }
}
...