Flutter聊天列表展示插件flutter_chat_list的使用

Flutter聊天列表展示插件flutter_chat_list的使用

插件介绍

flutter_chat_list 是一个基于 flutter list view 实现的全功能聊天列表插件。它支持加载更多消息、滚动到未读消息、检测新收到的消息、显示消息时间戳、加载分页消息以及无限加载之前的消息等功能。

特性

  • 支持加载更多和加载之前的消息。
  • 支持用户滚动到其他位置时保持滚动位置。
  • 支持滚动到未读消息。
  • 支持检测收到的新消息并提示。
  • 支持消息的时间戳。
  • 支持加载分页消息和无限加载之前的消息。

屏幕示例

以下是两个屏幕截图: 1: https://github.com/robert-luoqing/chat_list/raw/master/screen/message.png alt: 聊天列表界面 title: 聊天列表界面 width: 30: https://github.com/robert-luoqing/chat_list/raw/master/screen/message2.png alt: 消息详情页面 title: 消息详情页面 width: 3

示例代码

以下是一个简单的的聊天列表示例代码:

Widget _renderList() {
  return ChatList(
    msgCount: messages?.length ?? 0,
    itemBuilder: (BuildContext context, int index) => _renderItem(index),
    onMsgKey: (int index) => messages![index].id,
    controller: chatListController,
    // 新消息提示
    showReceivedMsgButton: true,
    onIsReceiveMessage: (int i) => messages[i].type == MsgType.receive,

    // 滚动到顶部
    showScrollToTopButton: true,
  );
}

更复杂的示例代码

以下是一个更复杂的聊天列表示例代码,包含了更多的自定义选项:

Widget _renderList() {
  return ChatList(
    msgCount: messages?.length ?? 0,
    itemBuilder: (BuildContext context, int index) =& gt; _renderItem(index),
    onMsgKey: (int index) =& gt; messages[index].id,
    controller: chatListController,
    // 新消息提示
    showReceivedMsgButton: true,
    receivedMsgButtonPosition: const Position(right: 0, bottom: 20),
    // newMessageComingButtonBuilder: defaultNewMessageComingButtonBuilder,
    onIsReceiveMessage: (int i) =& gt; messages[i].type == MsgType.receive,

    // 滚动到顶部
    showScrollToTopButton: true,
    offsetToShowScrollToTop: 40.0,
    // scrollToTopBuilder: defaultScrollToTopBuilder,
    onLoadTopMsgs: _loadTopMessagesWhenJumpToTop,

    // 最后一条已读消息
    showUnreadMsgButton: true,
    latestReadMsgKey: latestMessageKey,
    unreadMsgCount: unreadMsgCount,
    unreadMsgButtonPosition: const Position(right: 0, top: 20),
    onLoadMsgsByLatestReadMsgKey: _loadMoreMessagesWhileMissLatestMsg,
    offsetFromUnreadTipToTop: 50,
    // lastReadMessageButtonBuilder: defaultLastReadMessageButtonBuilder,

    // 刷新
    hasPrevMsgs: hasPrevMessages,
    offsetToTriggerLoadPrev: 100,
    loadPrevProgressBuilder: defaultLoadPrevProgressBuilder,
    onLoadPrevMsgmsg: _loadPrevMessages,

    // 加载更多
    hasMoreMsgmsg: hasMoreMessages,
    offset toTriggerLoadMore: 10,
    loadMoreProgressBuilder: defaultLoadMoreProgressBuilder,
    onLoadMoreMsgmsg: _loadMoreMessages,
  );
}

示例应用代码

以下是一个完整的示例应用代码:

import 'package:flutter/material.dart';
import 'package:flutter_easyloading/flutter_easyloading.dart';

import 'route.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  // 这个 widget 是你应用程序的根。
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Section View Demo',
      routes: SectionViewRoute.routes,
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      builder: EasyLoading.init(),
    );
  }
}

更多关于Flutter聊天列表展示插件flutter_chat_list的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter聊天列表展示插件flutter_chat_list的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是一个关于如何在Flutter项目中使用flutter_chat_list插件来展示聊天列表的示例代码。flutter_chat_list是一个流行的Flutter插件,用于创建和显示聊天列表。不过,请注意,由于这是一个假设的插件名,实际使用时请确保插件名称正确,并查阅其官方文档以获取最新和最准确的用法。

首先,确保你的pubspec.yaml文件中已经添加了flutter_chat_list依赖:

dependencies:
  flutter:
    sdk: flutter
  flutter_chat_list: ^最新版本号  # 替换为实际版本号

然后,运行flutter pub get来获取依赖。

接下来,在你的Flutter项目中,你可以按照以下步骤使用flutter_chat_list来展示聊天列表:

  1. 导入插件

在你的Dart文件中导入flutter_chat_list插件。

import 'package:flutter_chat_list/flutter_chat_list.dart';
  1. 准备聊天数据

创建一个包含聊天信息的列表。这里假设每个聊天项包含用户头像、用户名和最后一条消息。

List<Chat> chatList = [
  Chat(
    avatar: 'https://example.com/avatar1.jpg',
    name: 'Alice',
    lastMessage: 'Hello!',
    time: DateTime.now().subtract(Duration(hours: 1)),
    unreadCount: 3,
  ),
  Chat(
    avatar: 'https://example.com/avatar2.jpg',
    name: 'Bob',
    lastMessage: 'How are you?',
    time: DateTime.now().subtract(Duration(hours: 2)),
    unreadCount: 0,
  ),
  // 添加更多聊天项...
];
  1. 使用ChatList组件

在你的Flutter组件中,使用ChatList组件来展示聊天列表。

import 'package:flutter/material.dart';
import 'package:flutter_chat_list/flutter_chat_list.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Chat List Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: ChatListScreen(chatList: chatList),
    );
  }
}

class ChatListScreen extends StatelessWidget {
  final List<Chat> chatList;

  ChatListScreen({required this.chatList});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Chat List'),
      ),
      body: ChatList(
        chatList: chatList,
        onChatTap: (Chat chat) {
          // 点击聊天项时的回调,可以导航到聊天详情页面
          Navigator.push(
            context,
            MaterialPageRoute(
              builder: (context) => ChatDetailScreen(chat: chat),
            ),
          );
        },
      ),
    );
  }
}

class ChatDetailScreen extends StatelessWidget {
  final Chat chat;

  ChatDetailScreen({required this.chat});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(chat.name),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: [
            CircleAvatar(
              backgroundImage: NetworkImage(chat.avatar),
              radius: 30,
            ),
            SizedBox(height: 16),
            Text('Last Message: ${chat.lastMessage}'),
            SizedBox(height: 8),
            Text('Time: ${chat.time.toLocal()}'),
            // 添加更多详情...
          ],
        ),
      ),
    );
  }
}

在这个示例中,我们创建了一个简单的聊天列表,并定义了一个点击聊天项时导航到聊天详情页面的回调。请注意,Chat类是一个假设的数据模型,你需要根据你的实际数据结构来调整它。同样,flutter_chat_list插件的具体用法可能会有所不同,所以请参考其官方文档以获取详细信息和最新更新。

回到顶部