Flutter实时扩展功能插件app_realtime_ext的使用
Flutter实时扩展功能插件app_realtime_ext的使用
安装 💻
为了开始使用 app_realtime_ext
,您必须在您的机器上安装 Flutter SDK。
通过以下命令安装:
dart pub add app_realtime_ext
持续集成 🤖
app_realtime_ext
配备了由 Very Good Workflows 支持的内置 GitHub Actions 工作流。但您也可以添加您喜欢的 CI/CD 解决方案。
默认情况下,在每次拉取请求和推送时,CI 会格式化、检查和测试代码。这确保了代码的一致性和正确性。项目使用 Very Good Analysis 进行严格的分析选项设置。使用 Very Good Workflows 来强制执行代码覆盖率。
运行测试 🧪
对于第一次使用的用户,请安装 very_good_cli:
dart pub global activate very_good_cli
运行所有单元测试:
very_good test --coverage
要查看生成的覆盖率报告,可以使用 lcov。
# 生成覆盖率报告
genhtml coverage/lcov.info -o coverage/
# 打开覆盖率报告
open coverage/index.html
为什么创建这个包?
我知道,Appwrite Flutter SDK 是由 sdk-generator 生成的。这是一个很棒的工具,用于为不同的语言生成不同的 SDK。但是,这里有一个问题。如果我们需要更新特定 Appwrite SDK 中的某些代码,它必须与其他 SDK 保持一致。因此,我决定通过克隆并仅从 Appwrite Flutter SDK 中获取与实时相关的代码来创建这个包。这个包不是由 sdk-generator 生成的。这是手动过程,以从 Appwrite Flutter SDK 获取实时相关代码。我将维护此包以使其与 Appwrite Flutter SDK 保持最新。另一个原因是,我们可以通过向此包添加更多功能来扩展 Appwrite Flutter SDK 的功能。
如何使用这个包?
首先导入包:
import 'package:app_realtime_ext/app_realtime_ext.dart';
然后初始化:
final RealtimeExt realtime = RealtimeExt();
realtime.initialize(client: client);
注意: <code>client</code>
是来自 Appwrite Flutter SDK 的 Client
实例。
initialize
方法具有以下参数:
<code>client</code>
(必需): 来自 Appwrite Flutter SDK 的Client
实例。<code>retryAttempts</code>
(可选): 连接到服务器的重试次数。默认值为 3。<code>pingInterval</code>
(可选): 每次重试之间的间隔(毫秒)。默认值为 30 秒。<code>pingEnabled</code>
(可选): 是否启用 ping 机制。默认值为<code>true</code>
。<code>autoReconnect</code>
(可选): 当连接丢失时是否自动重新连接到服务器。默认值为<code>true</code>
。但是,当达到<code>retryAttempts</code>
时,autoReconnect
将停止。
你不再需要时需要销毁 realtime
对象:
realtime.dispose();
什么是 <code>pingInterval</code>
?
根据这个网站 RFC 6455
WebSocket 规范定义了 ping 和 pong 消息操作码作为协议的一部分。这些可以作为一种方式来保持连接活跃,即使没有数据传输。 Pings 可以从任何一方发送。如果客户端接收到一个 ping,则会自动发送一个 pong。
然而,Appwrite WebSocket 不支持双向通信。因此,服务器可能会发送类似的消息。{"type":"error","data":{"code":1003,"message":"Message type is not valid."}}
。在这种情况下,包会自动重新连接到服务器。但是,期望的是从服务器收到一个 pong 消息。因此,<code>pingInterval</code>
是每次向服务器发送 ping 消息的时间间隔。如果服务器没有响应 pong 消息,包将自动重新连接到服务器。希望 Appwrite 团队在未来实现 pong 消息。
订阅 <code>subscribe</code>
订阅方法类似于 Appwrite SDK。它订阅一个频道并监听事件。这次方法是异步的。
Future<RealtimeSubscriptionExt> subscribe(String channel) async {
return await realtime.subscribe([channel]);
}
<code>stateStream</code>
和 <code>state</code>
<code>stateStream</code>
是一个 <code>Stream</code>
,它发出 <code>RealtimeState</code>
的 WebSocket 连接状态。
realtime.stateStream.listen((state) {
print(state);
});
我们在 <code>RealtimeState</code>
枚举中有不同的状态:
<code>ConnectedState</code>
: WebSocket 连接已连接。<code>DisconnectedState</code>
: WebSocket 连接已断开。<code>ReconnectingState</code>
: WebSocket 连接正在重新连接。<code>ErrorState</code>
: WebSocket 连接无法连接。<code>SubscribedState</code>
: WebSocket 连接已订阅到频道。<code>UnsubscribedState</code>
: WebSocket 连接已取消订阅频道。<code>PingState</code>
: WebSocket 连接正在向服务器发送 ping 消息。<code>DisposingState</code>
: WebSocket 连接正在清理。
使用方法:
realtime.stateStream.listen((state) {
if(state is ErrorState){
showErrorDialog();
}
});
<code>state</code>
是一个返回当前 <code>RealtimeState</code>
的 WebSocket 连接状态的 getter。
print(realtime.state);
<code>getConnectionCompleter</code>
<code>getConnectionCompleter</code>
是一个 <code>Completer</code>
,当 WebSocket 连接成功时完成。如果您尝试创建新文档时可以使用它。但在使用之前必须先检查 WebSocket 连接是否已连接。
Future<void> doSomething() async{
isLoading = true;
await realtime.getConnectionCompleter.future;
await createDocument();
}
<code>reconnect</code>
您可以手动重新连接到服务器,通过调用 <code>reconnect</code>
方法。
realtime.reconnect();
<code>setPingEnabled</code>
是否启用 ping 机制。默认值为 <code>true</code>
。
realtime.setPingEnabled(false);
更多关于Flutter实时扩展功能插件app_realtime_ext的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter实时扩展功能插件app_realtime_ext的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
app_realtime_ext
是一个 Flutter 插件,用于实现实时扩展功能。这个插件通常用于在 Flutter 应用中实现实时数据更新、推送通知、实时聊天等功能。以下是如何使用 app_realtime_ext
插件的基本步骤:
1. 添加依赖
首先,你需要在 pubspec.yaml
文件中添加 app_realtime_ext
插件的依赖:
dependencies:
flutter:
sdk: flutter
app_realtime_ext: ^版本号 # 请替换为最新的版本号
然后运行 flutter pub get
来获取依赖。
2. 初始化插件
在你的 Flutter 应用中初始化 app_realtime_ext
插件。通常,你可以在 main.dart
文件中进行初始化:
import 'package:app_realtime_ext/app_realtime_ext.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
// 初始化插件
await AppRealtimeExt.initialize(
apiKey: 'YOUR_API_KEY', // 替换为你的API密钥
projectId: 'YOUR_PROJECT_ID', // 替换为你的项目ID
);
runApp(MyApp());
}
3. 监听实时事件
你可以使用 AppRealtimeExt
来监听实时事件。例如,监听某个频道的消息:
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
StreamSubscription? _subscription;
@override
void initState() {
super.initState();
// 订阅频道
_subscription = AppRealtimeExt.subscribe('channel_name').listen((event) {
print('Received event: $event');
// 处理事件
});
}
@override
void dispose() {
_subscription?.cancel();
super.dispose();
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Realtime Ext Example'),
),
body: Center(
child: Text('Listening to realtime events...'),
),
),
);
}
}
4. 发送实时事件
你也可以使用 AppRealtimeExt
来发送实时事件:
void sendEvent() async {
await AppRealtimeExt.publish('channel_name', {'message': 'Hello, world!'});
}
5. 处理错误
在使用插件时,你可能需要处理一些错误。例如,网络连接问题或认证失败:
_subscription = AppRealtimeExt.subscribe('channel_name').listen(
(event) {
print('Received event: $event');
},
onError: (error) {
print('Error: $error');
},
);