Flutter的Plist解析器?

pub package

一个支持XML和二进制格式的Plist解析器Flutter插件。

它从头开始为Dart编写了XML和二进制解析器,并且不依赖其他原生库。

这是受到一些库的启发。请查看下面的详细信息。

安装?

dependencies:
  plist_parser: "^0.0.1"

用法 ?

import 'package:plist_parser/plist_parser.dart';
import 'dart:io';

const xml = '''
<?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">
<dict>
  <key>string_type</key>
  <string>hello plist</string>
  <key>int_type</key>
  <integer>12345</integer>
  <key>double_type</key>
  <real>12.345</real>
  <key>bool_type_true</key>
  <true/>
  <key>bool_type_false</key>
  <false/>
  <key>date_type</key>
  <date>2022-02-11T18:27:45Z</date>
  <key>data_type</key>
  <data>VGVzdCBWYWx1ZQ==</data>
  <key>dict_type</key>
  <dict>
    <key>key1</key>
    <string>value1</string>
    <key>key2</key>
    <integer>2</integer>
    <key>long_key_item_name_aaaaa_bbbbb_ccccc_ddddd_eeeee</key>
    <string>long_key_item_value_11111_22222_33333_44444_55555</string>
  </dict>
  <key>array_type</key>
  <array>
    <string>array item1</string>
    <string>array item2</string>
  </array>
  <key>array_type2</key>
  <array>
    <string>array2 item1</string>
    <dict>
      <key>nest_array</key>
      <array>
        <string>nest_array_item</string>
      </array>
      <key>nest_dict</key>
      <dict>
        <key>nest_dict_item</key>
        <integer>12345</integer>
      </dict>
    </dict>
  </array>
</dict>
</plist>
''';

void main() {
  // parse from xml string
  var result = PlistParser().parse(xml);
  print(result);
  print("int_type: ${result["int_type"]}");
  print("array_type[1]: ${result["array_type"][1]}\n");

  // parse from binary file sync
  filePath = "${Directory.current.path}/example/example_binary.plist";
  print("parseBinaryFileSync\n${PlistParser().parseBinaryFileSync(filePath)}\n"); 
}

输出是这些

// ※ Formatted for readability
{
    string_type: hello plist, 
    int_type: 12345, 
    double_type: 12.345, 
    bool_type_true: true, 
    bool_type_false: false, 
    date_type: 2022-02-11 18:27:45.000Z, 
    data_type: Test Value, 
    dict_type: {
        key1: value1, 
        key2: 2, 
        long_key_item_name_aaaaa_bbbbb_ccccc_ddddd_eeeee: long_key_item_value_11111_22222_33333_44444_55555
    }, 
    array_type: [
        array item1, 
        array item2
    ], 
    array_type2: [
        array2 item1, 
        {
            nest_array: [nest_array_item], 
            nest_dict: {
                nest_dict_item: 12345
            }
        }
    ]
}

int_type: 12345
array_type item2: array item2

parseBinaryFileSync
{array_type2: [array2 item1, {nest_dict: {nest_dict_item: 12345}, nest_array: [nest_array_item]}], date_type: 2022-02-11 18:27:45.000, double_type: 12.345, string_type: hello plist, bool_type_true: false, array_type: [array item1, array item2], bool_type_false: true, dict_type: {key1: value1, key2: 2, long_key_item_name_aaaaa_bbbbb_ccccc_ddddd_eeeee: long_key_item_value_11111_22222_33333_44444_55555}, data_type: Test Value, int_type: 12345}

其他示例存储在 /example/plist_parser_example.dart

灵感 ✨

参考资料?

GitHub

查看 Github