Flutter应用版本升级插件flutter_mobile_upgrader的使用

Flutter应用版本升级插件flutter_mobile_upgrader的使用

安装

  1. pubspec.yaml 中添加插件依赖:
dependencies:
  flutter_mobile_upgrader: ^1.0.7
  1. 在命令行中运行以下命令以获取依赖:
flutter pub get

使用

Android

  1. android/app/src/main/AndroidManifest.xml 中添加 provider
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:tools="http://schemas.android.com/tools"
  package="com.xxxx.xxxxx"
>
  <application>
    ...
    <provider
      android:name="androidx.core.content.FileProvider"
      android:authorities="${applicationId}.fileprovider"
      android:grantUriPermissions="true"
      android:exported="false"
    >
      <meta-data
        android:name="android.support.FILE_PROVIDER_PATHS"
        android:resource="@xml/file_paths"
      />
    </provider>
  </application>
</manifest>
  1. 新增 android/app/src/main/res/xml/file_paths.xml 文件:
<paths>
  <external-path
    name="external-path"
    path="."
  />

  <external-cache-path
    name="external-cache-path"
    path="."
  />

  <external-files-path
    name="external-files-path"
    path="."
  />

  <files-path
    name="files_path"
    path="."
  />

  <cache-path
    name="cache-path"
    path="."
  />

  <root-path
    name="name"
    path="."
  />
</paths>
  1. 点击升级前往应用商店:
// 一般通过远程接口调用获取
final Future<AppUpgradeInfo> appUpgradeInfo = Future.value(
  AppUpgradeInfo(
    title: '更新提示',
    contents: ['有新版本哟,请更新~', '修复了设备定位bug', '优化认证操作体验'],
    force: true, // 是否强制升级
  ),
);

// 获取已上架的应用市场, 根据应用包名,例如: 'com.flutter.app'
final appMarketInfos = AppMarketManager.getAppMarketList(
  await FlutterUpgradeChanneler.getInstallMarket(['com.flutter.app']),
);

// 升级应用 API
AppUpgradeManager.upgrade(
  context, // BuildContext
  appUpgradeInfo,
  appMarketInfo: appMarketInfos[0],
  onCancel: () {},
  onOk: () {},
);

  1. 从指定的 URL 下载 APK:
// 一般通过远程接口调用获取
final Future<AppUpgradeInfo> appUpgradeInfo = Future.value(
  AppUpgradeInfo(
    title: '更新提示',
    contents: ['有新版本哟,请更新~', '修复了设备定位bug', '优化认证操作体验'],
    force: true, // 是否强制升级
  ),
);

// 升级应用 API
AppUpgradeManager.upgrade(
  context, // BuildContext
  appUpgradeInfo,
  apkDownloadUrl: 'http://xxx.xxx.com/upgrade.apk',
  onCancel: () {},
  onOk: () {},
);

iOS

  1. 点击升级前往应用商店:
// 一般通过远程接口调用获取
final Future<AppUpgradeInfo> appUpgradeInfo = Future.value(
  AppUpgradeInfo(
    title: '更新提示',
    contents: ['有新版本哟,请更新~', '修复了设备定位bug', '优化认证操作体验'],
    force: true, // 是否强制升级
  ),
);

// 升级应用 API
AppUpgradeManager.upgrade(
  context, // BuildContext
  appUpgradeInfo,
  iosAppId: 'xxxxxxxx', // iOS App ID
  onCancel: () {},
  onOk: () {},
);

示例代码

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

void main() {
  runApp(MaterialApp(home: MyApp()));
}

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

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

class _MyAppState extends State<MyApp> {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Flutter Upgrader Plugin'),
        ),
        body: Padding(
          padding: const EdgeInsets.only(top: 28.0),
          child: Row(
            children: [
              Expanded(
                child: ElevatedButton(
                  style: ElevatedButtonTheme.of(context).style,
                  child: const Padding(
                    padding: EdgeInsets.all(12.0),
                    child: Text(
                      '升 级',
                      style: TextStyle(fontSize: 18),
                    ),
                  ),
                  onPressed: () {
                    final Future<AppUpgradeInfo> appUpgradeInfo = Future.value(
                      AppUpgradeInfo(
                          title: '更新提示',
                          contents: ['有新版本哟,请更新~'],
                          force: false,
                          apkDownloadUrl: ''),
                    );

                    if (Platform.isAndroid) {
                      AppUpgradeManager.upgrade(
                        context,
                        appUpgradeInfo,
                      );
                    }

                    if (Platform.isIOS) {
                      AppUpgradeManager.upgrade(
                        context,
                        appUpgradeInfo,
                        iosAppId: 'idxxxxxx',
                      );
                    }
                  },
                ),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

更多关于Flutter应用版本升级插件flutter_mobile_upgrader的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

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


flutter_mobile_upgrader 是一个用于 Flutter 应用的版本升级插件,它可以帮助开发者轻松实现应用的版本检查和升级功能。通过该插件,开发者可以检查应用是否有新版本,并引导用户前往应用商店或下载页进行更新。

1. 安装插件

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

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

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

2. 基本用法

2.1 初始化插件

main.dart 中初始化插件:

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

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  
  // 初始化插件
  await FlutterMobileUpgrader.init(
    appId: 'your_app_id', // 你的应用ID(通常是应用的包名)
    storeUrl: 'https://play.google.com/store/apps/details?id=your_app_id', // 应用商店链接
  );

  runApp(MyApp());
}

2.2 检查更新

在应用中的某个页面或逻辑中,你可以调用 checkForUpdate 方法来检查是否有新版本:

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

class HomePage extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Home'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: () async {
            // 检查更新
            bool hasUpdate = await FlutterMobileUpgrader.checkForUpdate();
            if (hasUpdate) {
              // 如果有更新,导航到升级页面
              Navigator.push(
                context,
                MaterialPageRoute(
                  builder: (context) => UpdatePage(),
                ),
              );
            } else {
              // 没有更新
              ScaffoldMessenger.of(context).showSnackBar(
                SnackBar(content: Text('Your app is up to date!')),
              );
            }
          },
          child: Text('Check for Update'),
        ),
      ),
    );
  }
}

2.3 升级页面

你可以创建一个单独的页面来展示更新信息,并允许用户进行升级:

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

class UpdatePage extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Update Available'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Text('A new version of the app is available.'),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: () async {
                // 跳转到应用商店进行升级
                await FlutterMobileUpgrader.upgradeApp();
              },
              child: Text('Upgrade Now'),
            ),
          ],
        ),
      ),
    );
  }
}
回到顶部