flutter 仿微信长按消息多选消息列表
时间: 2023-07-30 11:05:46 浏览: 365
你可以使用 `GestureDetector` 组件来监听长按事件,并在长按时显示一个底部的菜单栏,用于选择多个消息。下面是一个简单的示例代码:
```dart
class ChatMessage {
final String content;
bool selected;
ChatMessage(this.content, {this.selected = false});
}
class ChatScreen extends StatefulWidget {
@override
_ChatScreenState createState() => _ChatScreenState();
}
class _ChatScreenState extends State<ChatScreen> {
final List<ChatMessage> messages = [
ChatMessage("Hello!"),
ChatMessage("How are you?"),
ChatMessage("I'm fine, thanks."),
ChatMessage("What about you?"),
ChatMessage("I'm good."),
];
List<ChatMessage> selectedMessages = [];
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Chat"),
),
body: ListView.builder(
itemCount: messages.length,
itemBuilder: (context, index) {
final message = messages[index];
return GestureDetector(
onLongPress: () {
setState(() {
message.selected = true;
selectedMessages.add(message);
});
},
child: Container(
padding: EdgeInsets.all(16.0),
color: message.selected ? Colors.grey[300] : null,
child: Text(message.content),
),
);
},
),
bottomNavigationBar: selectedMessages.isNotEmpty
? BottomAppBar(
child: Row(
children: [
IconButton(
icon: Icon(Icons.delete),
onPressed: () {
setState(() {
messages.removeWhere((message) =>
selectedMessages.contains(message));
selectedMessages.clear();
});
},
),
Text("${selectedMessages.length} selected"),
],
),
)
: null,
);
}
}
```
在这个示例中,我们创建了一个 `ChatMessage` 类来表示聊天消息。`selected` 属性表示该消息是否被选中。在 `ChatScreen` 中,我们创建了一个 `messages` 列表来存储所有的消息,以及一个 `selectedMessages` 列表来存储被选中的消息。在 `ListView.builder` 中,我们使用 `GestureDetector` 来监听长按事件,并在长按时将消息标记为选中状态,并将其添加到 `selectedMessages` 列表中。在底部菜单栏中,我们显示了一个删除按钮和一个文本框,用于显示选中的消息数量。当用户点击删除按钮时,我们从 `messages` 列表中删除所有被选中的消息,并清空 `selectedMessages` 列表。
阅读全文