Фильтрация базы данных Firestore - PullRequest
0 голосов
/ 11 апреля 2020

Внутри приложения у меня есть 4 разные вкладки, и я хочу показать отфильтрованные данные из магазина.

У меня есть следующие вкладки:

  • Все
  • Musi c
  • Fitness
  • Comedy

На начальной вкладке отображаются все данные без фильтрации, на второй вкладке отображаются данные с тегом 'musi c ' и так далее.

Я скопировал код 4 раза и изменил .where, но это решение кажется мне не лучшим.

Вот мой код одной из вкладок:

Widget build(BuildContext context) {
    return Scaffold(
      body: SingleChildScrollView(
        child: Center(
          child: Container(
            width: MediaQuery.of(context).size.width,
            height: MediaQuery.of(context).size.height,
            child: Container(
              width: MediaQuery.of(context).size.width,
              height: 150.0,
              child: StreamBuilder<QuerySnapshot>(
                stream: Firestore.instance
                    .collection('eventsdata')
                    .orderBy('dateform')
                    .where('dateform', isGreaterThanOrEqualTo: _timeminus1)
                    .where('platform', isEqualTo: 'Comedy')
                    .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...',
                        style:
                        TextStyle(fontSize: 15.0, color: Colors.black38),
                      );
                    default:
                      return Padding(
                        padding: const EdgeInsets.only(bottom: 179.0),
                        child: new ListView(

Может кто-нибудь мне помочь?

1 Ответ

1 голос
/ 11 апреля 2020

Если я правильно понимаю ваш вопрос, то на начальных вкладках отображаются все данные без фильтрации, тогда я сохраню данные из этого запроса и использую их для других экранов. Если у вас уже есть все данные на устройстве, имеет смысл фильтровать данные на устройстве, а не делать несколько запросов к базе данных, когда вы платите за чтение / запись. Поэтому я хотел бы сохранить свои данные как List<MyClass>, а затем сопоставить их с виджетом для отображения данных.

Как отфильтровать список во флаттере?
Итерация по список для рендеринга

Это не учебники, но они должны указывать вам правильное направление, где лучший материал, который я смог найти

ListView.builder(
        itemCount: myInfo.length,
        itemBuilder: (context, index) => InfoCard(myInfo[index]),
      ),

myInfo - ваш список и InfoCard - это многоразовый виджет, если вы не знаете, как создать многоразовый виджет. Я прикрепил ссылку, если вам не нужно все, что может быть просто текстовым виджетом.

Многоразовые пользовательские виджеты

Флаттер: мощь небольших и многократно используемых виджетов

...