Flutter动态资源交付插件flutter_play_asset_delivery的使用

Flutter 动态资源交付插件 flutter_play_asset_delivery 的使用

flutter_play_asset_delivery 插件允许我们将超过 150 MB 的 App Bundle 上传到 Google Play 商店。以下是使用此插件进行动态资源交付的详细步骤。

系统支持

  • ✅ Android
  • ❌ iOS 替代方案

测试资产

编辑 Android 的运行/调试配置,并将 部署 更改为 APK from app bundle


示例代码

以下是一个完整的示例代码,演示了如何使用 flutter_play_asset_delivery 插件获取并显示一个动态资源文件。

import 'dart:io';

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

import 'package:flutter_play_asset_delivery/flutter_play_asset_delivery.dart';

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

class MyApp extends StatefulWidget {
  const MyApp({Key? key}) : super(key: key);

  [@override](/user/override)
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  late Future<File> image;

  [@override](/user/override)
  void initState() {
    super.initState();

    // 获取一个资产文件(例如:图片)
    image = FlutterPlayAssetDelivery.getAssetFile("flutter.png");
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('插件示例应用'),
        ),
        body: Center(
          child: FutureBuilder(
            future: image,
            builder: (_, AsyncSnapshot<File> snapshot) {
              if (!snapshot.hasData) return const CircularProgressIndicator();
              // 显示获取到的图片
              return Image.file(snapshot.data!);
            },
          ),
        ),
      ),
    );
  }
}

代码说明

  1. 导入必要的包

    import 'dart:io';
    import 'package:flutter/material.dart';
    import 'dart:async';
    import 'package:flutter_play_asset_delivery/flutter_play_asset_delivery.dart';
    
  2. 主应用类

    void main() {
      runApp(const MyApp());
    }
    
  3. 定义状态管理类

    class MyApp extends StatefulWidget {
      const MyApp({Key? key}) : super(key: key);
    
      [@override](/user/override)
      State<MyApp> createState() => _MyAppState();
    }
    
  4. 初始化状态

    class _MyAppState extends State<MyApp> {
      late Future<File> image;
    
      [@override](/user/override)
      void initState() {
        super.initState();
    
        // 获取一个资产文件(例如:图片)
        image = FlutterPlayAssetDelivery.getAssetFile("flutter.png");
      }
    

    initState 方法中,我们调用了 getAssetFile 方法来获取指定路径下的资源文件。

  5. 构建用户界面

    [@override](/user/override)
    Widget build(BuildContext context) {
      return MaterialApp(
        home: Scaffold(
          appBar: AppBar(
            title: const Text('插件示例应用'),
          ),
          body: Center(
            child: FutureBuilder(
              future: image,
              builder: (_, AsyncSnapshot<File> snapshot) {
                if (!snapshot.hasData) return const CircularProgressIndicator();
                // 显示获取到的图片
                return Image.file(snapshot.data!);
              },
            ),
          ),
        ),
      );
    }
    

更多关于Flutter动态资源交付插件flutter_play_asset_delivery的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter动态资源交付插件flutter_play_asset_delivery的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是一个关于如何使用Flutter动态资源交付插件flutter_play_asset_delivery的代码示例。这个插件允许你通过Google Play的资产交付服务(Play Asset Delivery)来动态下载应用资源,比如图片、音频文件等。

步骤1:添加依赖

首先,在你的pubspec.yaml文件中添加flutter_play_asset_delivery依赖:

dependencies:
  flutter:
    sdk: flutter
  flutter_play_asset_delivery: ^0.x.y  # 请确保使用最新版本号

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

步骤2:配置build.gradle

在你的android/app/build.gradle文件中,确保你已经启用了Play Asset Delivery。这通常涉及到配置bundleinstall-time资产类型。例如:

android {
    ...
    defaultConfig {
        ...
        // 确保应用ID正确
        applicationId "com.example.yourapp"

        // 为Play Asset Delivery配置资产包
        playAssetDeliveryClient {
            assetsBundleNames = ['assets']  // 这里'assets'是你定义的资产包名称
        }
    }
    ...
}

步骤3:上传资产包到Google Play Console

在Google Play Console中,你需要上传一个包含所需资源的资产包。这个资产包应该与你在build.gradle中配置的资产包名称相匹配。

步骤4:在Flutter代码中下载和使用资源

下面是一个如何在Flutter应用中下载和使用通过Play Asset Delivery提供的资源的示例代码:

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

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

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  late AssetPackManager assetPackManager;
  bool isAssetPackDownloaded = false;

  @override
  void initState() {
    super.initState();
    assetPackManager = AssetPackManager.instance;

    // 监听资产包下载状态
    assetPackManager.addListener(() {
      setState(() {
        isAssetPackDownloaded = assetPackManager.isPackDownloaded('assets');
      });
    });

    // 检查并下载资产包
    _checkAndDownloadAssetPack();
  }

  Future<void> _checkAndDownloadAssetPack() async {
    if (!assetPackManager.isPackDownloaded('assets')) {
      try {
        await assetPackManager.requestPack('assets');
      } catch (e) {
        print('Failed to request asset pack: $e');
      }
    }
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter Play Asset Delivery Example'),
        ),
        body: Center(
          child: isAssetPackDownloaded
              ? Image.asset('assets/images/your_image.png')  // 使用下载的资产
              : CircularProgressIndicator(),  // 显示加载指示器,直到资产下载完成
        ),
      ),
    );
  }
}

在这个示例中,我们首先初始化了AssetPackManager,并监听资产包的下载状态。然后我们检查资产包是否已经下载,如果没有,则请求下载。在UI部分,我们根据资产包的下载状态来显示相应的内容(例如,一张图片或一个加载指示器)。

注意事项

  1. 资产包命名:确保你在build.gradle中配置的资产包名称与你在代码中请求的资产包名称相匹配。
  2. 资源路径:在Flutter中使用从资产包下载的资源时,资源路径应该与你在资产包中定义的路径一致。
  3. 测试:在发布应用之前,确保在内部测试轨道上测试Play Asset Delivery的功能,以确保一切正常工作。

这样,你就可以使用flutter_play_asset_delivery插件来动态下载和使用应用资源了。

回到顶部