Flutter应用更新插件update_app_k的使用

Flutter应用更新插件update_app_k的使用

简介

这是一个基于update_app库的变体库,用于修复一些问题。

Bug修复:

  • 修复了iOS App Store硬编码跳转链接模板,改为全链接参数。

插件功能介绍

插件名称

update_app

功能描述

该插件用于更新应用。通过传入更新地址,可以实现应用更新。

  • Android部分:使用DownloadManager实现文件下载。如果文件已下载,则直接安装。
  • iOS部分:不支持外部更新,跳转至App Store。

使用体验Demo

下载APK

您可以从以下链接下载演示APK: 下载APK

效果图


如何使用

导入插件

import 'package:update_app_k/update_app.dart';

更新逻辑

1. 下载应用

var downloadId = await UpdateApp.updateApp(
  url: "apk下载路径", // APK下载地址
  appleStoreUrl: "375380948", // iOS App Store ID
  title: "通知标题", // Android通知栏标题
  description: "通知描述", // Android通知栏描述
);

2. 查询下载进度

var process = await UpdateApp.downloadProcess(downloadId: downloadId);

// 当前下载进度
double currentProgress = process.current / process.count;

// 下载状态
String status = process.status.toString();

完整示例代码

以下是一个完整的示例代码,展示了如何使用update_app_k插件实现应用更新功能:

import 'dart:async';

import 'package:flutter/material.dart';
import 'package:update_app_k/update_app.dart';

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

class MyApp extends StatefulWidget {
  [@override](/user/override)
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  // 定时器,用于监控下载进度
  Timer? timer;

  // 下载进度
  double downloadProcess = 0;

  // 下载状态
  String downloadStatus = "";

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('应用更新'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              // 下载进度条
              Container(
                padding: EdgeInsets.all(16),
                width: 200,
                height: 200,
                child: CircularProgressIndicator(
                  value: downloadProcess,
                  strokeWidth: 10,
                ),
              ),
              // 显示下载状态
              Text("下载状态: $downloadStatus"),
              Text("请将下载地址替换为自己的地址"),
            ],
          ),
        ),
        bottomNavigationBar: Container(
          padding: EdgeInsets.all(20),
          child: Column(
            mainAxisAlignment: MainAxisAlignment.end,
            children: [
              Text(
                '点击右下角按钮开始下载!',
                style: TextStyle(color: Theme.of(context).primaryColor),
              ),
              Text('适配Android 6.0'),
              Text('适配Android 7.0'),
              Text('适配Android 8.0'),
              Text('适配Android 9.0'),
              Text('适配Android 10.0'),
              Text('添加下载进度监控'),
            ],
          ),
        ),
        floatingActionButton: FloatingActionButton(
          onPressed: download,
          child: Icon(Icons.file_download),
        ),
        floatingActionButtonLocation: FloatingActionButtonLocation.endDocked,
      ),
    );
  }

  [@override](/user/override)
  void dispose() {
    timer?.cancel(); // 停止定时器
    super.dispose();
  }

  /// 开始下载应用
  void download() async {
    // 调用updateApp方法下载APK
    var downloadId = await UpdateApp.updateApp(
      url: "https://raw.githubusercontent.com/mofada/flutter_update_app/master/apks/app-release.apk",
      appleStoreUrl: "https://apps.apple.com/cn/app/id375380948",
      title: "更新通知",
      description: "新版本已发布",
    );

    // 检查下载结果
    if (downloadId == 0) {
      // 如果本地已有相同版本的APK,下载成功
      setState(() {
        downloadProcess = 1;
        downloadStatus = "下载成功";
      });
      return;
    }

    if (downloadId == -1) {
      // 如果下载失败
      setState(() {
        downloadProcess = 1;
        downloadStatus = "下载失败";
      });
      return;
    }

    // 开始监控下载进度
    timer = Timer.periodic(Duration(milliseconds: 100), (timer) async {
      // 获取当前下载进度
      var process = await UpdateApp.downloadProcess(downloadId: downloadId);

      // 更新UI状态
      setState(() {
        downloadProcess = process.current / process.count;
        downloadStatus = process.status.toString();
      });

      // 如果下载完成或失败,停止计时
      if (process.status == ProcessState.STATUS_SUCCESSFUL ||
          process.status == ProcessState.STATUS_FAILED) {
        timer.cancel();
      }
    });
  }
}
1 回复

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


update_app_k 是一个用于 Flutter 应用的插件,它可以帮助开发者轻松实现应用更新功能。该插件支持从应用内检查更新、下载新版本并安装。以下是使用 update_app_k 插件的详细步骤:

1. 添加依赖

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

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

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

2. 配置 Android 和 iOS 项目

Android

AndroidManifest.xml 文件中添加以下权限:

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

iOS

Info.plist 文件中添加以下权限:

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>

3. 使用 update_app_k 插件

在你的 Flutter 代码中,使用 update_app_k 插件来检查更新并安装新版本。

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: HomeScreen(),
    );
  }
}

class HomeScreen extends StatelessWidget {
  Future<void> checkForUpdate() async {
    try {
      // 检查更新
      final updateInfo = await UpdateAppK.checkUpdate(
        url: 'https://your-server.com/update.json', // 更新信息的 JSON 文件 URL
      );

      if (updateInfo != null && updateInfo.isUpdateAvailable) {
        // 如果有更新,显示更新对话框
        showDialog(
          context: context,
          builder: (BuildContext context) {
            return AlertDialog(
              title: Text('发现新版本'),
              content: Text('是否要更新到版本 ${updateInfo.newVersion}?'),
              actions: <Widget>[
                TextButton(
                  child: Text('取消'),
                  onPressed: () {
                    Navigator.of(context).pop();
                  },
                ),
                TextButton(
                  child: Text('更新'),
                  onPressed: () async {
                    // 下载并安装更新
                    await UpdateAppK.performUpdate(
                      url: updateInfo.apkUrl, // APK 下载 URL
                      fileName: 'app_update.apk', // 下载的文件名
                    );
                    Navigator.of(context).pop();
                  },
                ),
              ],
            );
          },
        );
      } else {
        // 没有更新
        showDialog(
          context: context,
          builder: (BuildContext context) {
            return AlertDialog(
              title: Text('没有更新'),
              content: Text('当前已是最新版本。'),
              actions: <Widget>[
                TextButton(
                  child: Text('确定'),
                  onPressed: () {
                    Navigator.of(context).pop();
                  },
                ),
              ],
            );
          },
        );
      }
    } catch (e) {
      // 处理错误
      print('检查更新失败: $e');
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('应用更新示例'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: checkForUpdate,
          child: Text('检查更新'),
        ),
      ),
    );
  }
}

4. 更新信息的 JSON 文件

update_app_k 插件需要一个 JSON 文件来获取更新信息。JSON 文件的格式如下:

{
  "version": "1.0.1",
  "apkUrl": "https://your-server.com/app_update.apk",
  "description": "修复了一些已知问题,优化了性能。"
}
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!