Flutter setState не обновляет страницу правильно

Я использую Flutter для создания приложения, в котором есть страница сообщений с категориями. Но когда я меняю категории и setState для обновления страницы, это не работает! Некоторые сообщения не обновляются, но некоторые обновляются. Мне нужно перенаправить другую страницу, а затем вернуться на страницу публикации, чтобы изменить все сообщения. Итак, initState обновляет мою страницу, а setState - нет. У меня ничего нет внутри моей страницы initState of Post.

Это мой метод создания сообщений. Работает очень хорошо. У меня есть этот метод для всех категорий, у которых есть другой метод where.

Firestore.instance
        .collection("posts")
        .where("likers", arrayContains: Constants.firebaseUser.uid)
        .orderBy("id", descending: true)
        .getDocuments()
        .then((value) => Constants.productsForOwn = value.documents
            .map((documentSnapshot) =>
                Product.fromDocument(documentSnapshot, Constants.position))
            .toList());

Тогда это проблема, страница сообщений;


           ListView.builder(
                controller: controller,
                itemCount: Constants.products.length + 1,
                itemBuilder: (context, index) {
                  if (index == 0) {
                    // return the header
                    return Container(
                      height: MediaQuery.of(context).size.height / 6,
                      width: MediaQuery.of(context).size.width,
                      color: Colors.white,
                      child: Padding(
                        padding: const EdgeInsets.all(8.0),
                        child: ListView(
                          scrollDirection: Axis.horizontal,
                          children: [
                            category(Colors.grey, 'Her Şey',
                                Icon(Icons.accessibility), 0, 'productName1'),
                            category(
                                Colors.red,
                                'Süt Ürünleri',
                                Icon(Icons.accessibility),
                                1,
                                'productname2'),
                          
                          ],
                        ),
                      ),
                    );
                  } else (Constants.products.length >= index) {
                    return Constants.products[index - 1]; //creating posts
                  } 
                },
              )

Во всех моих категориях есть детектор жестов и setState внутри;

 Widget category(
      Color color, String title, Icon icon, int index, String productType) {
    return Padding(
      padding: const EdgeInsets.symmetric(horizontal: 6.0),
      child: Container(
          child: GestureDetector(
        onTap: () async {
          Constants.indexOfPicked = index;


          Constants.searchingProductType = productType; 


          await Datas().assignAllPosts();     //that reassign the posts
         
          setState(() {});
        },
        child: Column(
          children: [
            Expanded(
              flex: 4,
              child: AspectRatio(
                  aspectRatio: 1,
                  child: Container(
                    decoration: BoxDecoration(
                        border: Border.all(
                            color: (Constants.indexOfPicked == index)
                                ? Colors.green
                                : Colors.transparent,
                            width: 2),
                        color: color,
                        borderRadius: BorderRadius.circular(12)),
                  )),
            ),
          
          ],
        ),
      )),
    );
  }
}




person Emin Bilgiç    schedule 19.11.2020    source источник


Ответы (1)


Оберните виджет с полным состоянием вокруг виджета категорий или оберните его с помощью Statefullbuilder.

Если вы спросите меня, я бы порекомендовал вам использовать Statefullbuilder, так как вам, возможно, придется часто передавать данные.

Statefullbuilder помогает обновлять нижние листы, диалоги и другие виджеты.

Следуйте этим инструкциям для statefullbuilder

person Jagadish    schedule 19.11.2020
comment
Я уже пробовал это, а также мой класс постранички имеет статус. - person Emin Bilgiç; 19.11.2020
comment
Вы также обернули виджет категорий ... не только страницу сообщения с виджетом с полным состоянием или построителем с полным состоянием? - person Jagadish; 19.11.2020
comment
Как я уже сказал, я уже пробовал это. Кроме того, это не решение, потому что почтовая страница уже такова. - Хотя я пробовал - - person Emin Bilgiç; 19.11.2020
comment
хорошо, тогда позволь мне найти что-нибудь еще ... а потом расскажу тебе - person Jagadish; 19.11.2020