Flutter应用更新提示插件show_update_dialog的使用

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

Flutter应用更新提示插件show_update_dialog的使用

插件介绍

show_update_dialog 是一个用于帮助维护Android和iOS应用程序更新的插件。它允许您配置自动通知用户关于更新的功能。只需输入Apple Store的Bundle ID 和 Android ID,该包将直接比较商店版本与本地版本。

示例代码

下面是一个完整的示例代码,展示了如何使用 show_update_dialog 插件来检查应用更新并显示相应的提示对话框。

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

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

class MyApp extends StatelessWidget {
  MyApp({Key? key}) : super(key: key);
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(debugShowCheckedModeBanner: false, title: 'Teste', home: MyHomePage());
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key? key, this.title = ''}) : super(key: key);

  final String title;

  [@override](/user/override)
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  int _counter = 0;

  void _incrementCounter() {
    setState(() {
      _counter++;
    });
  }

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

  Future<void> verifyVersion() async {
    final versionCheck = ShowUpdateDialog(iOSId: 'com.dts.freefireth', androidId: 'com.dts.freefireth', iOSAppStoreCountry: 'BR');

    final VersionModel vs = await versionCheck.fetchVersionInfo();

    print(vs.localVersion);
    print(vs.appStoreLink);
    print(vs.storeVersion);
    print(vs.releaseNotes);

    int typeDemo = 2; // 0 simples, 1 custom dialog, 2 override

    switch (typeDemo) {
      case 0:
        versionCheck.showSimplesDialog(context);
        break;
      case 1:
        versionCheck.showCustomDialogUpdate(
          context: context,
          versionStatus: vs,
          buttonColor: Colors.black,
          buttonText: "Update :D",
          title: "Estamos mais novos do que nunca!",
          forceUpdate: true,
        );
        break;
      case 2:
        var _releaseNotes = vs.releaseNotes!.replaceAll("&lt;br&gt;", "\n");
        versionCheck.showCustomDialogUpdate(
          context: context,
          versionStatus: vs,
          buttonText: "Update",
          buttonColor: Colors.green,
          bodyoverride: Container(
            margin: EdgeInsets.only(left: 20, right: 20),
            child: Column(
              mainAxisAlignment: MainAxisAlignment.center,
              children: [
                Row(
                  mainAxisAlignment: MainAxisAlignment.center,
                  children: [
                    Icon(
                      Icons.update,
                      size: 150,
                      color: Colors.green,
                    ),
                  ],
                ),
                Text(
                  "Please update your app",
                  style: TextStyle(fontWeight: FontWeight.w700, fontSize: 18),
                ),
                Text(
                  "Local version: ${vs.localVersion}",
                  style: TextStyle(fontSize: 17),
                ),
                Text(
                  "Store version: ${vs.storeVersion}",
                  style: TextStyle(fontSize: 17),
                ),
                SizedBox(height: 30),
                Text(
                  "${_releaseNotes}",
                  style: TextStyle(fontSize: 15),
                ),
              ],
            ),
          ),
        );

        break;
      default:
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Text(
              'You have pushed the button this many times:',
            ),
            Text(
              '$_counter',
              style: Theme.of(context).textTheme.headline4,
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _incrementCounter,
        tooltip: 'Increment',
        child: Icon(Icons.add),
      ),
    );
  }
}

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

1 回复

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


当然,以下是如何在Flutter应用中使用show_update_dialog插件来实现应用更新提示的示例代码。

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

dependencies:
  flutter:
    sdk: flutter
  show_update_dialog: ^latest_version  # 请使用最新版本号

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

接下来,你可以在你的Flutter应用中使用ShowUpdateDialog插件。以下是一个完整的示例,展示了如何检查版本并显示更新提示对话框:

import 'package:flutter/material.dart';
import 'package:show_update_dialog/show_update_dialog.dart';
import 'package:package_info_plus/package_info_plus.dart';  // 用于获取当前应用版本信息
import 'dart:async';

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> {
  String? currentVersion;
  String? latestVersion = "2.0.0";  // 假设这是最新版本号,你可以从服务器获取

  @override
  void initState() {
    super.initState();
    _checkVersion();
  }

  Future<void> _checkVersion() async {
    PackageInfo packageInfo = await PackageInfo.fromPlatform();
    setState(() {
      currentVersion = packageInfo.version;
    });

    // 在这里,你可以从服务器或其他API获取最新版本号
    // 这里我们直接赋值,实际使用中你需要替换为真实的最新版本号获取逻辑
    // 例如:latestVersion = await fetchLatestVersionFromServer();

    // 检查是否需要显示更新提示
    if (currentVersion != latestVersion) {
      _showUpdateDialog();
    }
  }

  Future<void> _showUpdateDialog() async {
    bool shouldUpdate = await ShowUpdateDialog.show(
      context: context,
      versionName: latestVersion!,
      versionCode: 200,  // 假设这是最新版本号对应的代码,你需要根据实际情况填写
      releaseNotes: [
        "新功能1",
        "修复了一些已知问题",
        "性能优化"
      ],
      mandatoryUpdate: false,  // 是否为强制更新
      cancelButtonText: "稍后更新",
      updateButtonText: "立即更新",
    );

    if (shouldUpdate) {
      // 用户点击了“立即更新”按钮,你可以在这里处理更新逻辑
      // 例如:打开应用商店页面或下载更新包
      // 示例:Navigator.pushNamed(context, '/download_update');
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter 更新提示示例'),
      ),
      body: Center(
        child: Text('当前版本: $currentVersion'),
      ),
    );
  }
}

在这个示例中:

  1. 我们使用PackageInfoPlus插件来获取当前应用的版本信息。
  2. 我们定义了一个latestVersion变量来模拟最新版本号,在实际应用中,你应该从服务器或其他API获取这个值。
  3. initState方法中,我们调用_checkVersion方法来检查当前版本和最新版本是否一致。
  4. 如果当前版本与最新版本不一致,我们调用_showUpdateDialog方法来显示更新提示对话框。
  5. _showUpdateDialog方法中,我们使用ShowUpdateDialog.show方法来显示更新提示对话框,并根据用户的选择执行相应的逻辑。

请注意,上述代码中的latestVersionversionCode是硬编码的,实际应用中你需要从服务器或其他API获取这些值。此外,mandatoryUpdate参数决定了是否为强制更新,你可以根据需求调整。

回到顶部