Flutter系统更新插件os_updater的使用

Flutter系统更新插件os_updater的使用

OS Updater

OS Updater 是一个用于管理Flutter应用内更新的解决方案,特别适用于通过侧载分发的应用。该插件允许您轻松检测和管理应用程序更新,而无需复杂的集成。

您需要仪表盘集成来管理更新

查看我的GitHub仓库:

特性

  • 自动更新检测:检查是否有最新版本的应用程序。
  • 交互式界面:为用户提供一个对话框以决定是否下载更新。
  • 侧载支持:适合不通过Google Play商店分发的应用。
  • 权限管理:自动处理所有必要的权限。

安装

1. 添加到 pubspec.yaml

在您的 pubspec.yaml 文件中添加包依赖:

dependencies:
  os_updater: ^1.0.0

2. Android配置

在您的Android应用中,向 AndroidManifest.xml 文件添加以下权限:

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

3. 在Flutter代码中初始化

main() 方法中添加以下初始化代码,设置您的后端URL:

import 'package:os_updater/os_updater.dart';

void main() {
  UpdateManager.initialize('YOUR_BACKEND_URL', splittedAPK: true, appsKey: "YORU_APP_KEY");
  runApp(MyApp());
}

// 如果您构建flutter apk时使用了--split-per-abi,请将splittedAPK设置为true
// 将appsKey设置为您后端服务器上的.env文件中的相同值

使用

自动更新检查

initState() 方法中执行更新检查,代码如下:

import 'package:os_updater/os_updater.dart';
import 'package:flutter/scheduler.dart';

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

  SchedulerBinding.instance.addPostFrameCallback(
    (timeStamp) async {
      await UpdateManager.instance.checkForUpdate(
        "YourAppName",  // 应用名称
        appVersion,       // 当前应用版本
        context           // 显示对话框的上下文
      );
    },
  );
}

注意事项:

  • SchedulerBinding 确保在执行更新检查之前,小部件的状态已完全加载。
  • 交互式对话框将显示给用户以决定是否下载更新。

后端URL

确保 YOUR_BACKEND_URL 指向提供最新应用版本元数据的服务器。

权限

此插件会自动请求以下权限:

  • WRITE_EXTERNAL_STORAGE:保存更新文件。
  • READ_EXTERNAL_STORAGE:读取更新文件。
  • REQUEST_INSTALL_PACKAGES:允许安装APK包。

完整示例

以下是一个完整的实现示例:

import 'package:flutter/material.dart';
import 'package:os_updater/os_updater.dart';
import 'package:flutter/scheduler.dart';

void main() {
  WidgetsFlutterBinding.ensureInitialized();
  UpdateManager.initialize('https://example.com/backend', 
      splittedAPK: true, appsKey: "YORU_APP_KEY"); // 初始化UpdateManager
  runApp(MyApp());
}

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

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

class _HomeScreenState extends State<HomeScreen> {
  final String appVersion = "1.0.0";

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

    SchedulerBinding.instance.addPostFrameCallback(
      (timeStamp) async {
        await UpdateManager.instance.checkForUpdate(
          "YourAppName", // 应用名称
          appVersion, // 当前应用版本
          context, // 显示对话框的上下文
        );
      },
    );
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('应用内更新示例'),
      ),
      body: Center(
        child: Text('欢迎使用应用!'),
      ),
    );
  }
}

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

1 回复

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


os_updater 是一个用于 Flutter 应用的插件,旨在帮助开发者检查和安装系统更新。这个插件可以用于 Android 和 iOS 平台,允许用户在应用中直接检查是否有可用的系统更新,并引导用户前往系统更新页面。

安装插件

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

dependencies:
  flutter:
    sdk: flutter
  os_updater: ^1.0.0  # 请检查最新版本

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

使用插件

在你的 Flutter 应用中,你可以使用 OsUpdater 类来检查系统更新。以下是一个简单的示例:

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

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'OS Updater Example',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

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

class _MyHomePageState extends State<MyHomePage> {
  String _updateStatus = '检查更新中...';

  Future<void> _checkForUpdates() async {
    try {
      final bool isUpdateAvailable = await OsUpdater.checkForUpdates();
      setState(() {
        _updateStatus = isUpdateAvailable ? '有可用更新' : '已是最新版本';
      });

      if (isUpdateAvailable) {
        await OsUpdater.openUpdateSettings();
      }
    } catch (e) {
      setState(() {
        _updateStatus = '检查更新失败: $e';
      });
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('OS Updater Example'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(_updateStatus),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: _checkForUpdates,
              child: Text('检查更新'),
            ),
          ],
        ),
      ),
    );
  }
}
回到顶部