【问题标题】:Flutter getx loading data continuously causing UI to be unstable about which data to showFlutter getx 不断加载数据导致 UI 不稳定显示哪些数据
【发布时间】:2023-01-30 14:47:19
【问题描述】:

我正在尝试使用 Getx 在 flutter 中从我的数据库加载数据。我有一个包含子类别列表的类别列表,每个子类别中都有一个产品列表。问题是子类别页面的 UI 总是混淆要显示的数据列表,因为我通过 category_id 调用数据。使我的应用程序 UI 不稳定并且数据总是在变化的东西。

这是我的子类别页面代码:

GetBuilder<SubCategoriesController>(builder: (subCategories) {
              Get.find<SubCategoriesController>()
                  .getSubCategories(widget.catId);

              print(Get.find<SubCategoriesController>()
                  .getSubCategories(widget.catId));
                  
              return GridView.count(
                crossAxisCount: 2,
                shrinkWrap: true,
                physics: ScrollPhysics(),
                mainAxisSpacing: 16,
                crossAxisSpacing: 16,
                childAspectRatio: 90 / 100,
                padding: EdgeInsets.all(16),
                children: List.generate(subCategories.subCategoriesList.length,
                    (index) {
                  return _buildSingleSubCategory(
                      index,
                      SubCategoryModel.fromJson(
                          subCategories.subCategoriesList[index]));
                }),
              );
            })

我试图打印输出

Get.find<SubCategoriesController>()
                  .getSubCategories(widget.catId) 

我发现它一直在不断运行而不停止显示:Instance of 'Future&lt;void&gt;' ,而且每次都显示特定类别的数据,这很奇怪!

编辑:

Future<void> getSubCategories(int cat_id) async {
    Response response = await subCategoriesRepo.getSubCategoriesList(cat_id);
    //print(response.body);
    if (response.statusCode == 200) {
      _subCategoriesList = [];
      _subCategoriesList.addAll(response.body);
      _isLoaded = true;
      update(); // = setState();
    }
  }

我发现这里调用的 update() 函数造成了问题,但是一旦删除它,我就根本得不到任何数据。

【问题讨论】:

    标签: flutter flutter-getx


    【解决方案1】:

    我认为问题是你正试图从你的构建器方法中调用你的getSubCategories(widget.catId)

    您可以尝试通过从 initstate 调用 getSubCategories(widget.catId) 来解决此问题,而不是像这样在构建器方法中调用:

    GetBuilder<SubCategoriesController>(
              initState: (logic) => logic.getSubCategories(widget.catId),
              builder: (subCategories) {
                return GridView.count(
                  crossAxisCount: 2,
                  shrinkWrap: true,
                  physics: ScrollPhysics(),
                  mainAxisSpacing: 16,
                  crossAxisSpacing: 16,
                  childAspectRatio: 90 / 100,
                  padding: EdgeInsets.all(16),
                  children: List.generate(subCategories.subCategoriesList.length,
                      (index) {
                    return _buildSingleSubCategory(
                        index,
                        SubCategoryModel.fromJson(
                            subCategories.subCategoriesList[index]));
                  }),
                );
              },
            )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-19
      • 2021-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-17
      • 1970-01-01
      • 2018-07-18
      相关资源
      最近更新 更多