Flutter即时通讯插件stringee_plugin的使用

Flutter即时通讯插件stringee_plugin的使用

Stringee Flutter 是一个用于所有平台的 Dart 包,它帮助开发者使用 Stringee API 服务。此 Dart 包可以集成到任何 Flutter 应用程序中,以利用 Stringee API。

特性

  • 语音通话
  • 视频通话
  • 单对单聊天,群聊
  • 视频会议

开始使用

检查我们提供的 示例 项目,该插件附带了详细的示例代码。

要使用此包,你需要在 pubspec.yaml 文件中添加依赖项:

dependencies:
  flutter:
    sdk: flutter
  stringee_plugin: $version

$version 替换为你想要使用的插件版本。你可以查看版本列表在 变更日志 中。

查看我们的入门指南:

许可证

该项目采用 BSD 3-Clause 许可证。详情请参阅 许可证文件

示例代码

以下是一个完整的示例代码,展示了如何使用 stringee_plugin 进行即时通讯。

import 'dart:io';

import 'package:device_info_plus/device_info_plus.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:stringee_flutter_plugin_example/tab/call_tab.dart';
import 'package:stringee_flutter_plugin_example/tab/chat_tab.dart';
import 'package:stringee_flutter_plugin_example/tab/conference_tab.dart';
import 'package:stringee_flutter_plugin_example/tab/live_chat_tab.dart';

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return new MaterialApp(
        debugShowCheckedModeBanner: false,
        title: "Stringee flutter sample",
        home: new MyHomePage());
  }
}

class MyHomePage extends StatefulWidget {
  [@override](/user/override)
  State<StatefulWidget> createState() {
    return _MyHomePageState();
  }
}

class _MyHomePageState extends State<MyHomePage> {
  int _currentIndex = 0;
  List<Widget> _children = [
    CallTab(),
    ChatTab(),
    LiveChatTab(),
    ConferenceTab(),
  ];

  [@override](/user/override)
  void initState() {
    super.initState();
    SystemChrome.setEnabledSystemUIMode(SystemUiMode.manual,
        overlays: [SystemUiOverlay.bottom]);

    if (Platform.isAndroid) {
      requestPermissions();
    }
  }

  requestPermissions() async {
    DeviceInfoPlugin deviceInfoPlugin = DeviceInfoPlugin();
    deviceInfoPlugin.androidInfo.then((value) async {
      if (value.version.sdkInt >= 31) {
        Map<Permission, PermissionStatus> statuses = await [
          Permission.camera,
          Permission.microphone,
          Permission.bluetoothConnect,
        ].request();
        print(statuses);
      } else {
        Map<Permission, PermissionStatus> statuses = await [
          Permission.camera,
          Permission.microphone,
        ].request();
        print(statuses);
      }
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: new AppBar(
        title: new Text("Stringee flutter sample"),
        backgroundColor: Colors.indigo[600],
      ),
      body: IndexedStack(
        index: _currentIndex,
        children: _children,
      ),
      bottomNavigationBar: BottomNavigationBar(
          currentIndex: _currentIndex,
          type: BottomNavigationBarType.fixed,
          onTap: (index) {
            setState(() {
              _currentIndex = index;
            });
          },
          items: [
            BottomNavigationBarItem(
              icon: Icon(Icons.call),
              label: 'Call',
            ),
            BottomNavigationBarItem(
              icon: Icon(Icons.chat),
              label: 'Chat',
            ),
            BottomNavigationBarItem(
              icon: Icon(Icons.chat),
              label: 'Live chat',
            ),
            BottomNavigationBarItem(
              icon: Icon(Icons.ondemand_video),
              label: 'Conference',
            ),
          ]),
    );
  }
}

说明

  1. 导入必要的库

    import 'dart:io';
    import 'package:device_info_plus/device_info_plus.dart';
    import 'package:flutter/material.dart';
    import 'package:flutter/services.dart';
    import 'package:permission_handler/permission_handler.dart';
    import 'package:stringee_flutter_plugin_example/tab/call_tab.dart';
    import 'package:stringee_flutter_plugin_example/tab/chat_tab.dart';
    import 'package:stringee_flutter_plugin_example/tab/conference_tab.dart';
    import 'package:stringee_flutter_plugin_example/tab/live_chat_tab.dart';
    
  2. 初始化应用

    void main() {
      runApp(new MyApp());
    }
    
  3. 创建主应用类

    class MyApp extends StatelessWidget {
      [@override](/user/override)
      Widget build(BuildContext context) {
        return new MaterialApp(
            debugShowCheckedModeBanner: false,
            title: "Stringee flutter sample",
            home: new MyHomePage());
      }
    }
    
  4. 创建主页状态类

    class MyHomePage extends StatefulWidget {
      [@override](/user/override)
      State<StatefulWidget> createState() {
        return _MyHomePageState();
      }
    }
    
  5. 请求权限

