Flutter应用版本更新插件new_version_update的使用

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

Flutter应用版本更新插件new_version_update的使用

new_version_update 是一个Flutter插件,用于检查您的应用程序在Apple App Store和Google Play Store上的新版本,并显示更新对话框给用户。

特性

  • 检查Apple App Store和Google Play Store上的新应用版本。
  • 显示平台特定的警报,带有更新或忽略按钮。
  • 提供API获取版本状态(本地、商店、可以更新)以显示自定义UI。
  • 支持iOS和Android平台。
  • 可自定义对话框标题、文本和按钮文本。
  • 支持启动模式定制。
  • 支持变更日志展示。

开始使用

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

dependencies:
  new_version_update: ^0.0.2 

然后运行 flutter pub get 来安装这个包。

示例代码

下面是一个完整的示例演示如何使用 new_version_update 插件来检查并提示用户进行应用更新。

main.dart

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

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

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'New Version Update Example',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({Key? key}) : super(key: key);

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  final newVersionUpdate = NewVersionUpdate(
    androidId: 'com.akbon.myd', // 替换为您的Android包名(如果使用默认值可选)
    iOSId: 'com.akbon.myd', // 替换为您的iOS bundle标识符(如果使用默认值可选)
    isShowChangelog: true, // 设置为false如果您不想显示变更日志
  );

  @override
  void initState() {
    super.initState();
    WidgetsBinding.instance.addPostFrameCallback((_) {
      _checkVersion();
    });
  }

  void _checkVersion() async {
    final status = await newVersionUpdate.getVersionStatus();
    if (status != null) {
      debugPrint('Local Version: ${status.localVersion}');
      debugPrint('Store Version: ${status.storeVersion}');
      debugPrint('Can Update: ${status.canUpdate}');
      debugPrint('App Store Link: ${status.appStoreLink}');
      debugPrint('Release Notes: ${status.releaseNotes}');

      // 仅当可以更新时显示更新对话框
      if (status.canUpdate) {
        if (context.mounted) {
          newVersionUpdate.showUpdateDialog(
            context: context,
            versionStatus: status,
            dialogText: "You can update this App\nfrom ${status.localVersion} to ${status.storeVersion}\n\nWhat's New:\n${status.releaseNotes}",
            allowDismissal: true,
            updateButtonText: 'Update Now',
          );
        }
      }
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('New Version Update Example'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            const Text(
              'Checking for updates...',
              style: TextStyle(fontSize: 18),
            ),
            const SizedBox(height: 20),
            ElevatedButton(
              onPressed: _checkVersion,
              child: const Text('Check for Update'),
            ),
          ],
        ),
      ),
    );
  }
}

以上代码创建了一个简单的Flutter应用,它会在启动时自动检查是否有可用的新版本。如果有新版本,会弹出一个对话框提示用户进行更新。您可以通过修改 androidIdiOSId 来适配您的应用。


这段Markdown文档详细介绍了如何使用 `new_version_update` 插件来实现应用版本更新功能,并提供了完整的示例代码。

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

1 回复

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


当然,以下是如何在Flutter应用中使用new_version_update插件来实现版本更新的一个示例代码案例。这个插件允许你检查当前应用版本与App Store或Play Store上的版本是否一致,并在有新版本时提示用户更新。

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

dependencies:
  flutter:
    sdk: flutter
  new_version_update: ^0.5.0  # 请检查最新版本号

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

接下来,在你的Flutter应用的入口文件(通常是main.dart)中,你可以配置并使用这个插件。以下是一个完整的示例:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  @override
  void initState() {
    super.initState();
    _checkForUpdates();
  }

  void _checkForUpdates() async {
    final NewVersion newVersion = NewVersion(
      androidId: 'com.example.yourapp', // 替换为你的Android应用ID
      iosId: '123456789',               // 替换为你的iOS应用ID(通常是App Store上的ID)
      mandatoryUpdate: false,           // 是否强制更新
      showDialog: true,                 // 是否显示对话框提示更新
      dialogTitle: "更新提示",
      dialogMessage: "发现新版本,请更新以获得最佳体验。",
      dialogPositiveButtonText: "更新",
      dialogNegativeButtonText: "稍后",
      apkUrl:
          "https://example.com/path/to/your/app.apk", // Android APK下载链接
      iosUrl:
          "https://apps.apple.com/app/your-app/id123456789", // iOS App Store链接
    );

    newVersion.getVersion().then((value) {
      print("Current version: ${value.localVersion}");
      print("Latest version: ${value.storeVersion}");

      if (value.shouldShowUpdateDialog) {
        newVersion.showUpdateDialog(
          context: context,
          onClickPositive: () async {
            if (value.platform == TargetPlatform.android) {
              // 打开APK下载链接
              await launchUrl(Uri.parse(newVersion.apkUrl!));
            } else if (value.platform == TargetPlatform.iOS) {
              // 打开App Store链接
              await launchUrl(Uri.parse(newVersion.iosUrl!));
            }
          },
          onClickNegative: () {
            // 用户点击稍后
            print("User chose to update later.");
          },
        );
      }
    }).catchError((error) {
      print("Error checking for updates: $error");
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('版本更新示例'),
      ),
      body: Center(
        child: Text('检查版本更新...'),
      ),
    );
  }
}

注意

  1. 替换androidIdiosId为你的实际应用ID。
  2. 对于Android,确保你的APK下载链接是正确的。
  3. 对于iOS,通常不需要提供APK下载链接,而是直接打开App Store链接。
  4. 使用launchUrl函数来打开下载链接或App Store页面,你可能需要在pubspec.yaml中添加对url_launcher的依赖,并进行相应的导入和使用。
dependencies:
  url_launcher: ^6.0.12  # 请检查最新版本号

然后在你的代码中导入并使用它:

import 'package:url_launcher/url_launcher.dart';

确保在调用launchUrl之前检查链接是否在支持的平台上:

if (await canLaunchUrl(Uri.parse(url))) {
  await launchUrl(Uri.parse(url));
} else {
  throw 'Could not launch $url';
}

以上代码提供了一个基本的框架,你可以根据自己的需求进一步定制和扩展。

回到顶部