Flutter资源打包优化插件bundelizer的使用

Flutter资源打包优化插件bundelizer的使用

Easy way to store/retrieve data in structured way. Multiplatform support native + web.
需要将游戏进度存储到磁盘?来自设计应用的自定义数据?这是你的包。

特性

  • 将数据以压缩的json格式存储。
  • 可以添加二进制数据作为bundle。
  • 快速内存加载。

开始使用

要开始使用bundelizer插件,首先需要在pubspec.yaml文件中添加依赖项:

dependencies:
  bundelizer: ^1.0.0

然后运行flutter pub get命令来安装该插件。

使用方法

以下是一个简单的示例,演示如何使用bundelizer插件来存储和读取资源:

import 'package:flutter/material.dart';
import 'package:bundelizer/bundelizer.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: HomeScreen(),
    );
  }
}

class HomeScreen extends StatefulWidget {
  [@override](/user/override)
  _HomeScreenState createState() => _HomeScreenState();
}

class _HomeScreenState extends State<HomeScreen> {
  String _message = '';

  // 存储数据到bundle
  void _storeData() async {
    // 创建一个Bundle对象
    final bundle = await Bundelizer.createBundle('example.bundle');

    // 添加一些字符串数据
    bundle.putString('name', 'John Doe');
    bundle.putInt('age', 30);
    
    // 将bundle写入文件系统
    await bundle.saveToFile('assets/example.bundle');
    
    setState(() {
      _message = '数据已保存';
    });
  }

  // 从bundle中读取数据
  void _loadData() async {
    // 从文件系统中读取bundle
    final bundle = await Bundelizer.loadFromFile('assets/example.bundle');
    
    // 从bundle中读取数据
    final name = bundle.getString('name');
    final age = bundle.getInt('age');
    
    setState(() {
      _message = '姓名: $name, 年龄: $age';
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Bundleizer 示例'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            ElevatedButton(
              onPressed: _storeData,
              child: Text('保存数据'),
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: _loadData,
              child: Text('读取数据'),
            ),
            SizedBox(height: 20),
            Text(_message),
          ],
        ),
      ),
    );
  }
}

更多关于Flutter资源打包优化插件bundelizer的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter资源打包优化插件bundelizer的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter开发中,资源打包优化是一个常见的需求,而bundelizer是一个专门用于优化Flutter资源打包的插件。以下是如何在Flutter项目中使用bundelizer的示例代码和配置步骤。

1. 添加依赖

首先,你需要在pubspec.yaml文件中添加bundelizer的依赖。

dependencies:
  flutter:
    sdk: flutter
  bundelizer: ^最新版本号  # 请替换为最新的版本号

然后运行flutter pub get来安装依赖。

2. 配置bundelizer

在Flutter项目的根目录下创建一个名为bundelizer.yaml的配置文件。这个文件用于定义资源的打包规则。

# bundelizer.yaml

targets:
  android:
    include:
      - assets/images/android/**
    exclude:
      - assets/images/ios/**
  ios:
    include:
      - assets/images/ios/**
    exclude:
      - assets/images/android/**

# 默认配置,如果没有特定平台的配置,则使用默认配置
default:
  include:
    - assets/**
  exclude:
    - assets/temp/**

在上面的配置中,我们定义了针对Android和iOS平台的资源打包规则。例如,Android平台只包含assets/images/android/目录下的资源,而iOS平台只包含assets/images/ios/目录下的资源。默认配置则适用于没有特定平台配置的情况。

3. 运行bundelizer

pubspec.yaml同级目录下,你可以通过命令行运行bundelizer

flutter pub run bundelizer

这个命令会根据bundelizer.yaml配置文件中的规则来优化和打包资源。

4. 集成到构建流程

为了方便,你可以将bundelizer集成到Flutter的构建流程中。你可以在build.yaml或自定义的构建脚本中添加运行bundelizer的命令。

例如,在build.yaml中(虽然build.yaml通常用于Dart的构建设置,但这里仅作为示例说明如何集成到构建流程中,实际可能需要使用自定义脚本):

# 注意:build.yaml通常不直接支持运行pub命令,这里仅为示例
targets:
  $default:
    builders:
      # 自定义builder,实际中需要通过脚本实现
      bundelize:
        import: "package:bundelizer/builder.dart"
        builder_factories: ["bundelize"]
        auto_apply: root_package
        build_extensions: { "$lib$": ["[dir]/bundled_resources"] }
        build_to: cache

注意:上面的build.yaml配置是一个概念性的示例,实际上bundelizer并不直接提供一个builder来集成到build.yaml中。你可能需要编写一个自定义的脚本,在构建前运行bundelizer

例如,创建一个build_script.dart

import 'dart:io';

void main() {
  ProcessResult result = Process.runSync('flutter', ['pub', 'run', 'bundelizer']);
  if (result.exitCode != 0) {
    stderr.writeln('bundelizer failed with exit code ${result.exitCode}');
    stderr.writeln(result.stderr);
    exit(result.exitCode);
  }
  print('bundelizer succeeded');
  // 继续执行其他构建步骤...
}

然后在你的构建流程中调用这个脚本。

总结

bundelizer是一个强大的工具,可以帮助你优化Flutter应用的资源打包。通过配置bundelizer.yaml文件,你可以精确地控制哪些资源被包含在每个平台的构建中,从而减少最终包的大小并提高加载性能。记得在实际项目中,根据需求调整配置文件和集成方式。

回到顶部