Flutter YAML解析插件utility_yaml的使用

Flutter YAML解析插件utility_yaml的使用

使用

YamlConfiguration 示例

YamlConfiguration 是一个用于加载和保存YAML配置文件的类。它提供了多种方法来读取不同类型的YAML数据。

import 'package:utility_yaml/utility_yaml.dart';

void main() {
  // 加载YAML文件
  final yaml = YamlConfiguration.loadPath('example/config.yml');

  // 读取不同类型的数据
  print(yaml.getString('string')); // 获取字符串
  print(yaml.getInt('int')); // 获取整数
  print(yaml.getDouble('double')); // 获取双精度浮点数
  print(yaml.getBoolean('boolean')); // 获取布尔值
  print(yaml.getList('list')); // 获取列表
  print(yaml.getMap('map')); // 获取映射

  // 修改并保存到新文件
  yaml.put('copy', [1, 2, 3, 4, 5]);
  yaml.saveToPath('example/configCopy.yml');
}

上述代码首先加载了一个名为 config.yml 的YAML文件,然后通过不同的方法读取了其中的字符串、整数、双精度浮点数、布尔值、列表和映射,并将这些数据打印出来。最后,通过 put 方法添加了一个新的键值对,并通过 saveToPath 方法将修改后的YAML数据保存到了一个新的文件 configCopy.yml 中。

Yamlble 示例

Yamlble 类是一个用于处理复杂对象的抽象类。它允许将复杂对象序列化为YAML格式,并反序列化回对象。

import 'package:utility_yaml/filtering.dart';
import 'package:utility_yaml/utility_yaml.dart';

void main() {
  final path = 'example/yamlbleTest.yml';
  final key = 'yamlble';

  // 创建并保存一个复杂的YAML对象
  final yaml1 = YamlConfiguration();
  yaml1.put(key, TestYamlbleA());
  yaml1.saveToPath(path);

  // 从YAML文件中加载对象
  final yaml2 = YamlConfiguration.loadPath(path);
  final yamlble = yaml2.getYamlble<TestYamlbleA>(key);

  // 打印对象信息
  print('isYamlble: ${yamlble is Yamlble}');
  print('');
  print(yamlble.toString().replaceAll(', ', ',\n'));
}

// 定义一个继承自Yamlble的复杂对象
class TestYamlbleA extends Yamlble {
  TestYamlbleA() {
    b = false;
    i = 123;
    d = 3.14;
    string = 'My name is TestYamlbleA!';
    yamlble = TestYamlbleB();
  }

  TestYamlbleA.loadYaml(this.b, this.i, this.d, this.string, this.yamlble);

  late final bool b;
  late final int i;
  late final double d;
  late final String string;
  late final TestYamlbleB yamlble;
}

// 定义另一个继承自Yamlble的复杂对象
class TestYamlbleB extends Yamlble {
  TestYamlbleB() {
    b = true;
    stringList = [
      'This',
      'class',
      'is',
      'TestYamlbleB!',
    ];
    intMap = {
      'aaa': 123,
      'bbb': 456,
      'ccc': 789,
    };
  }

  TestYamlbleB.loadYaml(this.b, List stringList, Map intMap) {
    this.stringList = filteringList<String>(stringList);
    this.intMap = filteringMap<String, int>(intMap);
  }

  late final bool b;
  late final List<String> stringList;
  late final Map<String, int> intMap;
}

更多关于Flutter YAML解析插件utility_yaml的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter YAML解析插件utility_yaml的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter中,解析YAML文件通常用于读取配置文件或数据文件。虽然Flutter本身没有直接提供YAML解析的功能,但你可以使用第三方库来轻松实现这一功能。utility_yaml 是一个用于解析YAML文件的实用工具库,它可以帮助你快速读取和解析YAML文件。

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 utility_yaml 依赖:

dependencies:
  flutter:
    sdk: flutter
  utility_yaml: ^1.0.0  # 请检查最新版本

然后运行 flutter pub get 来获取依赖。

2. 使用 utility_yaml 解析 YAML 文件

假设你有一个 config.yaml 文件,内容如下:

app_name: My Flutter App
version: 1.0.0
author: John Doe
features:
  - authentication
  - notifications
  - analytics

你可以使用 utility_yaml 来解析这个文件:

import 'package:flutter/material.dart';
import 'package:utility_yaml/utility_yaml.dart';
import 'dart:io';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();

  // 读取YAML文件
  File file = File('assets/config.yaml');
  String yamlString = await file.readAsString();

  // 解析YAML
  Map<String, dynamic> config = UtilityYaml.loadYaml(yamlString);

  print('App Name: ${config['app_name']}');
  print('Version: ${config['version']}');
  print('Author: ${config['author']}');
  print('Features: ${config['features']}');

  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'YAML Parser Example',
      home: Scaffold(
        appBar: AppBar(
          title: Text('YAML Parser Example'),
        ),
        body: Center(
          child: Text('Check the console for YAML parsing output!'),
        ),
      ),
    );
  }
}

3. 处理 YAML 文件的位置

在上面的例子中,YAML 文件是直接通过文件路径读取的。如果你将 YAML 文件放在 assets 文件夹中,你需要确保在 pubspec.yaml 中声明该文件:

flutter:
  assets:
    - assets/config.yaml

然后你可以使用 rootBundle 来读取该文件:

import 'package:flutter/services.dart' show rootBundle;

void main() async {
  WidgetsFlutterBinding.ensureInitialized();

  // 读取YAML文件
  String yamlString = await rootBundle.loadString('assets/config.yaml');

  // 解析YAML
  Map<String, dynamic> config = UtilityYaml.loadYaml(yamlString);

  print('App Name: ${config['app_name']}');
  print('Version: ${config['version']}');
  print('Author: ${config['author']}');
  print('Features: ${config['features']}');

  runApp(MyApp());
}

4. 解析嵌套的 YAML 数据

如果你的 YAML 文件包含嵌套的数据结构,utility_yaml 也可以轻松处理。例如:

app:
  name: My Flutter App
  version: 1.0.0
  author: John Doe
features:
  - authentication
  - notifications
  - analytics

你可以这样访问嵌套的数据:

print('App Name: ${config['app']['name']}');
print('Version: ${config['app']['version']}');
print('Author: ${config['app']['author']}');

5. 错误处理

在处理 YAML 文件时,可能会遇到格式错误或文件不存在的情况。你可以使用 try-catch 块来捕获和处理这些错误:

try {
  String yamlString = await rootBundle.loadString('assets/config.yaml');
  Map<String, dynamic> config = UtilityYaml.loadYaml(yamlString);
  print('App Name: ${config['app_name']}');
} catch (e) {
  print('Error parsing YAML: $e');
}
回到顶部