Flutter插件一野狗云实时通信
Flutter插件一野狗云实时通信使用野狗实时通信引擎(Wilddog Sync)的Flutter插件。野狗实时通信引擎即Sync,可以帮助开发者解决应用的实时通信问题,开发者通过API,即可为应用建立客户端之间的长连接,并实时地双向同步数据。 开发者使用Sync能快速实现三大功能:实时数据通信、实时数据分发以及实时数据存储,以下介绍Sync常见的应用场景。
注意:此插件还不是很完善,有些功能仍在开发中,如果你发现任何问题,请加入QQ群:271733776【Flutter程序员】,期待你的反馈。 安装与配置打开野狗云官网,注册一个野狗云帐号,已有账号的直接登陆。 创建一个新Wilddog项目在Flutter项目上配置Wilddog Sync的第一步是创建一个新的Wilddog项目,在浏览器中打开Wilddog控制台,选择“创建应用”,输入项目名称,然后单击“创建”。 Wilddog生成了一个App ID的字符串,这是Wilddog项目唯一ID,用于连接到刚创建的Wilddog服务。复制这个ID字符串值,下面在Android、iOS平台上配置Wilddog时需要用到这个值。 将插件添加到应用程序将以下内容添加到的Flutter项目的 dependencies:
wilddog_sync: "^0.0.4"
更新并保存此文件后,点击顶部的“Packages Get”,等待下载完成。打开 开发iOS必须使用macOS,而在macOS中,想要在Flutter应用程序中使用Flutter插件,需要安装homebrew,并打开终端运行以下命令来安装CocoaPods。 brew install cocoapods
pod setup
为Android配置Wilddog启动Android Studio后选择项目的 //...
import com.wilddog.wilddogcore.WilddogOptions;
import com.wilddog.wilddogcore.WilddogApp;
public class MainActivity extends FlutterActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
//...
WilddogOptions options = new WilddogOptions.Builder().setSyncUrl("https://<前面复制的AppID>.wilddogio.com/").build();
WilddogApp.initializeApp(this,options);
}
}
注意,如果应用程序编译时出现文件重复导致的编译错误时,可以选择在 android {
//...
packagingOptions {
exclude 'META-INF/services/com.fasterxml.jackson.core.ObjectCodec'
exclude 'META-INF/services/com.fasterxml.jackson.core.JsonFactory'
exclude 'META-INF/maven/com.squareup.okhttp/okhttp/pom.properties'
exclude 'META-INF/maven/com.fasterxml.jackson.core/jackson-core/pom.xml'
exclude 'META-INF/maven/com.squareup.okio/okio/pom.properties'
exclude 'META-INF/maven/com.fasterxml.jackson.core/jackson-databind/pom.xml'
exclude 'META-INF/maven/com.fasterxml.jackson.core/jackson-databind/pom.properties'
exclude 'META-INF/maven/com.fasterxml.jackson.core/jackson-core/pom.properties'
exclude 'META-INF/maven/com.squareup.okio/okio/pom.xml'
exclude 'META-INF/maven/com.squareup.okhttp/okhttp/pom.xml'
exclude 'META-INF/maven/com.fasterxml.jackson.core/jackson-annotations/pom.properties'
exclude 'META-INF/maven/com.fasterxml.jackson.core/jackson-annotations/pom.xml'
exclude 'META-INF/maven/com.wilddog.client/wilddog-core-android/pom.xml'
exclude 'META-INF/maven/com.wilddog.client/wilddog-core-android/pom.properties'
exclude 'META-INF/maven/com.wilddog.client/wilddog-auth-android/pom.xml'
exclude 'META-INF/maven/com.wilddog.client/wilddog-auth-android/pom.properties'
exclude 'META-INF/NOTICE'
exclude 'META-INF/LICENSE'
exclude 'META-INF/notice'
exclude 'META-INF/notice.txt'
exclude 'META-INF/license'
exclude 'META-INF/license.txt'
}
}
完成配置后,建议先在IntelliJ IDEA中执行一次项目,编译Android应用程序,以确保Flutter项目下载所有依赖文件。 为iOS配置Wilddog在Flutter项目的 //...
#import "Wilddog.h"
//...
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
//...
WDGOptions *option = [[WDGOptions alloc] initWithSyncURL:@"https://<前面复制的AppID>.wilddogio.com/"];
[WDGApp configureWithOptions:option];
//...
}
完成配置后,建议先在IntelliJ IDEA中执行一次项目,编译iOS应用程序,以确保Flutter项目下载所有依赖文件。 使用与入门要使用Flutter的平台插件,必须在Dart代码中导入对应包,使用以下代码导入 import 'package:wilddog_sync/wilddog_sync.dart';
基础概念Sync的数据以JSON格式存储,它是键值对(Key-Value)的集合,其中每一个键值对(Key-Value)都称之为节点。一个节点包含 某个节点下的所有节点,统称为该节点的子节点,例如,聊天室示例中“user1”是“users”的子节点。路径用于标识数据在Sync中存储的位置,根据路径可以访问指定的数据,例如,聊天室示例中“name”的路径是“users/user1/name”。 写入数据使用 使用 如果子节点的value是列表时,可以使用 SyncReference _counterRef = WilddogSync.instance.reference().child('counter');
SyncReference _messagesRef = WilddogSync.instance.reference().child('messages');
_counterRef.set('666');
_messagesRef.push().set(<String,String>{
'content': 'message1Content','userId': 'user1',});
设置优先级
_counterRef.setPriority(100);
更新数据
_messagesRef.child('messagesID').update({ 'content': 'message2Content','userId': 'user2',});
获取数据使用 // import 'dart:async';
Future<Null> _chestnuts() async {
DataSnapshot snapshot = await _counterRef.once();
print('${onValue.key} : ${onValue.value}');
}
或者使用Future的抽象方法 _counterRef.once().then((onValue){
print('${onValue.key} : ${onValue.value}');
});
删除数据
_counterRef.remove();
监听数据监听节点
StreamSubscription<Event> _counterSubscription;
@override
void initState() {
super.initState();
_counterSubscription = _counterRef.onValue.listen((Event event) {
print(event.snapshot.value);
});
}
@override
void dispose() {
super.dispose();
_counterSubscription.cancel();
}
监听子节点监听子节点事件的方法有四种,分别是以下的方法。
以 StreamSubscription<Event> _messagesSubscription;
@override
void initState() {
super.initState();
_messagesSubscription = _messagesRef.onChildAdded.listen((Event event){
print('子节点增加了: ${event.snapshot.value}');
});
}
@override
void dispose() {
super.dispose();
_messagesSubscription.cancel();
}
子节点排序将监听到的子节点排序有四种方法,分别是以下的方法。
以 _messagesSubscription = _messagesRef.orderByChild("content").onChildAdded.listen((Event event){
print('子节点增加了: ${event.snapshot.value}');
});
有限的监听将监听到的子节点排序有两种方法,分别是以下的方法。
以 _messagesSubscription = _messagesRef.limitToLast(10).onChildAdded.listen((Event event) {
print('子节点增加了: ${event.snapshot.value}');
});
野狗动画列表
// import 'package:wilddog_sync/ui/wilddog_animated_list.dart';
// import 'dart:async';
new WilddogAnimatedList(
query: _messagesRef,sort: (DataSnapshot a,DataSnapshot b) => b.key.compareTo(a.key),itemBuilder: (BuildContext context,DataSnapshot snapshot,Animation<double> animation,int index) {
return new SizeTransition(
sizeFactor: animation,child: new Text("$index: ${snapshot.value}"),);
},),
数据本地持久化数据本地持久化是针对移动网络稳定性差而开发的功能。默认情况下,Wilddog Sync的数据存储在内存中,一旦重启,内存数据将被清除。开启数据本地持久化功能,可以使设备重启后无需再同步云端,有助于节省流量和提升重启后的访问速度。
WilddogSync.instance.setPersistenceEnabled(true);
Wilddog Sync可以在查询数据前同步指定节点下的数据,并将数据存储到设备中,以此提升访问速度。通过在某个位置调用 _counterRef.keepSynced(true);
其他功能未来会实现的~~~ 加入我们如果你也想使用Flutter开发一个开源项目,欢迎加入Flutter开荒团,让我们一起开发Flutter的荒漠!(将你的GitHub账户名发到评论区或私信我,或者加入QQ群271733776联系我们,我会发送邀请邮件给你) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |