Flutter属性列表序列化插件propertylistserialization的使用
Flutter属性列表序列化插件 propertylistserialization
的使用
propertylistserialization
是一个用于 Dart 的库,提供了与 iOS 兼容的属性列表(plist)序列化和反序列化的功能。该库支持 XML 和二进制格式的 plist 文件,并且可以在 Flutter 项目中使用。
特性
XML 格式 (xml1)
PropertyListSerialization.dataFromPropertyList()
方法生成的输出与 iOS 的[NSPropertyListSerialization dataFromPropertyList:format:options:error:]
方法几乎完全一致。- 字典 (
dict
) 按照键进行排序(如 CFPropertyList.c 中所述)。 - 键(字典)和字符串值会转义
<
,>
, 和&
字符为\<
,\>
, 和\&
(如 CFPropertyList.c 中所述)。
二进制格式 (binary1)
- 支持版本
bplist00
构造。 - 支持反序列化
NSKeyedArchiver
的 CF$UID 构造。 PropertyListSerialization.dataFromPropertyList()
方法生成的输出与 iOS 的[NSPropertyListSerialization dataFromPropertyList:format:options:error:]
方法几乎完全一致。
安装
在 pubspec.yaml
文件中添加依赖:
dependencies:
propertylistserialization: ^最新版本号
然后运行 flutter pub get
来安装插件。
导入库到 Dart 代码中:
import 'package:propertylistserialization/propertylistserialization.dart';
示例 Demo
XML 格式的示例
写入/序列化
void main() {
final list = [];
final dict = <String, Object>{};
dict['Selected'] = true;
dict['IconName'] = 'largeIcon.png';
dict['IconSize'] = 32;
list.add(dict);
try {
final xml = PropertyListSerialization.stringWithPropertyList(list);
print('**xml**\n$xml');
} on PropertyListWriteStreamException catch (e) {
// handle error.
}
}
输出结果
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<array>
<dict>
<key>IconName</key>
<string>largeIcon.png</string>
<key>IconSize</key>
<integer>32</integer>
<key>Selected</key>
<true/>
</dict>
</array>
</plist>
读取/反序列化
try {
final list = PropertyListSerialization.propertyListWithString(xml) as List;
final dict = list[0] as Map<String, Object>;
final selected = dict['Selected']; // true
final iconName = dict['IconName']; // largeIcon.png
final iconSize = dict['IconSize']; // 32
print('$selected $iconName $iconSize');
} on PropertyListReadStreamException catch (e) {
// handle error.
}
二进制格式的示例
写入/序列化
void main() {
final list = [];
final dict = <String, Object>{};
dict['Selected'] = true;
dict['IconName'] = 'largeIcon.png';
dict['IconSize'] = 32;
list.add(dict);
try {
final bin = PropertyListSerialization.dataWithPropertyList(list);
print('**binary**\n${hex.encoder.convert(Uint8List.sublistView(bin))}');
} on PropertyListWriteStreamException catch (e) {
// handle error.
}
}
输出结果
62 70 6c 69 73 74 30 30 a1 01 d3 02 03 04 05 06 07 58 49 63 6f 6e 4e 61 6d 65 58 49 63 6f 6e 53 69 7a 65 58 53 65 6c 65 63 74 65 64 5d 6c 61 72 67 65 49 63 6f 6e 2e 70 6e 67 10 20 09 08 0a 11 1a 23 2c 3a 3c 00 00 00 00 00 00 01 01 00 00 00 00 00 00 00 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 3d
读取/反序列化
try {
final list = PropertyListSerialization.propertyListWithData(bin) as List;
final dict = list[0] as Map<String, Object>;
final selected = dict['Selected'];
final iconName = dict['IconName'];
final iconSize = dict['IconSize'];
print('$selected $iconName $iconSize');
} on PropertyListReadStreamException catch (e) {
// handle error.
}
通过上述示例,您可以轻松地在 Flutter 应用中实现属性列表的序列化和反序列化操作。请确保处理可能发生的异常以保证应用的稳定性。
更多关于Flutter属性列表序列化插件propertylistserialization的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
1 回复