Flutter自动化更新服务插件autoussdflutter的使用

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

Flutter自动化更新服务插件AutoUssdFlutter的使用

简介

AutoUssdFlutter 是一个强大的自动化 SDK,允许你在 USSD 服务的基础上构建 Android 应用程序。它是一个用于 AutoUssd 的 Flutter 插件,可以帮助你轻松集成 USSD 功能到你的 Flutter 应用中。

版本信息

  • 版本: 4.2.0
  • 平台: Flutter (Android)
  • 最低 SDK 版本: 26 (Android 8)
  • Gradle 版本: 7.1.3
  • Kotlin Gradle 插件版本: 1.6.21

完整示例 Demo

以下是一个完整的示例代码,展示了如何在 Flutter 应用中使用 AutoUssdFlutter 插件来执行 USSD 会话并获取设备的 SIM 卡网络信息。

1. 配置 pubspec.yaml

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

dependencies:
  flutter:
    sdk: flutter
  autoussdflutter: ^4.2.0

2. 主应用程序代码 (main.dart)

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

void main() {
  WidgetsFlutterBinding.ensureInitialized();

  runApp(MyApp());
}

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

class _MyAppState extends State<MyApp> {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      initialRoute: "/home",
      routes: {
        "/home": (_) => HomePage(),
      },
    );
  }
}

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

