Flutter Windows自动更新插件auto_updater_windows的使用

Flutter Windows 自动更新插件 auto_updater_windows 的使用

auto_updater_windowsauto_updater 插件的一个实现,专门用于在 Windows 平台上进行应用的自动更新。以下是如何使用该插件的详细步骤。

1. 添加依赖

首先,在你的 pubspec.yaml 文件中添加 auto_updater_windows 作为依赖项:

dependencies:
  flutter:
    sdk: flutter
  auto_updater: # 确保你也添加了这个依赖
  auto_updater_windows: ^0.1.0 # 使用最新的版本号

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

2. 初始化插件

在你的主应用文件(如 main.dart)中初始化 auto_updaterauto_updater_windows 插件:

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

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

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

class HomePage extends StatefulWidget {
  @override
  _HomePageState createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  // 创建一个 AutoUpdater 实例
  final AutoUpdater _autoUpdater = AutoUpdater();

  @override
  void initState() {
    super.initState();
    
    // 初始化 AutoUpdater
    _autoUpdater.init(
      appId: "your_app_id", // 替换为你的应用 ID
      baseUrl: "http://your.server.com/api/", // 替换为你的服务器地址
    );
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('自动更新测试'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: () {
            // 检查更新
            _autoUpdater.checkForUpdates();
          },
          child: Text('检查更新'),
        ),
      ),
    );
  }
}

3. 处理更新事件

为了处理更新事件,你需要监听 AutoUpdater 的状态变化,并根据状态执行相应的操作。以下是处理更新事件的示例代码:

@override
void initState() {
  super.initState();
  
  // 初始化 AutoUpdater
  _autoUpdater.init(
    appId: "your_app_id", // 替换为你的应用 ID
    baseUrl: "http://your.server.com/api/", // 替换为你的服务器地址
  );

  // 监听更新状态变化
  _autoUpdater.onUpdateAvailable.listen((event) {
    if (event.status == UpdateStatus.available) {
      // 更新可用
      showDialog(
        context: context,
        builder: (BuildContext context) {
          return AlertDialog(
            title: Text("新版本可用"),
            content: Text("发现新版本 ${event.version},是否现在更新?"),
            actions: <Widget>[
              TextButton(
                child: Text("取消"),
                onPressed: () {
                  Navigator.of(context).pop();
                },
              ),
              TextButton(
                child: Text("确定"),
                onPressed: () {
                  // 执行更新操作
                  _autoUpdater.downloadAndInstallUpdate();
                  Navigator.of(context).pop();
                },
              ),
            ],
          );
        },
      );
    } else if (event.status == UpdateStatus.downloading) {
      // 下载中
      print("正在下载新版本");
    } else if (event.status == UpdateStatus.installing) {
      // 安装中
      print("正在安装新版本");
    } else if (event.status == UpdateStatus.error) {
      // 错误
      print("更新失败:${event.error}");
    }
  });
}

4. 配置服务器端

确保你的服务器上有一个 API 可以提供更新信息。例如,你可以创建一个简单的 JSON 文件来描述更新信息:

{
  "version": "1.0.1",
  "url": "http://your.server.com/downloads/new_version.zip"
}

然后,你需要在服务器上设置一个路由来提供这个 JSON 文件。例如,如果你使用的是 Node.js 和 Express,可以这样设置:

app.get('/api/update_info', (req, res) => {
  res.json({
    version: "1.0.1",
    url: "http://your.server.com/downloads/new_version.zip"
  });
});

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

1 回复

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


当然,以下是如何在Flutter项目中集成并使用auto_updater_windows插件来进行Windows平台的自动更新的代码案例。

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  auto_updater_windows: ^x.y.z  # 替换为最新版本号

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

2. 配置插件

windows文件夹下的CMakeLists.txt文件中,确保包含以下内容(如果插件要求):

# 示例内容,具体配置根据插件要求调整
add_subdirectory(path_to_auto_updater_windows)

3. 使用插件

接下来,在你的Flutter应用中编写代码来使用这个插件。首先,确保你导入了必要的包:

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

然后,你可以编写一个函数来检查并应用更新:

void checkForUpdates() async {
  try {
    // 假设你有一个服务器URL,它返回一个包含更新信息的JSON文件
    String updateUrl = "https://your-server.com/update.json";

    // 调用插件的checkUpdate方法
    bool hasUpdate = await AutoUpdaterWindows.checkUpdate(
      updateUrl: updateUrl,
      mandatory: false,  // 如果为true,用户必须更新
    );

    if (hasUpdate) {
      // 提示用户有更新可用
      showDialog(
        context: context,
        builder: (BuildContext context) {
          return AlertDialog(
            title: Text("更新可用"),
            content: Text("检测到新版本,是否立即更新?"),
            actions: <Widget>[
              TextButton(
                onPressed: () {
                  Navigator.of(context).pop();
                },
                child: Text("稍后"),
              ),
              TextButton(
                onPressed: () async {
                  Navigator.of(context).pop();

                  // 调用下载和安装更新的方法
                  bool result = await AutoUpdaterWindows.downloadAndUpdate();

                  if (result) {
                    ScaffoldMessenger.of(context).showSnackBar(
                      SnackBar(content: Text("更新成功,请重启应用。")),
                    );
                  } else {
                    ScaffoldMessenger.of(context).showSnackBar(
                      SnackBar(content: Text("更新失败,请稍后重试。")),
                    );
                  }
                },
                child: Text("立即更新"),
              ),
            ],
          );
        },
      );
    } else {
      print("当前已是最新版本");
    }
  } catch (e) {
    print("检查更新时出错: $e");
  }
}

4. 触发更新检查

你可以在应用启动时或者某个按钮点击事件中调用checkForUpdates函数。例如,在_MyAppStateinitState方法中:

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  @override
  void initState() {
    super.initState();
    checkForUpdates();  // 在应用启动时检查更新
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter Auto Updater Example'),
        ),
        body: Center(
          child: ElevatedButton(
            onPressed: checkForUpdates,
            child: Text('检查更新'),
          ),
        ),
      ),
    );
  }
}

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

注意事项

  1. 服务器配置:确保你的服务器返回的JSON文件包含正确的更新信息,例如更新包的URL、版本信息等。
  2. 权限:确保你的应用有权限访问网络以及写入文件(如果需要下载更新包)。
  3. 测试:在发布之前,务必在多个环境中充分测试自动更新功能。

通过以上步骤,你应该能够在Flutter Windows应用中集成并使用auto_updater_windows插件来实现自动更新功能。

回到顶部