Flutter不会删除列表中的最后一项

zu0ti5jz  于 2023-05-29  发布在  Flutter
关注(0)|答案(2)|浏览(209)

我有一个包含小部件(消息)的列表,问题是我不能从列表中删除最后一项。我已经试过了

messages.remove(Widget);
messages.removeAt(index);

我甚至试过messages.clear()|
但它也不起作用……我可以删除所有的信息除了最后一个...我也试过将列更改为listview.builder...请给予我一个建议。
我的页面代码:

....
    StreamBuilder(
                            stream: _channel.stream,
                            builder:
                                (context, AsyncSnapshot<dynamic> snapshot) {
                              if (snapshot.hasData) {
                                RocketChatMessage? mes;
                                if (snapshot.hasData) {
                                  try {
                                    var msg = RocketChatMessage.fromJson(
                                        json.decode(snapshot.data));
                                    if (msg.fields != null) {
                                      if (msg.fields!.args![0].msg != null &&
                                          (msg.fields!.args![0].msg!
                                                  .isNotEmpty ||
                                              msg.fields!.args![0].file !=
                                                  null)) {
                                        if (chat.isEmpty) {
                                          chat.add(msg);
                                          messages.add(generateMessage(msg));
                                        } else {
                                          var item = msg.fields!.args![0].sId;
                                          var ex =
                                              chat.last.fields!.args![0].sId;
                                          if (item != ex) {
                                            chat.add(msg);
                                            messages.add(generateMessage(msg));
                                            scrollDown();
                                          }
                                        }
                                      }
                                    }
                                  } catch (e) {
                                    getChatStory(false);
                                    print("story");
                                  }
                                }
                              }
                              
                              return Expanded(
                                  child: Stack(
                                children: [
                                  SingleChildScrollView(
                                    controller: scrollController,
                                    child: Column(
                                      children: messages,
                                    ),
                                  ),
                                ],
                              ));
                            } 
                            ),
....
nfzehxib

nfzehxib1#

假设您有类似List<Widget> messages的东西,您可以使用专用命令删除最后一个元素。它将是messages.removeLast()。如果这不能回答您的问题,请提供更多细节,如变量messages的类型。

lg40wkob

lg40wkob2#

我把StreamBuilder改成了普通的监听器,看起来很好用

_channel.stream.listen((event) {
    RocketChatMessage? mes;
    if (event != null) {
      try {
        var msg = RocketChatMessage.fromJson(json.decode(event));
        if (msg.msg == "changed" && msg.fields != null) {
          if (msg.fields!.args![0].msg != null &&
              (msg.fields!.args![0].msg!.isNotEmpty ||
                  msg.fields!.args![0].file != null)) {
            if (chat.isEmpty) {
              chat.add(msg);
              messages.add(generateMessage(msg));
            } else {
              var item = msg.fields!.args![0].sId;
              var ex = chat.last.fields!.args![0].sId;
              if (item != ex) {
                chat.add(msg);
                messages.add(generateMessage(msg));
              }
            }
            setState(() {});
            scrollDown();
          }
        }
      } catch (e) {
        getChatStory(false);
        print("story");
      }
    }
  });

和widget

Expanded(
                        child: ListView.builder(
                            controller: scrollController,
                            itemCount: chat.length,
                            itemBuilder: (context, index) {
                              return generateMessage(chat[index]);
                            })),

相关问题