首页 > 解决方案 > 在简单对话框 Flutter 中更新数据

问题描述

调用函数时如何ListView在对话框中更新_issueItem()?当我按下按钮问题项时没有任何反应,ListView没有更新。ListView在 StatefulBuilder 中,但它不起作用。请帮忙。我在按下时打电话,setState当我想更新时打电话,但没有任何效果。issue item buttonsetStateListView

我的 ListView 代码

StatefulBuilder createIssuedItemsList(List<IssuedItems>? issuedItems) {
 return StatefulBuilder(
  builder: (context, setState) {
    return ListView.separated(
      itemCount: issuedItems!.length,
      separatorBuilder: (context, index) {
        return const Divider();
      },
      itemBuilder: (context, index) {
        IssuedItems _issuedItems = issuedItems[index];
        Uint8List _bytes =
            const Base64Decoder().convert(_issuedItems.photo.toString());
        return GestureDetector(
          onTap: () => {log(_issuedItems.item)},
          child: ListTile(
            title: Text(_issuedItems.item +
                ',  ' +
                _issuedItems.count +
                ' ' +
                _issuedItems.countOption +
                ',  ' +
                _issuedItems.date),
            leading: Container(
                height: 7.h,
                width: 7.w,
                decoration: BoxDecoration(
                    image: DecorationImage(
                        image: Image.memory(_bytes).image))),
          ),
        );
      },
    );
  },
);}

发行项目

Response response =
    await ServerSideApi.create(UserState.getIP()!, 1).issueItem(data);

switch (response.body) {
  case 'not_enough_items':
    _showToast(4);
    break;
  case 'count_option_error':
    _showToast(5);
    break;
  case 'item_already_issued':
    _showToast(6);
    break;
  case 'item_issued_successfully':
    _showToast(7);
    Navigator.pop(context);
    setState(() {
      getIssuedItems(brigadeNumber);
    });
    break;
}

附加从服务器发出的项目的功能

FutureBuilder<Response<List<IssuedItems>>> getIssuedItems(String brigadeNumber) {
   var data = {'brigade': brigadeNumber};

return FutureBuilder<Response<List<IssuedItems>>>(
  future: ServerSideApi.create(UserState.getIP()!, 6).getIssuedItems(data),
  builder: (context, snapshot) {
    while (snapshot.connectionState == ConnectionState.waiting) {
      return const Center(child: CircularProgressIndicator());
    }

    if (snapshot.connectionState == ConnectionState.done &&
        snapshot.hasData) {
      var issuedItems = snapshot.data!.body;
      log(issuedItems.toString());
      return createIssuedItemsList(issuedItems);
    } else {
      return const Center(
        child: Text('Нет выданных товаров'),
      );
    }
  },
);}

发布项目按钮

FloatingActionButton.extended(
                label: const Text('Выдать'),
                onPressed: () => setState(() {
                      _issueItem(brigade.brigadeNumber, _itemIndex!,
                          dropDownItemName!, listOfTextEditingController);
                    }))

标签: flutterdart

解决方案


推荐阅读