I have a list which contains widgets (messages) , the problem is that i can't delete last item from list. I already tried
messages.remove(Widget);
messages.removeAt(index);
I even tried messages.clear()
|
But it also doesn't work.... I can delete all message except last one... I also tried change column to listview.builder... Please give me an advice..
my page code:
....
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,
),
),
],
));
}
),
....
i changed StreamBuilder , to usual listener , and seems like working
_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");
}
}
});
and widget
Expanded(
child: ListView.builder(
controller: scrollController,
itemCount: chat.length,
itemBuilder: (context, index) {
return generateMessage(chat[index]);
})),