Flutter即时通讯插件chative_sdk的使用

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

Flutter即时通讯插件chative_sdk的使用

介绍

Chative.IO 是一个为Flutter应用提供的即时通讯插件,允许开发者快速集成一个可定制的聊天界面。通过 chative_sdk,你可以轻松地在应用中添加聊天功能,并根据需要自定义聊天界面的外观和行为。

我们将提供一个完整的示例demo,帮助你理解如何使用 chative_sdk 插件。


一、项目要求

  • Dart SDK: >=3.0.0
  • Flutter: >=3.x
  • Android:
    • minSdkVersion >= 19
    • compileSdk >= 34
    • Android Gradle Plugin (AGP) 版本 >= 7.3.0
    • 支持 androidx(如果需要迁移,请参考 AndroidX 迁移指南
  • iOS:
    • iOS 12.0+,使用 --ios-language swift
    • Xcode 版本 >= 15.0

二、安装

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

    dependencies:
      flutter:
        sdk: flutter
      chative_sdk: ^x.x.x
    
  2. 执行以下命令以安装依赖:

    flutter pub get --no-example
    

注意: 该库包含 webview_flutterfile_picker,请确保按照它们的配置说明进行设置,以避免错误。


三、使用示例

以下是一个完整的示例代码,展示了如何在Flutter应用中集成 ChativeWidget

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

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

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Chative.IO Flutter Demo',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: const HomeScreen(),
    );
  }
}

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

  [@override](/user/override)
  State<HomeScreen> createState() => _HomeScreenState();
}

class _HomeScreenState extends State<HomeScreen> {
  // 初始化 ChativeWidgetController,用于控制聊天窗口的显示和隐藏
  final ChativeWidgetController _controller = ChativeWidgetController();

  // 定义聊天频道ID
  final String channelId = 'YOUR_CHANNEL_ID';

  // 定义用户信息
  final Map<String, dynamic> user = {
    'user_id': 'UNIQUE_USER_ID',
    'user': {
      'email': 'abc@gmail.com',
      'first_name': 'Chative',
      'last_name': 'User',
      'phone': '1234567890',
      'custom_field': 'CUSTOMER_FIELD_VALUE'
    },
  };

  // 显示聊天窗口的方法
  void _showChat() {
    _controller.show();
  }

  // 清除聊天数据的方法
  void _clearData() {
    _controller.clearData();
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Chative.IO Flutter Demo'),
      ),
      body: Stack(
        children: [
          // 主要内容区域
          Center(
            child: Column(
              mainAxisSize: MainAxisSize.min,
              children: [
                ElevatedButton(
                  onPressed: _showChat,
                  child: const Text('显示聊天窗口'),
                ),
                const SizedBox(height: 20),
                ElevatedButton(
                  onPressed: _clearData,
                  child: const Text('清除数据'),
                ),
              ],
            ),
          ),
          // 聊天窗口组件
          ChativeWidget(
            channelId: channelId,
            controller: _controller,
            user: user,
            insetTop: 50, // 设置顶部内边距
            // insetBottom: 50, // 可选:设置底部内边距
            onClosed: () {
              print('聊天窗口已关闭');
            },
            onLoaded: () {
              print('聊天窗口已加载');
            },
            onNewMessage: (message) {
              print('收到新消息: $message');
            },
            onError: (message) {
              print('错误: $message');
            },
          ),
        ],
      ),
    );
  }
}

四、代码解释

  1. 导入包

    • 导入 flutterchative_sdk 包,chative_sdk 是我们使用的即时通讯插件。
  2. 初始化应用

    • MyApp 类设置了 MaterialApp,并将其 home 属性设置为 HomeScreen,即应用的主页面。
  3. 创建聊天屏幕

    • HomeScreen 是一个 StatefulWidget,它包含了聊天窗口的控制器和用户信息。
    • ChativeWidgetController 用于控制聊天窗口的显示和隐藏。
    • user 是一个包含用户信息的 Map,包括用户的唯一标识符、邮箱、姓名、电话等。
    • ElevatedButton 按钮用于触发聊天窗口的显示和数据清除操作。
    • ChativeWidget 是聊天窗口的核心组件,配置了 channelIduserinsetTop 等属性,并提供了回调函数来处理不同的事件(如窗口关闭、加载完成、收到新消息等)。

五、属性说明

属性 类型 是否必填 说明
channelId String 聊天频道的唯一标识符。
user Map<String, dynamic> 用户信息,用于在聊天中显示用户详情。
headerWidget Widget 自定义的头部组件,可以用来增强聊天体验。
containerDecoration BoxDecoration 自定义聊天容器的装饰样式,如背景颜色、圆角等。
insetTop double 顶部内边距,默认值为 20。
insetBottom double 底部内边距,默认值为 20。
onClosed VoidCallback 当聊天窗口关闭时的回调函数。
onLoaded VoidCallback 当聊天窗口加载完成时的回调函数。
onNewMessage Function(dynamic) 当收到新消息时的回调函数。
onError Function(String) 当发生错误时的回调函数。

六、方法说明

ChativeWidgetController 提供了以下方法来控制聊天窗口的行为:

  • show():显示聊天窗口。
  • hide():隐藏聊天窗口。
  • injectJavascript(String script):向聊天窗口注入自定义的 JavaScript 代码。
  • reload():重新加载聊天窗口。
  • clearData():清除聊天窗口中的数据(如 localStorage 中的数据)。

七、自定义聊天窗口

你可以通过提供自定义的头部组件和容器装饰来自定义聊天窗口的外观。例如:

