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
替换为你想要使用的插件版本。你可以查看版本列表在 变更日志 中。
查看我们的入门指南:
- 使用 Flutter 插件开始使用 Stringee Call API
- 使用 Flutter 插件开始使用 Stringee Call2 API
- 使用 Flutter 插件开始使用 Stringee Chat API
- 使用 Flutter 插件开始使用 Stringee Video Conference API
许可证
该项目采用 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',
),
]),
);
}
}
说明
-
导入必要的库:
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(); } }
-
请求权限:
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', ), ]), ); }
更多关于Flutter即时通讯插件stringee_plugin的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于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']}");
}
});