Флаттер с указанием запроса FireStore c Списки документов - PullRequest
0 голосов
/ 26 марта 2020

Привет, ребята, так что я использовал флаттер для создания приложения, и есть функция, где пользователи могут выбрать категорию, а затем с помощью firetstore запросить службы в этой категории, вот так выглядит моя структура документа Example of Service document on my database

Я использовал поле categoryIndex, чтобы указать определенную категорию в этом примере. 1 Для сервисов Банков это мой код флаттера (виджет, где он отображает сервис в указанных категориях)

       // this is responsible for the integer current index 

       List<String> services = ["Universities", "Government", "Bills/Banks"];

       List<Widget> _buildServiceCat(num currentIndex) {
       return services.map((service) {
       var index = services.indexOf(service);
       _isSelected = _currentIndex == index;
       return Padding(
       padding: EdgeInsets.only(left: 25, right: 5),
       child: GestureDetector(
          onTap: () async {
            setState(() {
              _currentIndex = index;  
            });
          },
          child: Text(
            service,
            style: TextStyle(
                color: _isSelected ? Colors.white : Colors.white70,
                fontSize: _isSelected ? 20 : 18,
                fontWeight:
                    _isSelected ? FontWeight.bold : FontWeight.normal),
          )));
        }).toList();
        }

          // then using GridView builder it will call a method in my serviceDatabase to query 
             the needed documents

            Expanded(
              child: SizedBox(
                  height: 500.0,
                  child: GridView.builder( 
                    physics: ScrollPhysics(),
                    itemCount: services.length,
                    gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
                      crossAxisCount: 2,
                    ),
                    itemBuilder: (context, index) {
                      print('called $_currentIndex');
                      return StreamProvider<List<Service>>.value(
                        value: ServiceDatabase(categoryIndex: _currentIndex)
                            .service,
                        child: ServiceTile(service: services[index]),
                     );
                 },
             )),
            )

    // the query using where to find the given categoryIndex
   Stream<List<Service>> get service {
   return serviceCollection
    .where("categoryIndex", isEqualTo: categoryIndex )
    .snapshots()
    .map(_serviceListFromSnapshot);
   }

ОЖИДАЕМЫЙ РЕЗУЛЬТАТ: я ожидаю, что список услуг изменится, если, например, я нажму на правительства, он покажет службы с указанным индексом.

ИТОГО:
Будет загружен индекс по умолчанию (0 ) затем, если я нажму на другие службы, список не изменится.

enter image description here

Извините за длинный пост, но я застрял на некоторое время и я не знаю, что заставляет его терпеть неудачу. Если у вас, ребята, есть несколько лучших советов о том, как сделать sh, это поразит меня! Заранее спасибо!

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