在 Nylo 中,您可以使用类 NyStorage
将数据保存到用户设备。在后台,Nylo使用flutter_secure_storage包来保存和检索数据。
1. 存储值
import 'package:nylo_framework/nylo_framework.dart';
...
NyStorage.store("com.company.myapp.coins", "10");
数据将使用 NyStorage 保留在用户的设备上。例如,如果他们退出应用程序,您可以检索之前存储的相同数据。
2. 检索值
import 'package:nylo_framework/nylo_framework.dart';
...
// Default
String coins = await NyStorage.read("com.company.myapp.coins"); // 10
// String
String coins = await NyStorage.read<String>("com.company.myapp.coins"); // 10
// Integer
int coins = await NyStorage.read<int>("com.company.myapp.coins"); // 10
// double
double coins = await NyStorage.read<double>("com.company.myapp.coins"); // 10.00
3. 存储密钥
该类可用于引用字符串,以便以后在 NyStorage 或 Backpack 类中使用。您可以使用 StorageKey 类来组织项目中的所有共享偏好字符串。
打开您的 Nylo 项目并打开“config/storage_keys.dart”文件。
请注意。此文件是在 Nylo v3.2.0 中添加的,如果缺少,可以手动添加。
/*
|--------------------------------------------------------------------------
| Storage Keys
| Add your storage keys here and then use them later to retrieve data.
| E.g. static String userCoins = "USER_COINS";
| String coins = NyStorage.read( StorageKey.userCoins );
|
| Learn more: https://nylo.dev/docs/5.x/storage#storage-keys
|--------------------------------------------------------------------------
*/
class StorageKey {
static String userToken = "USER_TOKEN";
/// Add your storage keys here...
}
如何在项目中使用?
import 'package:flutter_app/config/storage_keys.dart';
...
class _MyHomePageState extends NyState<MyHomePage> {
@override
init() async {
// 存储
await NyStorage.store( StorageKey.userToken , 'Anthony');
// 检索
String userName = await NyStorage.read( StorageKey.userToken );
}
这个简单的类有助于组织存储变量的所有字符串键。
4. Backpack存储
Nylo 包含一个名为 Backpack
的轻量级存储类。此类设计用于在用户会话期间存储小块数据。
Backpack
类不是异步的,因此您可以即时设置/获取数据。
- 设置数据
// 存储字符串
Backpack.instance.set('user_api_token', 'a secure token');
// 存储对象
User user = User();
Backpack.instance.set('user', user);
// 存储数字
Backpack.instance.set('my_lucky_no', 7);
- 读取数据
Backpack.instance.read('user_api_token'); // token
Backpack.instance.read('user'); // User实例
Backpack.instance.read('my_lucky_no'); // 7
- 实际使用
当您可能想要在 NyStorage 类上使用此类时,一个很好的例子是例如用于身份验证时存储用户的 api_token
。
// 登录
LoginResponse loginResponse = await _apiService.loginUser('email': '...', 'password': '...');
String userToken = loginResponse.token;
// 将用户token存储到 NyStorage 中,以便持久存储
await NyStorage.store('user_token', userToken);
// 将token存储到Backpack类,以确保用户在随后的应用程序接口请求中通过身份验证
Backpack.instance.set('user_token', userToken);
现在在我们的 API 服务中,我们可以从 Backpack 类设置身份验证请求头,而无需等待异步响应。
class ApiService extends BaseApiService {
...
Future<dynamic> accountDetails() async {
return await network(
request: (request) {
String userToken = Backpack.instance.read('user_api_token');
// 设置请求头验证信息
request.options.headers = {
'Authorization': "Bearer " + userToken
};
return request.get("/account/1");
},
);
}
}
- 使用Backpack持久保存数据
您可以使用该 NyStorage
类来保存数据,但如果还需要将其保存到应用的Backpack存储中,请使用以下参数“inBackpack”。
// 使用Backpack将数据存储在安全存储器和内存中
await NyStorage.store('user_token', 'a token 123', inBackpack: true);
// 用Backpack取回数据
Backpack.instance.read('user_token'); // "a token 123"
默认情况下,NyStorge 不会将数据存储在Backpack中,除非
inBackpack
参数设置为true
5. 集合
当您想要存储事物的集合时,可以使用集合。例如,字符串、对象或整数的列表。下面是设置、获取和删除集合中的值的示例。
- 我们希望在用户每次点击“添加产品”时存储产品 ID 列表
- 在其他页面上显示产品 ID 列表
- 从集合中删除产品 ID
// 1 - 添加产品到集合
_addProduct(int productId) async {
await NyStorage.addToCollection("product_ids", newItem: productId); // adds productId to the collection
}
// 2 - 页面展示数据, 例如. cart_page.dart
@override
Widget build(BuildContext context) {
return Scaffold(
body: SafeArea(
child: NyFutureBuilder(future: NyStorage.readCollection("product_ids"), child: (context, data) {
return ListView(
children: data.map((productId) {
return Text(productId.toString());
}).toList(),
);
},)
),
);
}
// 3 - 从集合中删除产品
_removeItemFromCollection(int index) async {
await NyStorage.deleteFromCollection(index, key: "product_ids");
}
- 添加到集合
您可以通过调用 NyStorage.addToCollection("a_storage_key", newItem: "1");
向集合添加新项目。
await NyStorage.addToCollection("a_storage_key", newItem: "1");
await NyStorage.addToCollection("a_storage_key", newItem: "2");
await NyStorage.addToCollection("a_storage_key", newItem: "3");
await NyStorage.readCollection("a_storage_key"); // ["1", "2", "3"]
- 检索集合
可以通过调用 NyStorage.readCollection("a_storage_key");
来检索集合。
await NyStorage.addToCollection("a_storage_key", newItem: "Anthony");
await NyStorage.addToCollection("a_storage_key", newItem: "Kyle");
await NyStorage.readCollection("a_storage_key"); // ["Anthony", "Kyle"]
- 删除集合
可以通过调用 NyStorage.deleteCollection("a_storage_key");
来删除集合。
await NyStorage.readCollection("a_storage_key"); // ["Anthony", "Kyle"]
await NyStorage.deleteFromCollection(0, "a_storage_key"); // ["Kyle"]