class _HomePageState extends State<HomePage> {
  // 初始化 SDK 并注册回调函数
  _HomePageState() {
    // 注册会话计数监听器
    AutoUssdFlutter.getInstance().registerSessionCountListener((count) {
      debugPrint("Session count: $count");
    });

    // 注册会话结果监听器
    AutoUssdFlutter.getInstance().registerSessionResultListener((result) {
      debugPrint(result.status.toString());

      if (result.status == ResultStatus.COMPLETED) {
        Future.microtask(() {
          showDialog(
            context: context,
            builder: (context) {
              return AlertDialog(
                content: Text(
                  result.lastContent ?? "Please wait for a confirmation message",
                ),
                actions: [
                  TextButton(
                    onPressed: () {
                      Navigator.of(context).pop();
                    },
                    child: Text("Ok"),
                  ),
                ],
              );
            },
          );
        });
      }
    });

    // 设置覆盖层主题
    AutoUssdFlutter.getInstance().setOverlayTheme(
      OverlayThemeData(
        Color(0xfffebc43).value, // 主色调
        Color(0xff333333).value, // 背景色
        Color(0xff333333).value, // 按钮背景色
        Color(0xff333333).value, // 按钮文本颜色
        Colors.white.value,      // 输入框背景色
        Color(0xff676767).value, // 输入框边框颜色
        Color(0xff333333).value, // 提示文本颜色
        Color(0xff676767).value, // 按钮高亮颜色
      ),
    );
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    final theme = Theme.of(context);

    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('AutoUssd Flutter Example App'),
        ),
        body: Center(
          child: Column(
            mainAxisSize: MainAxisSize.min,
            children: [
              SizedBox(
                width: 300,
                child: Text(
                  "Flutter app demonstrating the use of the AutoUssd Flutter plugin",
                  textAlign: TextAlign.center,
                ),
              ),
              const SizedBox(height: 24),
              SizedBox(
                width: 300,
                child: Card(
                  elevation: 8,
                  child: Padding(
                    padding: const EdgeInsets.symmetric(
                      horizontal: 16,
                      vertical: 24,
                    ),
                    child: Row(
                      crossAxisAlignment: CrossAxisAlignment.center,
                      children: [
                        Icon(
                          Icons.info_outline_rounded,
                          size: 36,
                        ),
                        Expanded(
                          flex: 1,
                          child: Text.rich(
                            TextSpan(
                              children: [
                                TextSpan(
                                  text: "Tap on the button to check the remaining balance on your ",
                                ),
                                TextSpan(
                                  text: "Vodafone Cash wallet",
                                  style: theme.textTheme.bodyText2?.copyWith(
                                    fontWeight: FontWeight.bold,
                                  ),
                                ),
                              ],
                            ),
                            textAlign: TextAlign.center,
                          ),
                        ),
                      ],
                    ),
                  ),
                ),
              ),
              const SizedBox(height: 24),
              SizedBox(
                width: 300,
                child: ElevatedButton(
                  onPressed: () {
                    // 执行 USSD 会话
                    AutoUssdFlutter.getInstance().executeSession(
                      "629e05e1751c102d57c53c0d", // 会话 ID
                      {
                        "number": "0507810870",   // 用户电话号码
                        "amount": "10",           // 金额
                        "reference": "PayBuddy Text", // 参考信息
                      },
                      null,
                      [
                        UssdDialogOverride(
                          ["Enter", "Pin"], // 需要覆盖的对话框
                          UssdDialogType.BUTTON, // 对话框类型
                        ),
                      ],
                    );
                  },
                  child: const Text(
                    "Check Vodafone Momo Balance",
                  ),
                ),
              ),
              const SizedBox(height: 24),
              SizedBox(
                width: 300,
                child: ElevatedButton(
                  onPressed: () async {
                    // 获取设备的 SIM 卡网络信息
                    final networks = await AutoUssdFlutter.getInstance().getDeviceSimNetworks();
                    showDialog(
                      context: context,
                      builder: (context) {
                        return AlertDialog(
                          content: Text(
                            networks.fold(
                              "${networks.length} Networks: ",
                              (accumulator, network) {
                                return "$accumulator, Network ${network.toMap()}";
                              },
                            ),
                          ),
                        );
                      },
                    );
                  },
                  child: const Text(
                    "List Device Networks",
                  ),
                ),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

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

1 回复

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


在Flutter项目中实现自动化更新服务,autoussdflutter 是一个可能的选择。虽然具体的插件实现和API可能会因版本而异,但以下是一个使用 autoussdflutter 插件的基本示例代码框架。这个示例假设你已经将该插件添加到你的 Flutter 项目中,并且已经按照插件的文档进行了必要的配置。

1. 添加依赖

首先,确保在 pubspec.yaml 文件中添加了 autoussdflutter 依赖:

dependencies:
  flutter:
    sdk: flutter
  autoussdflutter: ^最新版本号  # 替换为实际版本号

然后运行 flutter pub get 来获取依赖。

2. 初始化插件

在你的 Flutter 应用的入口文件(通常是 main.dart)中,初始化并使用 autoussdflutter 插件。

import 'package:flutter/material.dart';
import 'package:autoussdflutter/autoussdflutter.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();
  }

  Future<void> _checkForUpdates() async {
    try {
      // 假设插件提供了一个名为 checkForUpdates 的方法
      bool hasUpdate = await Autoussdflutter.checkForUpdates();
      if (hasUpdate) {
        // 下载并安装更新
        bool updateInstalled = await Autoussdflutter.downloadAndUpdate();
        if (updateInstalled) {
          // 更新成功后可能需要重启应用
          // 注意:重启应用的操作可能需要平台特定的代码
          // 例如,在 Android 上可以使用 ActivityCompat.finishAffinity() 或 SystemUiOverlayStyle 相关方法
          // 在 iOS 上可能需要使用 UIApplication.shared.terminate()(但通常不推荐,因为会导致用户体验问题)
          // 这里仅作为示例,实际重启逻辑需要根据具体需求和平台来实现
          print("Update installed successfully. Restarting app...");
          // 重启应用的示例代码(需根据平台实现)
          // _restartApp();
        } else {
          print("Failed to install update.");
        }
      } else {
        print("No update available.");
      }
    } catch (e) {
      print("Error checking for updates: $e");
    }
  }

  // 重启应用的示例方法(需根据平台实现)
  // void _restartApp() {
  //   // 平台特定的重启代码
  // }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Check for Updates'),
      ),
      body: Center(
        child: Text('Checking for updates...'),
      ),
    );
  }
}

注意事项

  1. 平台特定代码:重启应用的部分需要根据不同的平台(iOS 和 Android)来实现。Flutter 本身不提供直接重启应用的方法,因此你可能需要编写一些平台特定的代码来实现这一功能。

  2. 错误处理:示例代码中的错误处理较为简单,实际项目中你可能需要更复杂的错误处理和用户反馈机制。

  3. 插件文档:务必阅读 autoussdflutter 插件的官方文档,因为插件的API和配置可能会随着版本的更新而变化。

  4. 权限:自动化更新服务可能需要一些特定的权限(如网络权限、存储权限等),确保在 AndroidManifest.xmlInfo.plist 中进行了必要的配置。

  5. 测试:在发布之前,务必在不同设备和版本上进行充分的测试,以确保自动化更新服务的稳定性和可靠性。

由于我无法直接访问 autoussdflutter 插件的具体实现和API文档,上述代码是基于假设的插件方法和功能编写的。在实际使用中,你需要根据插件的实际情况进行调整和修改。

回到顶部