Flutter应用更新管理插件mo_app_update的使用

Flutter应用更新管理插件mo_app_update的使用

简介

mo_app_update 是一个由 Moberan 开发的用于 Flutter 应用更新检查的插件。它可以帮助开发者轻松地在 Android 和 iOS 上实现应用更新功能。

使用步骤

Android 自更新

1. 添加 info.json 和 APK 文件到公共域

首先,你需要在服务器上放置一个 info.json 文件,该文件包含了应用版本信息及下载链接。以下是一个示例 info.json 文件:

{
    "android": {
        "2": {
            "downloadUrl": "https://some.apk",
            "versionString": "0.0.2",
            "priority": "2",
            "changelog": {
            "ko-kr": "테스트",
            "en-us": "Test"
            }
        },
        "1": {
            "downloadUrl": "...",
            "versionString": "0.0.1",
            "priority": "0",
            "changelog": {
            "ko-kr": "최초 버전",
            "en-us": "Init version"
            }
        }
    }
}

确保将 downloadUrl 替换为实际的 APK 文件的下载链接。

2. 在项目中添加依赖

在你的 pubspec.yaml 文件中添加 mo_app_update 插件:

flutter pub add mo_app_update

3. 编写 Flutter 代码

在 Flutter 代码中初始化插件,并调用相关方法来检查和处理应用更新。

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

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

class MyApp extends StatefulWidget {
  const MyApp({super.key});

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

class _MyAppState extends State<MyApp> {
  MoAppUpdate? _moAppUpdatePlugin;

  Future<void> init() async {
    _moAppUpdatePlugin = await MoAppUpdate.initialize(
      mode: MoAppUpdateMode.self,
      selfOption: MoAppUpdateSelfOption(
        infoUrl: 'https://minio.moberan.com/moappupdate/android/info.json',
      ),
    );

    setState(() {});
  }

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

  Future<void> showSimpleDialog({
    required String message,
    List<String> buttons = const ['OK'],
  }) async {
    await showDialog(
      context: context,
      builder: (context) => AlertDialog(
        title: Text(message),
        actions: buttons.map((e) => TextButton(
          onPressed: () {
            Navigator.pop(context, e);
          },
          child: Text(e),
        )).toList(),
      ),
    );
  }

  Future<void> onCheckUpdate() async {
    var info = await _moAppUpdatePlugin?.getUpdateInfo();
    setState(() {});

    if (info == null || info.hasUpdate == false) {
      await showSimpleDialog(
        message: '无更新',
        buttons: ['OK'],
      );
      return;
    }

    var res = await showSimpleDialog(
      message: '有新版本 ${info.newVersionString} 可用',
      buttons: ['忽略', '更新'],
    );

    if (res != '更新') {
      return;
    }

    try {
      showDialog(
        context: context,
        barrierDismissible: false,
        builder: (context) => const Dialog(
          child: Center(
            child: CircularProgressIndicator(),
          ),
        ),
      );

      var res = await _moAppUpdatePlugin?.procedureUpdate(info);
      Navigator.pop(context);
    } catch (e) {
      showSimpleDialog(
        message: e.toString(),
        buttons: ['OK'],
      );
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('插件示例应用'),
      ),
      body: Center(
        child: Column(
          mainAxisSize: MainAxisSize.min,
          children: [
            Text('当前版本: ${_moAppUpdatePlugin?.updateInfo?.currentVersionString ?? ''}'),
            Text('新版本: ${_moAppUpdatePlugin?.updateInfo?.newVersionString ?? ''}'),
            Text('更新状态: ${_moAppUpdatePlugin?.updateInfo?.hasUpdate == true ? '存在' : '不存在'}'),
            ElevatedButton(
              child: const Text('检查更新'),
              onPressed: onCheckUpdate,
            ),
            ElevatedButton(
              child: const Text('清除更新信息'),
              onPressed: () {
                _moAppUpdatePlugin?.clearUpdateInfo();
                setState(() {});
              },
            ),
          ],
        ),
      ),
    );
  }
}

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

1 回复

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


mo_app_update 是一个用于 Flutter 应用更新的插件,它可以帮助开发者轻松地管理应用的更新流程,包括检查更新、下载更新包、安装更新等操作。以下是 mo_app_update 插件的使用步骤和示例代码。

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  mo_app_update: ^1.0.0  # 请使用最新版本

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

2. 初始化插件

在使用 mo_app_update 插件之前,你需要对其进行初始化。通常,你可以在 main.dart 文件中进行初始化:

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

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  
  // 初始化 mo_app_update
  await MoAppUpdate.init(
    baseUrl: 'https://your-update-server.com',  // 检查更新的服务器地址
  );

  runApp(MyApp());
}

3. 检查更新

你可以在应用的某个页面中调用 checkForUpdate 方法来检查是否有更新:

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

class HomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('App Update Example'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: () async {
            // 检查更新
            final updateInfo = await MoAppUpdate.checkForUpdate();

            if (updateInfo != null && updateInfo.updateAvailable) {
              // 如果有更新,显示更新对话框
              showDialog(
                context: context,
                builder: (context) => AlertDialog(
                  title: Text('New Update Available'),
                  content: Text('A new version ${updateInfo.newVersion} is available. Do you want to update now?'),
                  actions: [
                    TextButton(
                      onPressed: () {
                        Navigator.of(context).pop();
                      },
                      child: Text('Later'),
                    ),
                    TextButton(
                      onPressed: () async {
                        Navigator.of(context).pop();
                        // 下载并安装更新
                        await MoAppUpdate.downloadAndInstallUpdate();
                      },
                      child: Text('Update Now'),
                    ),
                  ],
                ),
              );
            } else {
              // 没有更新
              ScaffoldMessenger.of(context).showSnackBar(
                SnackBar(content: Text('Your app is up to date!')),
              );
            }
          },
          child: Text('Check for Update'),
        ),
      ),
    );
  }
}

4. 下载并安装更新

如果检查到有更新,你可以调用 downloadAndInstallUpdate 方法来下载并安装更新:

await MoAppUpdate.downloadAndInstallUpdate();

5. 处理更新状态

mo_app_update 插件还提供了一些回调来处理更新的不同状态,例如下载进度、下载完成、安装完成等。你可以通过监听这些回调来更新 UI 或执行其他操作:

MoAppUpdate.setListener(
  onProgress: (progress) {
    // 处理下载进度
    print('Download progress: $progress%');
  },
  onComplete: () {
    // 处理下载完成
    print('Download complete');
  },
  onError: (error) {
    // 处理错误
    print('Error: $error');
  },
);

6. 其他配置

mo_app_update 插件还支持一些其他配置,例如设置下载路径、自定义更新对话框等。你可以参考插件的文档或源代码来了解更多细节。

7. 注意事项

  • 在使用 mo_app_update 插件时,请确保你有一个可靠的更新服务器来提供更新信息。
  • 在 Android 设备上安装 APK 时,需要请求 WRITE_EXTERNAL_STORAGEREQUEST_INSTALL_PACKAGES 权限。你可以在 AndroidManifest.xml 中添加以下权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>
回到顶部