如何更新flutter Getx中的Container列表

问题描述 投票:0回答:1

我想知道如何更新

ListView.builder()
我在控制器类中有一个
Map<String, dynamic>
列表。

当我添加元素 list.add({...}) 时:视图应该更新 查看课程代码:

              child: Row(
                children: [
                  Expanded(
                    flex: 5,
                    child: Text(
                      'Total',
                      textAlign: TextAlign.left,
                      style: context.bodyLarge.copyWith(
                        fontWeight: FontWeight.w500,
                      ),
                    ),
                  ),
                ),
                ...
              ],
            ),

控制器类代码:

List<Map<String, dynamic>> reportData = [];

          reportData.add({
            'customer': '${data['customerCompanyName']}',
            'qty': '${data['quantity']}',
            'amount': '\$${data['subTotal']}',
            'cogs': '\$${data['cogs']}',
            'net': '\$$net',
            'gain': '$gain%',
          });
flutter dart listview flutter-getx
1个回答
0
投票

所以您看不到更改的原因是因为添加对象时状态没有更新。要解决这个问题,您可以将列表设置为使用 GetBuilder 的 Get Observable,并在向列表添加内容时更新它。

控制器类:

RxList<Map<String, dynamic>> reportData = [].obs

查看班级:

Obx(
  () {
    return ListView.builder(...);
  }
);

使用此功能,您无需手动更新列表。这会持续观察列表并自动重建

Obx
内的小部件。

控制器类:

List<Map<String, dynamic>> reportData = [];

void updateList(){
  reportData.add(...);
  update(['List']);
}

查看班级: 在您的控制器中使用它,只需用

GetBuilder
小部件包装您的列表视图。

final controller = Get.find<YourController>();

GetBuilder(
  init: controller,
  id: 'List',
  builder: (_){
    return ListView.builder(...);
  },
);

请务必保持

GetBuilder
中的更新字符串和id相同。

© www.soinside.com 2019 - 2024. All rights reserved.