Flutter应用更新插件app_update的使用

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

Flutter应用更新插件app_update的使用

一、简介

app_update 插件旨在帮助您更灵活地处理Flutter应用的更新。它不仅能够修复一些现有更新工具(如 Upgrader)的问题,还能提供更多的自定义选项。您可以根据需要显示自定义对话框、模态页或小卡片,以鼓励或强制用户更新您的应用。

该插件支持以下功能:

  • 老版本废弃
  • 强制更新
  • 更新回滚
  • 自定义更新提示
  • 支持多个应用商店和自定义更新源

二、配置方法

app_update 插件提供了两种获取更新信息的方式:

  1. 从应用商店获取:这种方式较为简单,但灵活性较低,不支持许多高级功能。
  2. 从自定义更新配置文件获取:这种方式需要一些自定义设置,但可以适用于所有平台和应用商店,并且允许完全控制和自定义更新流程。

目前,插件主要支持第二种方法。

三、更新配置文件示例

以下是 app_update 插件的完整配置文件结构示例(YAML格式):

# 释放设置,默认配置
release_settings:
  title:
    en: |-
      ## New version for ($appName)[https://example.com]
      ### Version $releaseVersion is available!
    es: La versión $releaseVersion está disponible!
    ru: Доступна новая версия!

  description: |-
    A new version of $appName is available!
    Version $releaseVersion is now available. You have a $appVersion

  # 是否允许用户跳过此版本
  can_skip_release: true
  # 是否允许用户推迟更新
  can_postpone_release: true
  # 更新通知的重复显示间隔(小时)
  reminder_period_hours: 48
  # 发布后多久开始向用户显示更新提示(小时)
  release_delay_hours: 48
  # 发布可见性逐渐增加的时间(小时),从0%到100%
  progressive_rollout_hours: 48

# 不支持的版本
unsupported_versions: ['<=4.2.0', '0.3.4']
# 已废弃的版本
deprecated_versions: ['<=5.1.0 >=4.2.0', '>5.6.0 <5.6.7']

# 更新源
sources:
  - name: googlePlay 
    url: https://example.com
  - name: appStore
    url: https://example.com
  - name: appGallery 
    url: https://example.com
    # 可以覆盖此源的参数(标题、延迟时间等)
    title: Title
  - name: ruStore 
    url: https://example.com
    # 自定义商店
  - name: gitHub
    url: https://example.com
    platforms:
      - android
      - windows
      - macos
      - linux

# 版本发布列表
releases:
  - version: 0.3.7 # 必填
    # 可以覆盖所有发布设置参数(标题、延迟时间等)
    release_note: |-
      # Big update!
      [click](https://example.com) - full changelog.
      ### Short notes
      - Added bugs
      - Fixed features
    date_utc: '2024-08-24 15:35:00'
    sources:
      - googlePlay
      - appStore
      - ruStore
      - name: github
        url: https://example.com
        platforms: [android, windows]
        release_note: Notes
        title: Title
    
  - version: 0.3.8
    release_note: Minor improvements
    is_super_ultra_mega_release: true

四、示例代码

以下是一个完整的示例代码,展示了如何在Flutter应用中使用 app_update 插件来检查和提示用户更新应用。

import 'package:flutter/material.dart';
import 'package:app_update/app_update.dart'; // 导入app_update插件

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

class MainApp extends StatelessWidget {
  const MainApp({super.key});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('App Update Checker'),
        ),
        body: Center(
          child: ElevatedButton(
            onPressed: () async {
              // 检查是否有可用的更新
              final updateInfo = await AppUpdate.checkForUpdate();

              if (updateInfo != null && updateInfo.isUpdateAvailable) {
                // 显示更新提示
                showDialog(
                  context: context,
                  builder: (context) => AlertDialog(
                    title: Text(updateInfo.title),
                    content: Text(updateInfo.description),
                    actions: [
                      TextButton(
                        onPressed: () {
                          Navigator.pop(context);
                        },
                        child: const Text('Later'),
                      ),
                      TextButton(
                        onPressed: () {
                          // 打开应用商店进行更新
                          AppUpdate.openStore();
                          Navigator.pop(context);
                        },
                        child: const Text('Update Now'),
                      ),
                    ],
                  ),
                );
              } else {
                // 没有可用的更新
                ScaffoldMessenger.of(context).showSnackBar(
                  const SnackBar(content: Text('No updates available')),
                );
              }
            },
            child: const Text('Check for Updates'),
          ),
        ),
      ),
    );
  }
}

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

1 回复

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


当然,以下是如何在Flutter应用中使用app_update插件来检查和处理应用更新的示例代码。app_update插件可以帮助你实现应用内版本检查和提示用户更新。

首先,确保你已经在pubspec.yaml文件中添加了app_update插件的依赖:

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

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

接下来,在你的Flutter应用中,你可以按照以下步骤使用app_update插件:

  1. 导入插件

在你的Dart文件中导入app_update插件:

import 'package:app_update/app_update.dart';
  1. 检查更新

你可以在应用启动时或者某个按钮点击事件中检查更新。以下是一个在按钮点击时检查更新的示例:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('App Update Example'),
        ),
        body: Center(
          child: CheckForUpdatesButton(),
        ),
      ),
    );
  }
}

class CheckForUpdatesButton extends StatefulWidget {
  @override
  _CheckForUpdatesButtonState createState() => _CheckForUpdatesButtonState();
}

class _CheckForUpdatesButtonState extends State<CheckForUpdatesButton> {
  bool isUpdateAvailable = false;

  @override
  Widget build(BuildContext context) {
    return ElevatedButton(
      onPressed: () async {
        bool result = await AppUpdate.checkForUpdate();
        setState(() {
          isUpdateAvailable = result;
        });

        if (isUpdateAvailable) {
          showUpdateDialog();
        } else {
          ScaffoldMessenger.of(context).showSnackBar(
            SnackBar(content: Text('No update available.')),
          );
        }
      },
      child: Text('Check for Updates'),
    );
  }

  void showUpdateDialog() {
    showDialog(
      context: context,
      builder: (BuildContext context) {
        return AlertDialog(
          title: Text('Update Available'),
          content: Text('A new version of the app is available. Would you like to update?'),
          actions: <Widget>[
            TextButton(
              onPressed: () {
                AppUpdate.performImmediateUpdate();
                Navigator.of(context).pop();
              },
              child: Text('Update Now'),
            ),
            TextButton(
              onPressed: () {
                Navigator.of(context).pop();
              },
              child: Text('Later'),
            ),
          ],
        );
      },
    );
  }
}

在这个示例中,当用户点击“Check for Updates”按钮时,应用会调用AppUpdate.checkForUpdate()方法来检查是否有新版本。如果有新版本,会显示一个对话框提示用户更新,并提供“Update Now”和“Later”两个选项。

注意

  • AppUpdate.checkForUpdate()方法的具体实现和行为可能依赖于插件的版本和平台(iOS/Android)。
  • AppUpdate.performImmediateUpdate()方法将尝试立即启动更新流程。在某些平台上,这可能需要用户确认或者重启应用。
  • 在实际开发中,你可能需要根据你的应用需求进一步定制更新逻辑,比如处理更新失败的情况、显示更详细的更新信息等。

确保在实际部署前在多个设备和平台上测试更新流程,以确保其稳定性和兼容性。

回到顶部