Flutter云端存储插件jingluo_icloud_storage的使用
Flutter云端存储插件jingluo_icloud_storage的使用
flutter
云端存储
效果图
开始使用
1. 项目配置
2. 使用
在 pubspec.yaml
文件中添加以下依赖:
dependencies:
jingluo_icloud_storage: <latest_version>
导入插件:
import 'package:jingluo_icloud_storage/jingluo_icloud_storage.dart';
使用方式如下:
检查是否支持iCloud
var res = await JingluoIcloudStorage().isICloudEnabled();
返回结果如下:
// 成功
{msg: Success, code: 0}
// 失败
{msg: error, code: -1}
获取值
获取值时,如果拿不到key对应的value,则返回null。可以选择获取指定类型的value,获取不到则为null。
var res = await JingluoIcloudStorage().getValue(key: "localValue");
返回结果如下:
// 成功
{msg: 138, code: 0}
// 失败
{msg: error, code: -1}
可选值类型定义如下:
enum JingluoIcloudStorageType {
string,
array,
dictionary,
data,
long,
double,
bool,
none,
}
设置值
var res = await JingluoIcloudStorage().setValue(key: "count", value: 138);
返回结果如下:
// 成功
{msg: Success, code: 0}
// 失败
{msg: error, code: -1}
删除值
var res = await JingluoIcloudStorage().deleteValue(key: "localValue");
返回结果如下:
// 成功
{msg: Success, code: 0}
// 失败
{msg: error, code: -1}
监听值变化
JingluoIcloudStorage().registerEventListener(onEvent: (event) {
if (event["key"] == JingluoIcloudStorageEventType.updateICloudStorage) {
Map? map = event["payload"]["value"];
if (map != null && map["count"] != null) {
idx = map["count"];
}
setState(() {});
}
});
返回结果如下:
// 成功
{payload: {code: 0, value: {count: 138}}, key: UPDATE_ICLOUD_STORAGE}
3. 常量
错误码 | 作用 |
---|---|
0 | 成功 |
-1 | 参数错误 |
-2 | iCloud未开启 |
事件Key | 作用 |
---|---|
UPDATE_ICLOUD_STORAGE | UserDefaults刷新时触发 |
完整示例代码
import 'package:flutter/material.dart';
import 'dart:async';
import 'package:flutter/services.dart';
import 'package:jingluo_icloud_storage/jingluo_icloud_storage.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatefulWidget {
const MyApp({super.key});
[@override](/user/override)
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
String _platformVersion = 'Unknown';
final _jingluoIcloudStoragePlugin = JingluoIcloudStorage();
final _key = "count";
var idx = 0;
[@override](/user/override)
void initState() {
super.initState();
startNotification();
initPlatformState();
}
void startNotification() {
_jingluoIcloudStoragePlugin.registerEventListener(onEvent: (event) {
if (event["key"] == JingluoIcloudStorageEventType.updateICloudStorage) {
Map? map = event["payload"]["value"];
if (map != null && map[_key] != null) {
idx = map[_key];
}
setState(() {});
}
});
}
// Platform messages are asynchronous, so we initialize in an async method.
Future<void> initPlatformState() async {
String platformVersion;
// Platform messages may fail, so we use a try/catch PlatformException.
// We also handle the message potentially returning null.
var res = await _jingluoIcloudStoragePlugin.isICloudEnabled();
if (res?['code'] != 0) {
return;
}
try {
platformVersion =
await _jingluoIcloudStoragePlugin.getPlatformVersion() ??
'Unknown platform version';
var res = await _jingluoIcloudStoragePlugin.getValue(key: _key);
setState(() {
if (res != null && res['code'] == 0) {
idx = int.parse((res["msg"] ?? 0).toString());
}
});
} on PlatformException {
platformVersion = 'Failed to get platform version.';
}
// If the widget was removed from the tree while the asynchronous platform
// message was in flight, we want to discard the reply rather than calling
// setState to update our non-existent appearance.
if (!mounted) return;
setState(() {
_platformVersion = platformVersion;
});
}
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('Plugin example app'),
),
body: Center(
child: Column(
children: [
Text('Running on: $_platformVersion\n'),
GestureDetector(
onTap: () async {
var res = await _jingluoIcloudStoragePlugin.setValue(
key: "count", value: idx + 1);
if (res?['code'] == 0) {
setState(() {
idx++;
});
}
},
child: const Text("累加"),
),
Text("当前的值:$idx")
],
),
),
),
);
}
}
更多关于Flutter云端存储插件jingluo_icloud_storage的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter云端存储插件jingluo_icloud_storage的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
jingluo_icloud_storage
是一个用于在 Flutter 应用中访问和操作 iCloud 存储的插件。它允许你在 iOS 设备上将数据存储在 iCloud 中,并在应用的不同实例之间同步数据。
以下是如何使用 jingluo_icloud_storage
插件的基本步骤:
1. 添加依赖
首先,你需要在 pubspec.yaml
文件中添加 jingluo_icloud_storage
插件的依赖:
dependencies:
flutter:
sdk: flutter
jingluo_icloud_storage: ^版本号
将 ^版本号
替换为最新的插件版本。你可以通过 pub.dev 查找最新的版本号。
2. 配置 iCloud
在你的 iOS 项目中,确保你已经启用了 iCloud 功能:
- 打开
ios/Runner.xcworkspace
。 - 选择
Runner
项目。 - 在
Signing & Capabilities
标签中,点击+ Capability
按钮。 - 添加
iCloud
功能,并确保勾选了Key-value storage
或Cloud Documents
,具体取决于你需要的功能。
3. 使用 jingluo_icloud_storage
插件
在 Flutter 代码中,你可以使用 jingluo_icloud_storage
插件来存储和检索数据。
3.1 初始化
首先,初始化 jingluo_icloud_storage
插件:
import 'package:jingluo_icloud_storage/jingluo_icloud_storage.dart';
void initICloudStorage() async {
await JingluoICloudStorage.initialize();
}
3.2 存储数据
你可以使用 setString
、setBool
、setInt
等方法来存储数据:
void saveData() async {
await JingluoICloudStorage.setString('myKey', 'Hello, iCloud!');
await JingluoICloudStorage.setBool('isLoggedIn', true);
await JingluoICloudStorage.setInt('userAge', 30);
}
3.3 获取数据
你可以使用 getString
、getBool
、getInt
等方法来获取数据:
void getData() async {
String myValue = await JingluoICloudStorage.getString('myKey');
bool isLoggedIn = await JingluoICloudStorage.getBool('isLoggedIn');
int userAge = await JingluoICloudStorage.getInt('userAge');
print('myValue: $myValue');
print('isLoggedIn: $isLoggedIn');
print('userAge: $userAge');
}
3.4 删除数据
你可以使用 remove
方法来删除数据:
void removeData() async {
await JingluoICloudStorage.remove('myKey');
}
4. 处理同步
由于 iCloud 数据是同步的,你需要注意数据同步的延迟。你可以监听 NSUbiquitousKeyValueStoreDidChangeExternallyNotification
通知来处理数据变更。
void listenForChanges() {
JingluoICloudStorage.onChanged.listen((event) {
print('iCloud data changed: $event');
// 在这里处理数据变更
});
}
5. 注意事项
- iCloud 存储有一定的限制,例如每个应用的最大存储空间为 1MB。
- 由于 iCloud 是跨设备同步的,确保你的应用在不同设备上处理数据时考虑到了同步延迟。
6. 示例代码
以下是一个完整的示例代码,展示了如何使用 jingluo_icloud_storage
插件:
import 'package:flutter/material.dart';
import 'package:jingluo_icloud_storage/jingluo_icloud_storage.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await JingluoICloudStorage.initialize();
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('iCloud Storage Example'),
),
body: Center(
child: Column(
mainAxisAlignment: Center,
children: [
ElevatedButton(
onPressed: () async {
await JingluoICloudStorage.setString('myKey', 'Hello, iCloud!');
print('Data saved to iCloud');
},
child: Text('Save Data'),
),
ElevatedButton(
onPressed: () async {
String value = await JingluoICloudStorage.getString('myKey');
print('Data from iCloud: $value');
},
child: Text('Get Data'),
),
ElevatedButton(
onPressed: () async {
await JingluoICloudStorage.remove('myKey');
print('Data removed from iCloud');
},
child: Text('Remove Data'),
),
],
),
),
),
);
}
}