Получить список <string>из Firestore на страницу флаттера - PullRequest
1 голос
/ 18 апреля 2020

Я хочу показать детали, как показано на рисунке, представленном в моем Cloud Firestore, на странице разворота show mov ie, но не знаю, как извлечь List из Firestore и показать, что в пользовательской карте реализовано в код. Я пробовал другие подходы, но не увенчался успехом. Может ли кто-нибудь помочь реализовать вышеупомянутое? Это мой первый вопрос по этому поводу, извините за ошибки.

    class CustomCard extends StatelessWidget {
      CustomCard(
          {@required this.movie_name,
          this.genre,
          this.famous_cast,
          this.rating,
          this.comment,
          this.free_link});

      final movie_name;
      final genre;
      final famous_cast;
      final rating;
      final comment;
      final free_link;

      @override
      Widget build(BuildContext context) {
        return Card(
          child: Container(
            padding: const EdgeInsets.symmetric(vertical: 15.0, horizontal: 10.0),
            child: Column(
              children: <Widget>[
                Text(movie_name),
                Text(genre),
                Text(famous_cast),
                Text(rating),
                Text(comment),
                Text(free_link),
              ],
            ),
          ),
        );
      }
    }

    class ShowPage extends StatefulWidget {
      @override
      _ShowPageState createState() => _ShowPageState();
    }

    class _ShowPageState extends State<ShowPage> {
      final db = Firestore.instance.collection('Movies');

      @override
      Widget build(BuildContext context) {
        return new Scaffold(
          resizeToAvoidBottomPadding: false,
          appBar: AppBar(
            title: Text('Show Movies'),
            backgroundColor: Colors.blueGrey[900],
          ),
          backgroundColor: Colors.white,
          body: Container(
            padding: const EdgeInsets.all(20.0),
            child: StreamBuilder<QuerySnapshot>(
              stream: db.snapshots(),
              builder:
                  (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) {
                if (snapshot.hasError) return new Text('Error: ${snapshot.error}');
                switch (snapshot.connectionState) {
                  case ConnectionState.waiting:
                    return new Text('Loading.....');
                  default:
                    return new ListView(children: getExpenseItems(snapshot));
                }
              },
            ),
          ),
        );
      }

      getExpenseItems(AsyncSnapshot<QuerySnapshot> snapshot) {
        return snapshot.data.documents
            .map(
              (doc) => new CustomCard(
                movie_name: new Text(doc["movie_n"]),
                genre: new Text(doc["genre"]),
                famous_cast: new Text(doc["famous_c"]),
                rating: new Text(doc["rating"].toString()),
                comment: new Text(doc["comments"]),
                free_link: new Text(doc["free_link"]),
              ),
            )
            .toList();
      }
    }

1 Ответ

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

Так как я не уверен, что ожидает CustomCard, я предполагаю, что это List<Widget>, поэтому вы хотели бы сделать что-то подобное.

class CustomCard extends StatelessWidget {
  CustomCard(
      {@required this.movie_name,
      this.genres,
      this.famous_casts,
      this.rating,
      this.comment,
      this.free_link});

  final movie_name;
  final List<Object> genres;
  final List<Object> famous_casts;
  final rating;
  final comment;
  final free_link;

  @override
  Widget build(BuildContext context) {
   return Card(
      child: Container(
        padding: const EdgeInsets.symmetric(vertical: 15.0, horizontal: 10.0),
        child: Column(
          children: <Widget>[
            Text(movie_name),
            ...genres
                .map(
                  (genre) => Text(genre + ', '),
                )
                .toList(),
            ...famous_casts
                .map(
                  (famous_cast) => Text(famous_cast + ', '),
                )
                .toList(),
            Text(rating),
            Text(comment),
            Text(free_link),
          ],
        ),
      ),
    );
  }
}

getExpenseItems(AsyncSnapshot<QuerySnapshot> snapshot) {
        return snapshot.data.documents
            .map(
              (doc) =>  CustomCard(
                movie_name:  doc["movie_n"],
                genres:  doc["genre"],
                famous_casts:  doc["famous_c"],
                rating:  doc["rating"].toString(),
                comment: doc["comments"],
                free_link:  doc["free_link"],
              ),
            )
            .toList();
      }

Попробуйте это

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...