Получить выбранные элементы Firestore ID документа на ListView - PullRequest
0 голосов
/ 03 февраля 2020

Здесь я написал код для доступа ко всем документам в коллекции и покажу его в ListView.

Вот метод получения данных.

Future getData() async {
    var firestore = Firestore.instance;
    QuerySnapshot qn =
    await firestore.collection("LiveProducts").getDocuments();
    return qn.documents;
}

Вот мой метод сборки.

@override
Widget build(BuildContext context) {
return Container(
    child: FutureBuilder(
        future: getData(),
        builder: (_, snapshot) {
          if (snapshot.connectionState == ConnectionState.waiting) {
            return Padding(
              padding: const EdgeInsets.only(
                top: 295,
              ),
              child: Column(
                mainAxisAlignment: MainAxisAlignment.spaceEvenly,
                children: <Widget>[
                  Center(
                    child: SpinKitCircle(
                      color: Colors.deepPurpleAccent,
                      size: 50.0,
                    ),
                  ),
                ],
              ),
            );
          } else {
            return ListView.builder(
              // title: Text(snapshot.data[index].data["ProductName"]),
              shrinkWrap: true,
              itemCount: snapshot.data.length,
              itemBuilder: (_, index) {
                return InkWell(
                  onTap: onClick,
                  child: Container(
                    child: Container(
                      margin: EdgeInsets.all(15),
                      height: 300,
                      width: double.infinity,
                      decoration: BoxDecoration(
                        borderRadius: BorderRadius.circular(20),
                        image: DecorationImage(
                          image: NetworkImage(snapshot
                              .data[index].data["ProductImageLink"]),
                          fit: BoxFit.cover,
                        ),
                        boxShadow: [
                          BoxShadow(
                            color: Colors.deepPurpleAccent,
                            blurRadius: 8,
                            offset: Offset(0, 10),
                          )
                        ],
                      ),
                      child: Column(
                        crossAxisAlignment: CrossAxisAlignment.start,
                        mainAxisAlignment: MainAxisAlignment.spaceBetween,
                        children: <Widget>[
                          Row(
                            children: <Widget>[
                              Expanded(
                                child: Padding(
                                  padding: const EdgeInsets.all(15.0),
                                  child: Column(
                                    crossAxisAlignment:
                                        CrossAxisAlignment.start,
                                    children: <Widget>[
                                      Text(
                                        // name,
                                        snapshot.data[index]
                                            .data["ProductName"],
                                        style: TextStyle(
                                            color: Colors.white,
                                            fontSize: 30,
                                            fontWeight: FontWeight.bold),
                                      ),
                                      SizedBox(
                                        height: 10,
                                      ),
                                      Text(
                                        // type,
                                        // '',
                                        snapshot.data[index]
                                            .data["ProductCompany"],
                                        style: TextStyle(
                                            color: Colors.white,
                                            fontSize: 20,
                                            fontWeight: FontWeight.bold),
                                      ),
                                    ],
                                  ),
                                ),
                              ),
                            ],
                          ),
  void onClick() {
  Navigator.of(context).push(MaterialPageRoute(builder: (_) {
   return PlacingBids();
  }));
}

Я перечислил все документы в ListView, но столкнулся с проблемой. Мне нужно получить идентификатор Firestore щелкнувшего документа в ListView. Как я могу это сделать?

1 Ответ

0 голосов
/ 03 февраля 2020

DocumentSnapshot класс имеет свойство id, которое возвращает ключ документа.

Вы можете заключить элементы списка в GestureDedector и передать идентификатор документа обратному вызову ònTap` .

@override
  Widget build(BuildContext context) {
    return Container(
      child: FutureBuilder(
        future: getData(),
        builder: (_, AsyncSnapshot<List<DocumentSnapshot>> snapshot) {
          if (snapshot.hasData) {
            return ListView.builder(
              itemBuilder: (_, index) {
                return GestureDetector(
                  onTap: () {
                    print("Item with key " +
                        snapshot.data[index].id +
                        " clicked.");
                  },
                  child: Padding(
                    padding: const EdgeInsets.all(8.0),
                    child: Text(snapshot.data[index].data["ProductName"]),
                  ),
                );
              },
              itemCount: snapshot.data.length,
            );
          }
          return Container();
        },
      ),
    );
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...