Flutter应用更新插件flutter_xupdate的使用

发布于 1周前 作者 vueper 来自 Flutter

Flutter应用更新插件flutter_xupdate的使用

简介

flutter_xupdate 是一个用于Flutter项目的Android应用更新库,基于XUpdate。它提供了灵活的应用内更新功能,包括自定义JSON解析、后台更新支持等特性。

开始使用

添加依赖

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

dependencies:
  flutter_xupdate: ^3.0.0

或者从GitHub仓库获取最新版本:

dependencies:
  flutter_xupdate:
    git:
      url: git://github.com/xuexiangjys/flutter_xupdate.git
      ref: master

然后运行flutter packages get命令安装依赖。

初始化

在应用程序启动时初始化插件,通常是在initState方法中完成:

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

void initXUpdate() {
  if (Platform.isAndroid) {
    FlutterXUpdate.init(
      debug: true,
      isPost: false,
      isPostJson: false,
      timeout: 25000,
      isWifiOnly: false,
      isAutoMode: false,
      supportSilentInstall: false,
      enableRetry: false
    ).then((value) {
      print('初始化成功: $value');
    }).catchError((error) {
      print(error);
    });
  } else {
    print("iOS暂不支持XUpdate更新");
  }
}

检查更新

检查更新的基本调用方式如下:

void checkUpdateDefault() {
  final String updateUrl = 'https://your-update-api-url.com/update.json';
  FlutterXUpdate.checkUpdate(url: updateUrl);
}

更多选项如支持后台更新、强制更新等可以参考以下示例:

// 支持后台更新
void checkUpdateSupportBackground() {
  FlutterXUpdate.checkUpdate(url: updateUrl, supportBackgroundUpdate: true);
}

// 强制更新
void checkUpdateForce() {
  FlutterXUpdate.checkUpdate(url: forcedUpdateUrl);
}

自定义更新弹窗样式

你可以通过设置参数来自定义更新提示窗口的主题颜色和顶部图片资源:

void customPromptDialog() {
  FlutterXUpdate.checkUpdate(
    url: updateUrl,
    themeColor: '#FFFFAC5D',
    topImageRes: 'bg_update_top', // 图片应放置于android/app/src/main/res/drawable/
    buttonTextColor: '#FFFFFFFF'
  );
}

注意:当构建发布包时,如果使用了topImageRes属性,请确保配置shrinkResources为false。

示例代码

这里提供了一个完整的示例demo,演示如何集成并使用flutter_xupdate插件进行应用更新操作。

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

void main() => runApp(MyApp());

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

class _MyAppState extends State<MyApp> {
  String _message = '';
  
  void initState() {
    super.initState();
    initXUpdate();
  }

  void initXUpdate() {
    if (Platform.isAndroid) {
      FlutterXUpdate.init(debug: true).then((value) {
        setState(() {
          _message = '初始化成功: $value';
        });
      }).catchError((error) {
        print(error);
      });
    } else {
      setState(() {
        _message = "iOS暂不支持XUpdate更新";
      });
    }
  }

  @override
Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('flutter_xupdate Demo')),
        body: Center(
          child: ElevatedButton(
            onPressed: () => checkUpdateDefault(),
            child: Text('Check for Updates'),
          ),
        ),
      ),
    );
  }

  void checkUpdateDefault() {
    final String updateUrl = 'https://your-update-api-url.com/update.json';
    FlutterXUpdate.checkUpdate(url: updateUrl);
  }
}

以上就是关于如何使用flutter_xupdate插件的基本介绍和示例代码。请根据实际需求调整配置和逻辑。


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

1 回复

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


在Flutter应用中,使用flutter_xupdate插件可以实现应用的自动更新功能。下面是一个简单的代码示例,展示了如何集成和使用flutter_xupdate插件。

1. 添加依赖

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

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

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

2. 配置Android和iOS

确保你的Android和iOS项目已经正确配置,以便可以访问网络下载更新包。通常,你需要配置网络权限和相关的URL Scheme(如果更新包托管在自定义服务器上)。

Android

android/app/src/main/AndroidManifest.xml中添加网络权限:

<uses-permission android:name="android.permission.INTERNET"/>

iOS

ios/Runner/Info.plist中确保有适当的网络访问权限配置。

3. 初始化flutter_xupdate

在你的Flutter应用中,初始化flutter_xupdate插件,并检查更新。

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

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

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

class _MyAppState extends State<MyApp> {
  @override
  void initState() {
    super.initState();
    initXUpdate();
  }

  void initXUpdate() async {
    // 配置更新插件
    final XUpdateConfig config = XUpdateConfig(
      url: 'https://你的更新包服务器地址/update.json',  // 更新配置文件的URL
      supportBackground: true,  // 是否支持后台下载
      autoMode: XUpdateAutoMode.none,  // 自动更新模式(这里设置为不自动更新,手动控制)
      debug: true,  // 是否为调试模式(生产环境请设置为false)
    );

    // 初始化插件
    await XUpdate.init(config: config);

    // 检查更新
    XUpdate.checkUpdate().then((result) {
      if (result.hasUpdate) {
        // 有更新
        showDialog(
          context: context,
          builder: (context) => AlertDialog(
            title: Text('发现新版本'),
            content: Text('版本:${result.versionName}\n更新内容:${result.changeLog}'),
            actions: <Widget>[
              TextButton(
                onPressed: () {
                  // 取消更新
                  Navigator.of(context).pop();
                },
                child: Text('取消'),
              ),
              TextButton(
                onPressed: () async {
                  // 下载并安装更新
                  try {
                    await XUpdate.downloadAndInstall();
                  } catch (e) {
                    // 处理下载或安装过程中的错误
                    print('更新失败: $e');
                  }
                },
                child: Text('立即更新'),
              ),
            ],
          ),
        );
      } else {
        // 没有更新
        print('当前已是最新版本');
      }
    }).catchError((error) {
      // 处理检查更新过程中的错误
      print('检查更新失败: $error');
    });
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter XUpdate 示例'),
        ),
        body: Center(
          child: Text('检查更新示例'),
        ),
      ),
    );
  }
}

4. 更新配置文件

你的更新配置文件(如update.json)应该类似于以下内容:

{
  "versionCode": 2,
  "versionName": "1.1.0",
  "changeLog": "修复了一些已知问题,优化了性能",
  "apkUrl": "https://你的更新包服务器地址/your_app_v1.1.0.apk",
  "mandatory": false  // 是否为强制更新
}

注意事项

  • 确保你的更新包服务器支持HTTPS,否则在Android 9.0及以上版本可能会因为网络安全配置而无法下载。
  • 在生产环境中,将debug配置设置为false
  • 根据你的应用需求调整自动更新模式(XUpdateAutoMode)。

通过上述步骤,你就可以在Flutter应用中集成并使用flutter_xupdate插件来实现应用的自动更新功能。

回到顶部