Функциональность кнопки Flutter Gridview на новый экран с Firebase - PullRequest
0 голосов
/ 04 апреля 2020

Я сделал Gridview, используя Firebase, Streambuilder и Gridview.builder. Эта сетка отображает названия альбомов, обложки альбомов для каждого альбома и исполнителей, которые делают каждый альбом. Мне бы хотелось, чтобы каждая плитка сетки могла нажиматься и переходить на отдельную страницу с указанными c сведениями об альбоме. План находился в печати, приложение сможет идентифицировать весь документ, на который ссылается плитка, переместится на новую страницу и отобразит документ полностью, чтобы раскрыть детали альбома. Дело в том, что я не знаю, как это сделать. Поскольку snapshot.data.documents[index]['Title'] работал при переборе всех документов для создания вида сетки, я подумал, что набрать snapshot.data.documents[index] сработает, но он просто отобразит Instance of 'DocumentSnapshot' в консоли отладки. У меня нет идей, как справиться с этим, поэтому любые предложения приветствуются

Мой код показан ниже

class HomePage extends StatefulWidget {
  @override
  _HomePageState createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  final Services services = Services();
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: bgcolour,
      appBar: AppBar(
        backgroundColor: Colors.transparent,
        elevation: 0,
        leading: Icon(Icons.menu),
        title: Text("Home"),
        actions: <Widget>[
          Padding(padding: EdgeInsets.all(10), child: Icon(Icons.more_vert))
        ],
      ),
      body: StreamBuilder(
          stream: Firestore.instance.collection('music').snapshots(),
          builder: (context, snapshot) {
            if (!snapshot.hasData) return const Text("Loading...");
            return GridView.builder(
              itemCount: snapshot.data.documents.length,
              gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
                  crossAxisCount: 2, childAspectRatio: 0.655172413),
              //cacheExtent: 1000.0,
              itemBuilder: (BuildContext context, int index) {
                var url = snapshot.data.documents[index]['Cover Art'];

                return GestureDetector(
                  child: Container(
                    width: 190.0,
                    child: Card(
                      shape: RoundedRectangleBorder(
                          borderRadius: BorderRadius.circular(32)),
                      color: hexToColor(
                          snapshot.data.documents[index]['Palette'][0]),
                      elevation: 1,
                      child: Column(
                        mainAxisSize: MainAxisSize.min,
                        children: <Widget>[
                          SizedBox(height: 12),
                          ClipRRect(
                              borderRadius: BorderRadius.circular(21.0),
                              child: Image.network(url,
                                  height: 180.0, width: 180)),
                          SizedBox(height: 10),
                          Text(
                              snapshot.data.documents[index]['Artist']
                                  .join(', '),
                              textAlign: TextAlign.center,
                              style: GoogleFonts.montserrat(
                                  textStyle: TextStyle(color: Colors.white),
                                  fontSize: 14,
                                  fontWeight: FontWeight.w300)),
                          SizedBox(height: 10),
                          Text(snapshot.data.documents[index]['Title'],
                              style: GoogleFonts.montserrat(
                                  textStyle: TextStyle(color: Colors.white),
                                  fontSize: 16,
                                  fontWeight: FontWeight.w600),
                              textAlign: TextAlign.center),
                        ],
                      ),
                    ),
                  ),
                  onTap: () {
                    print("Tapped ${snapshot.data.documents[index]}");
                  },
                );
              },
            );
          }
          ),
    );
  }
}

1 Ответ

0 голосов
/ 04 апреля 2020

Есть ли идентификатор для вашего snapshot.data.documents[index]? Если да, добавьте его в конец.

onTap: () {
     print("Tapped ${snapshot.data.documents[index]['the property you want']}");
},
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...