Flutter聊天功能插件chatease的使用

发布于 1周前 作者 ionicwang 来自 Flutter

Flutter聊天功能插件ChatEase的使用

ChatEase 是一个为 Flutter 开发者设计的聊天界面插件,它提供了一个预构建且功能丰富的聊天屏幕,简化了开发过程,同时提供了强大的功能。通过 ChatView 组件,你可以轻松地将消息传递、语音记录、媒体共享等功能集成到你的应用中,确保用户拥有无缝且引人入胜的体验。

特性 🚀

Pub Points
  • 富文本消息:轻松发送和接收文本消息。
  • 语音消息:录制并发送带有互动波形可视化的语音消息。
  • 媒体分享:轻松分享图片、视频和其他媒体资产。
  • 个人资料定制:通过头像和名称个性化用户资料。
  • 可扩展性:通过回调添加自定义逻辑来处理消息、资产和语音记录的发送。

演示 🎥

Demo

安装 🔧

  1. pubspec.yaml 文件中添加依赖:

    dependencies:
      chatease: ^latest
    
  2. 获取依赖:

    flutter pub get
    

权限 📜

Android

AndroidManifest.xml 文件中添加以下权限:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

iOS

Info.plist 文件中更新以下权限以匹配功能需求:

<key>NSCameraUsageDescription</key>
<string>允许访问拍摄照片和视频。</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>允许访问选择照片和视频。</string>
<key>NSMicrophoneUsageDescription</key>
<string>允许访问录制音频。</string>
<key>NSPhotoLibraryAddUsageDescription</key>
<string>允许将媒体保存到照片库。</string>

如果需要后台录音模式,请确保启用。

使用 🧑‍💻

  1. 导入包:

    import 'package:chatease/chatview.dart';
    
  2. 在应用中使用 ChatView 小部件:

    ChatView(
      messages: conversation,  // 消息列表
      conversationId: "123",   // 唯一会话ID
      profilePic: "https://example.com/profile.jpg",
      userName: "User",
      clientId: "1234",        // 当前用户的ID
      onMessageSend: (message) {
        debugPrint(message);
        setState(() {
          conversation.add(newMessage); // 添加新消息到会话
        });
      },
      onAssetSend: (assets) {
        // 处理媒体资产发送
      },
      onVMSend: (audio) {
        // 处理语音消息发送
      },
    );
    

示例 🥼

import 'package:chatease/chatview.dart';
import 'package:flutter/material.dart';

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

class MainApp extends StatefulWidget {
  const MainApp({super.key});

  [@override](/user/override)
  State<MainApp> createState() => _MainAppState();
}

class _MainAppState extends State<MainApp> {
  List<dynamic> conversation = [
    {
      "userId": {
        "profilePic": 
            "https://www.shutterstock.com/image-vector/anime-boy-black-hair-hoodie-600nw-2078861473.jpg",
        "_id": "1234"
      },
      "message": "Hello",
      "type": "MESSAGE"
    },
    {
      "userId": {
        "profilePic": 
            "https://www.shutterstock.com/image-vector/anime-boy-black-hair-hoodie-600nw-2078861473.jpg",
        "_id": "1234"
      },
      "message": 
          "https://i.pinimg.com/originals/a8/2c/4b/a82c4b062593c35f4ebcf1617e83cacd.png",
      "type": "IMAGE"
    },
    // {
    //   "userId": {
    //     "profilePic": 
    //         "https://www.shutterstock.com/image-vector/anime-boy-black-hair-hoodie-600nw-2078861473.jpg",
    //     "_id": "1234"
    //   },
    //   "message": 
    //       "https://videos.pexels.com/video-files/4830364/4830364-uhd_1440_2732_25fps.mp4",
    //   "type": "VIDEO"
    // },
    {
      "userId": {
        "profilePic": 
            "https://www.shutterstock.com/image-vector/anime-boy-black-hair-hoodie-600nw-2078861473.jpg",
        "_id": "1234"
      },
      "message": "https://download.samplelib.com/mp3/sample-3s.mp3",
      "type": "VOICE"
    },
  ];

  Map<String, Object> newMessage = {
    "userId": {
      "profilePic": 
          "https://www.shutterstock.com/image-vector/anime-boy-black-hair-hoodie-600nw-2078861473.jpg",
      "_id": "1235"
    },
    "message": "Sure",
    "type": "MESSAGE"
  };