ChativeWidget(
  controller: _controller,
  channelId: "your-channel-id",
  headerWidget: YourCustomHeader(), // 自定义头部组件
  containerDecoration: BoxDecoration(
    color: Colors.grey, // 设置背景颜色
    borderRadius: BorderRadius.circular(10), // 设置圆角
  ),
)

自定义头部组件示例:

class YourCustomHeader extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Container(
      color: Colors.blue, // 设置头部背景颜色
      height: 50, // 设置高度
      child: Center(
        child: Text(
          'Chative Widget Header', // 头部文本
          style: TextStyle(
            color: Colors.white, // 文本颜色
            fontSize: 20, // 文本大小
          ),
        ),
      ),
    );
  }
}

更多关于Flutter即时通讯插件chative_sdk的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter即时通讯插件chative_sdk的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是一个关于如何在Flutter项目中使用chative_sdk插件来实现即时通讯功能的示例代码。请注意,chative_sdk是一个假设的插件名称,实际使用时请确保该插件存在并且其API与以下示例代码兼容。如果chative_sdk不是一个真实存在的插件,请参考类似插件的文档进行调整。

步骤 1: 添加依赖

首先,在你的pubspec.yaml文件中添加chative_sdk依赖:

dependencies:
  flutter:
    sdk: flutter
  chative_sdk: ^x.y.z  # 请替换为实际版本号

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

步骤 2: 初始化插件

在你的主文件(通常是main.dart)中,初始化chative_sdk插件:

import 'package:flutter/material.dart';
import 'package:chative_sdk/chative_sdk.dart';  // 假设的导入路径

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

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  late ChativeSDK _chative;

  @override
  void initState() {
    super.initState();
    // 初始化chative_sdk
    _initChative();
  }

  void _initChative() async {
    _chative = ChativeSDK();
    // 假设有一个初始化函数需要传递API密钥或其他配置
    await _chative.initialize('YOUR_API_KEY');
    // 监听连接状态变化(示例)
    _chative.connectionStateChanged.listen((state) {
      print('Connection state changed: $state');
    });
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Chative SDK Demo'),
        ),
        body: ChatScreen(),
      ),
    );
  }
}

步骤 3: 创建聊天屏幕

创建一个简单的聊天屏幕,用于发送和接收消息:

import 'package:flutter/material.dart';
import 'package:chative_sdk/chative_sdk.dart';  // 假设的导入路径

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

class _ChatScreenState extends State<ChatScreen> {
  final TextEditingController _messageController = TextEditingController();
  List<Map<String, String>> _messages = [];

  @override
  void initState() {
    super.initState();
    // 监听新消息(示例)
    ChativeSDK().messageReceived.listen((message) {
      setState(() {
        _messages.insert(0, {'sender': message.sender, 'text': message.text});
      });
    });
  }

  void _sendMessage() async {
    String messageText = _messageController.text;
    if (messageText.isNotEmpty) {
      await ChativeSDK().sendMessage(messageText);
      _messageController.clear();
      setState(() {
        _messages.insert(0, {'sender': 'me', 'text': messageText});
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return Padding(
      padding: const EdgeInsets.all(8.0),
      child: Column(
        crossAxisAlignment: CrossAxisAlignment.start,
        children: <Widget>[
          Expanded(
            child: ListView.builder(
              reverse: true,
              itemCount: _messages.length,
              itemBuilder: (context, index) {
                Map<String, String> message = _messages[index];
                return Padding(
                  padding: const EdgeInsets.symmetric(vertical: 4.0),
                  child: Row(
                    crossAxisAlignment: CrossAxisAlignment.start,
                    mainAxisAlignment: message['sender'] == 'me'
                        ? MainAxisAlignment.end
                        : MainAxisAlignment.start,
                    children: <Widget>[
                      if (message['sender'] != 'me')
                        CircleAvatar(
                          child: Text(message['sender'][0]),
                        ),
                      Container(
                        constraints: BoxConstraints(
                          maxWidth: 250,
                        ),
                        margin: EdgeInsets.symmetric(horizontal: 8.0),
                        padding: EdgeInsets.symmetric(vertical: 8.0, horizontal: 16.0),
                        decoration: BoxDecoration(
                          color: message['sender'] == 'me' ? Colors.blueAccent : Colors.white,
                          borderRadius: BorderRadius.circular(12),
                        ),
                        child: Text(
                          message['text'],
                          style: TextStyle(color: message['sender'] == 'me' ? Colors.white : Colors.black),
                        ),
                      ),
                      if (message['sender'] == 'me')
                        CircleAvatar(
                          child: Text('M'),
                        ),
                    ],
                  ),
                );
              },
            ),
          ),
          Divider(),
          TextField(
            controller: _messageController,
            decoration: InputDecoration(
              border: OutlineInputBorder(),
              hintText: 'Type a message...',
            ),
            onEditingComplete: _sendMessage,
            onSubmitted: (value) => _sendMessage(),
          ),
          SizedBox(height: 8.0),
          ElevatedButton(
            onPressed: _sendMessage,
            child: Text('Send'),
          ),
        ],
      ),
    );
  }
}

注意事项

  1. API密钥和配置:确保你替换了YOUR_API_KEY为实际的API密钥,并根据chative_sdk的文档配置其他必要的初始化参数。
  2. 错误处理:在实际应用中,应该添加错误处理逻辑,比如处理网络错误、认证失败等情况。
  3. UI优化:上述示例代码是一个简单的聊天界面,你可以根据需求进行UI优化和功能扩展。
  4. 插件文档:请参考chative_sdk的官方文档以获取最新的API信息和最佳实践。

这个示例展示了如何在Flutter项目中使用一个假设的即时通讯插件来构建基本的聊天功能。请根据实际使用的插件文档进行调整。

回到顶部