Flutter OTA更新插件jl_ota的使用

Flutter OTA更新插件jl_ota的使用

jl_ota

插件用于在特定MP3格式下进行PCM音频转换。

开始使用

本项目是一个Flutter插件包的起点,它包含针对Android和/或iOS平台的特定平台实现代码。

对于如何开始Flutter开发的帮助,请查看官方文档,其中提供了教程、示例、移动开发指南以及完整的API引用。

使用方法

首先,在pubspec.yaml文件中添加jl_ota依赖。

dependencies:
    jl_ota: ^0.0.1

接下来,将库导入到你的应用中:

import 'package:jl_ota/jl_ota.dart';

然后,根据需要实现相应的功能。

示例代码

以下是使用jl_ota插件的一个完整示例Demo。

import 'dart:io';

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

import 'package:flutter/services.dart';
import 'package:jl_ota/jl_ota.dart';
import 'package:jl_ota/sn_filePath_tool.dart';
import 'package:jl_ota_example/permission_util.dart';
import 'package:permission_handler/permission_handler.dart';

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

class MyApp extends StatefulWidget {
  const MyApp({super.key});

  [@override](/user/override)
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  String _platformVersion = 'Unknown';
  final _JlOtaPlugin = JlOta();

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

  // 平台消息是异步的,因此我们在异步方法中初始化。
  Future<void> initPlatformState() async {
    print("sn_log => ${'sn_testFirmwareUpgrade 执行了1'}");

    String platformVersion;
    // 平台消息可能会失败,所以我们使用try/catch来处理PlatformException。
    // 我们还处理了消息可能返回null的情况。
    try {
      platformVersion =
          await _JlOtaPlugin.getPlatformVersion() ?? 'Unknown platform version';
    } on PlatformException {
      platformVersion = 'Failed to get platform version.';
    }

    // 如果在异步平台消息飞行期间小部件从树中移除,我们希望丢弃回复而不是调用setState来更新我们的非存在的外观。
    if (!mounted) return;

    PermissionUtil.preRequestPermissions([
      Permission.location,
      Permission.bluetoothScan,
      Permission.bluetoothConnect,
      Permission.bluetoothAdvertise
    ], onAllowed: (result) async {
      sn_testFirmwareUpgrade();
    });

    setState(() {
      _platformVersion = platformVersion;
    });
  }

  void sn_testFirmwareUpgrade() async {
    print("sn_log => ${'sn_testFirmwareUpgrade 执行了'}");

    if (Platform.isIOS) {
      try {
        String testOTA = await sn_moveFileToLib();
        _JlOtaPlugin.firmwareUpdate(
            testOTA,
            "7EAFC2B9-3EAF-9F9F-3292-F2770282F7D4",
            "DELI_MP502W_9E362B", (int result) {
          print("sn_log example 收到进度 ==> ${result}%");
        });
      } catch (e) {
        print("firmwareUpdate e=> ${e}");
      }
    } else {
      try {
        String testOTA = await sn_moveFileToLib();
        _JlOtaPlugin.firmwareUpdate(
            testOTA, "41:42:9F:D9:19:E5", "DELI_MP306W_921725", (int result) {
          print("!!!! test ==> ${result}%");
        });
      } catch (e) {
        print("firmwareUpdate e=> ${e}");
      }
    }
  }

  /// 调试用
  static sn_moveFileToLib() async {
    String _fileName = 'update.ufw';

    String filePath = 'audio/${_fileName}';
    final ByteData data = await rootBundle.load(filePath);
    final List<int> bytes =
        data.buffer.asUint8List(data.offsetInBytes, data.lengthInBytes);
    String _filePath = await SNFilePathTool.sn_getFilePath(_fileName);
    File file = File(_filePath);
    await file.writeAsBytes(bytes);
    print("该文件bytes大小为 ${bytes.length}");
    return _filePath;
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('插件示例应用'),
        ),
        body: Center(
          child: Text('运行在: $_platformVersion\n'),
        ),
      ),
    );
  }
}

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

1 回复

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


jl_ota 是一个用于 Flutter 应用实现 OTA(Over-The-Air)更新的插件。它允许你在不通过应用商店的情况下,直接更新应用的代码和资源。以下是如何使用 jl_ota 插件的简要步骤:

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  jl_ota: ^latest_version  # 请替换为最新版本号

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

2. 初始化插件

在你的 Flutter 应用启动时,初始化 jl_ota 插件。通常,你可以在 main.dart 文件中进行初始化:

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

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  
  // 初始化jl_ota插件
  await JlOta.init(
    baseUrl: 'https://your-ota-server.com', // 你的OTA服务器地址
    appKey: 'your_app_key', // 你的应用唯一标识
    appVersion: '1.0.0', // 当前应用版本
  );

  runApp(MyApp());
}

3. 检查更新

在应用的某个地方(例如主页面或设置页面),你可以添加一个检查更新的功能:

void checkForUpdate() async {
  try {
    final updateInfo = await JlOta.checkUpdate();
    
    if (updateInfo != null && updateInfo.hasUpdate) {
      // 如果有更新,提示用户
      showDialog(
        context: context,
        builder: (context) {
          return AlertDialog(
            title: Text('发现新版本'),
            content: Text('是否立即更新到版本 ${updateInfo.newVersion}?'),
            actions: [
              TextButton(
                onPressed: () {
                  Navigator.of(context).pop();
                },
                child: Text('取消'),
              ),
              TextButton(
                onPressed: () async {
                  Navigator.of(context).pop();
                  await JlOta.downloadAndInstallUpdate();
                },
                child: Text('更新'),
              ),
            ],
          );
        },
      );
    } else {
      // 没有更新
      ScaffoldMessenger.of(context).showSnackBar(
        SnackBar(content: Text('当前已是最新版本')),
      );
    }
  } catch (e) {
    ScaffoldMessenger.of(context).showSnackBar(
      SnackBar(content: Text('检查更新失败: $e')),
    );
  }
}

4. 下载并安装更新

JlOta.downloadAndInstallUpdate() 方法会自动下载更新并引导用户安装。你可以在用户确认更新后调用此方法。

5. 处理更新回调

你可以监听更新过程中的状态变化,例如下载进度和安装状态:

JlOta.setUpdateListener(
  onProgress: (progress) {
    print('下载进度: $progress%');
  },
  onError: (error) {
    print('更新出错: $error');
  },
  onComplete: () {
    print('更新完成');
  },
);

6. 配置OTA服务器

你需要在你的服务器上配置一个接口,用于返回更新信息。接口的响应格式通常如下:

{
  "hasUpdate": true,
  "newVersion": "1.0.1",
  "apkUrl": "https://your-ota-server.com/update/app-v1.0.1.apk",
  "updateLog": "修复了一些bug,优化了性能。",
  "forceUpdate": false
}
回到顶部