  final ScrollController _scrollController = ScrollController();

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      home: Scaffold(
          body: ChatView(
              scrollController: _scrollController,
              messages: conversation,
              conversationId: "1",
              image: 
                  "https://www.shutterstock.com/image-vector/anime-boy-black-hair-hoodie-600nw-2078861473.jpg",
              name: "Adam",
              clientId: "1235",
              onMessageSend: (message) {
                debugPrint(message);
                setState(() {
                  conversation.add(newMessage);
                });
              },
              onAssetSend: (assets) {},
              onVMSend: (audio) {})),
    );
  }
}

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

1 回复

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


当然,以下是一个关于如何在Flutter项目中集成和使用chatease插件来实现聊天功能的示例代码。chatease是一个假设的Flutter插件,用于简化聊天功能的实现。请注意,由于chatease并非一个真实存在的Flutter插件(根据我的知识库),以下代码将基于一个假想的API和功能结构。在实际应用中,你需要根据真实的插件文档进行调整。

步骤 1: 添加依赖

首先,在你的pubspec.yaml文件中添加chatease依赖(假设它存在):

dependencies:
  flutter:
    sdk: flutter
  chatease: ^1.0.0  # 假设的版本号

然后运行flutter pub get来安装依赖。

步骤 2: 导入插件并配置

在你的Dart文件中(例如main.dart),导入chatease插件并配置它:

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

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

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

class ChatScreen extends StatefulWidget {
  @override
  _ChatScreenState createState() => _ChatScreenState();
}

class _ChatScreenState extends State<ChatScreen> {
  late ChatEase chatClient;

  @override
  void initState() {
    super.initState();
    // 初始化ChatEase客户端,这里假设需要传入一些配置信息
    chatClient = ChatEase.init(
      apiKey: 'your_api_key',  // 替换为你的API密钥
      userId: 'user_12345',    // 替换为用户ID
    );

    // 监听消息接收事件
    chatClient.onMessageReceived.listen((message) {
      setState(() {
        // 更新UI以显示新消息
      });
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Chat'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(8.0),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: [
            Expanded(
              child: ChatMessages(),  // 自定义小部件以显示聊天消息
            ),
            TextField(
              decoration: InputDecoration(
                labelText: 'Send a message',
                border: OutlineInputBorder(),
              ),
              onSubmitted: (text) {
                // 发送消息
                chatClient.sendMessage(
                  recipientId: 'friend_67890',  // 替换为接收者ID
                  message: text,
                );
              },
            ),
          ],
        ),
      ),
    );
  }
}

// 自定义小部件以显示聊天消息
class ChatMessages extends StatefulWidget {
  @override
  _ChatMessagesState createState() => _ChatMessagesState();
}

class _ChatMessagesState extends State<ChatMessages> {
  List<String> messages = [];

  @override
  void initState() {
    super.initState();
    // 假设我们从服务器加载历史消息
    loadMessages();
  }

  void loadMessages() async {
    // 这是一个假设的异步函数来加载消息
    List<String> fetchedMessages = await chatClient.fetchMessages();
)     {setState
(()     {return
 ListView      .messagesbuilder
 =( fetched
Messages      ;item
Count    :}); messages
.  length},


        item@Builderoverride:
 (  contextWidget, build index()Build {Context context        return Padding(
          padding: const EdgeInsets.symmetric(vertical: 4.0),
          child: Text(messages[index]),
        );
      },
    );
  }
}

注意事项

  1. API Key和用户ID:在实际应用中,你需要替换your_api_keyuser_12345为真实的API密钥和用户ID。
  2. 错误处理:示例代码中没有包含错误处理逻辑。在实际应用中,你应该添加适当的错误处理来确保应用的健壮性。
  3. UI设计:示例代码中的UI设计非常简单。在实际应用中,你可能需要设计一个更复杂的UI,包括消息气泡、时间戳、发送者/接收者标识等。
  4. 插件文档:由于chatease是一个假设的插件,你需要参考真实插件的文档来了解其API和功能。

希望这个示例代码能帮助你理解如何在Flutter项目中集成和使用一个假设的聊天功能插件。如果你使用的是真实的插件,请务必参考其官方文档。

回到顶部