    requestPermissions() async {
      DeviceInfoPlugin deviceInfoPlugin = DeviceInfoPlugin();
      deviceInfoPlugin.androidInfo.then((value) async {
        if (value.version.sdkInt >= 31) {
          Map<Permission, PermissionStatus> statuses = await [
            Permission.camera,
            Permission.microphone,
            Permission.bluetoothConnect,
          ].request();
          print(statuses);
        } else {
          Map<Permission, PermissionStatus> statuses = await [
            Permission.camera,
            Permission.microphone,
          ].request();
          print(statuses);
        }
      });
    }
    
  6. 构建界面

    [@override](/user/override)
    Widget build(BuildContext context) {
      return Scaffold(
        appBar: new AppBar(
          title: new Text("Stringee flutter sample"),
          backgroundColor: Colors.indigo[600],
        ),
        body: IndexedStack(
          index: _currentIndex,
          children: _children,
        ),
        bottomNavigationBar: BottomNavigationBar(
            currentIndex: _currentIndex,
            type: BottomNavigationBarType.fixed,
            onTap: (index) {
              setState(() {
                _currentIndex = index;
              });
            },
            items: [
              BottomNavigationBarItem(
                icon: Icon(Icons.call),
                label: 'Call',
              ),
              BottomNavigationBarItem(
                icon: Icon(Icons.chat),
                label: 'Chat',
              ),
              BottomNavigationBarItem(
                icon: Icon(Icons.chat),
                label: 'Live chat',
              ),
              BottomNavigationBarItem(
                icon: Icon(Icons.ondemand_video),
                label: 'Conference',
              ),
            ]),
      );
    }
    

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

1 回复

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


stringee_plugin 是一个用于在 Flutter 应用中实现即时通讯(IM)和语音/视频通话功能的插件,基于 Stringee 平台。它提供了丰富的 API,可以轻松集成即时通讯、语音通话、视频通话等功能到你的 Flutter 应用中。

以下是使用 stringee_plugin 的基本步骤和示例代码:

1. 添加依赖

首先,在 pubspec.yaml 文件中添加 stringee_plugin 依赖:

dependencies:
  flutter:
    sdk: flutter
  stringee_plugin: ^1.0.0  # 请使用最新版本

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

2. 初始化 Stringee 客户端

在你的 Dart 代码中,首先需要初始化 Stringee 客户端:

import 'package:stringee_plugin/stringee_plugin.dart';

final StringeeClient stringeeClient = StringeeClient();

3. 连接到 Stringee 服务器

使用你的 token 连接到 Stringee 服务器:

String token = "YOUR_STRINGEE_TOKEN";

stringeeClient.connect(token).then((result) {
  if (result['status']) {
    print("Connected to Stringee server");
  } else {
    print("Failed to connect: ${result['message']}");
  }
});

4. 监听事件

你可以监听各种事件,例如连接状态变化、收到新消息等:

stringeeClient.eventStreamController.stream.listen((event) {
  switch (event['eventType']) {
    case StringeeClientEvents.didConnect:
      print("Connected");
      break;
    case StringeeClientEvents.didDisconnect:
      print("Disconnected");
      break;
    case StringeeClientEvents.didFailWithError:
      print("Error: ${event['body']}");
      break;
    case StringeeClientEvents.requestAccessToken:
      // 处理 token 过期的情况
      break;
    case StringeeClientEvents.didReceiveCustomMessage:
      // 处理收到的自定义消息
      print("Received custom message: ${event['body']}");
      break;
    default:
      break;
  }
});

5. 发送消息

你可以发送文本消息、图片、文件等类型的消息:

StringeeMessage message = StringeeMessage(
  to: "RECIPIENT_USER_ID",
  text: "Hello, this is a test message",
);

stringeeClient.sendMessage(message).then((result) {
  if (result['status']) {
    print("Message sent successfully");
  } else {
    print("Failed to send message: ${result['message']}");
  }
});

6. 语音/视频通话

stringee_plugin 还支持语音和视频通话功能。以下是如何发起一个语音通话的示例:

StringeeCall call = StringeeCall(stringeeClient);
call.makeCall("RECIPIENT_USER_ID", isVideoCall: false).then((result) {
  if (result['status']) {
    print("Call initiated successfully");
  } else {
    print("Failed to initiate call: ${result['message']}");
  }
});

7. 处理来电

你可以监听来电事件并处理:

stringeeClient.eventStreamController.stream.listen((event) {
  if (event['eventType'] == StringeeClientEvents.didReceiveCallRequest) {
    StringeeCall call = event['body'];
    print("Incoming call from ${call.from}");
    
    // 接听或拒绝来电
    call.answer().then((result) {
      if (result['status']) {
        print("Call answered");
      } else {
        print("Failed to answer call: ${result['message']}");
      }
    });
  }
});

8. 挂断通话

你可以挂断当前通话:

call.hangup().then((result) {
  if (result['status']) {
    print("Call hung up");
  } else {
    print("Failed to hang up call: ${result['message']}");
  }
});

9. 断开连接

当不再需要连接时,可以断开与 Stringee 服务器的连接:

stringeeClient.disconnect().then((result) {
  if (result['status']) {
    print("Disconnected from Stringee server");
  } else {
    print("Failed to disconnect: ${result['message']}");
  }
});
回到顶部