suota 0.2.5 copy "suota: ^0.2.5" to clipboard
suota: ^0.2.5 copied to clipboard

A new suota project user suota ota.

example/lib/main.dart

import 'dart:io';

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

import 'package:flutter/services.dart';
import 'package:path_provider/path_provider.dart';
import 'package:suota/suota.dart';

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

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

  @override
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  String _platformVersion = 'Unknown';
  String _permissionStatus = 'Unknown';
  String _pathInfo = '路径信息加载中...';
  String _fileStatus = '文件状态未知';
  final _suotaPlugin = Suota();
  late StreamSubscription _streamSubscription;

  @override
  void initState() {
    super.initState();
    initPlatformState();
    _loadPathInfo();
    _writeAssetToHarmonyFolder().then((value) => setState(() {
          _fileStatus = '文件写入成功';
          _startSuotaUpdate();
        }));
  }

  // Platform messages are asynchronous, so we initialize in an async method.
  Future<void> initPlatformState() async {
    try {
      String platformVersion =
          await _suotaPlugin.getPlatformVersion() ?? 'Unknown platform version';

      if (!mounted) return;

      setState(() {
        _platformVersion = platformVersion;
        _permissionStatus = '初始化完成,等待用户操作';
      });
    } on PlatformException {
      setState(() {
        _platformVersion = 'Failed to get platform version.';
        _permissionStatus = '平台版本获取失败';
      });
    }
  }

  /// 加载路径信息
  Future<void> _loadPathInfo() async {
    try {
      final appDocDir = await getApplicationDocumentsDirectory();
      final tempDir = await getTemporaryDirectory();
      final appSupportDir = await getApplicationSupportDirectory();

      setState(() {
        _pathInfo = '''
应用文档目录: ${appDocDir.path}
临时目录: ${tempDir.path}
应用支持目录: ${appSupportDir.path}
        '''
            .trim();
      });
    } catch (e) {
      setState(() {
        _pathInfo = '获取路径信息失败: $e';
      });
    }
  }

  /// 通过path_provider将assets文件写入鸿蒙文件夹
  Future<void> _writeAssetToHarmonyFolder() async {
    try {
      setState(() {
        _permissionStatus = '正在将assets文件写入鸿蒙文件夹...';
        _fileStatus = '处理中...';
      });

      // 获取应用文档目录
      final appDocDir = await getTemporaryDirectory();
      final targetPath = '${appDocDir.path}/bleupdata.img';

      print('目标路径: $targetPath');

      // 读取assets文件
      final ByteData assetData = await rootBundle.load('assets/bleupdata.img');
      final List<int> bytes = assetData.buffer.asUint8List();

      // 写入到文档目录
      final File targetFile = File(targetPath);
      await targetFile.writeAsBytes(bytes);

      // 验证文件是否写入成功
      if (await targetFile.exists()) {
        final fileStat = await targetFile.stat();
        setState(() {
          _permissionStatus = '文件成功写入鸿蒙文件夹!';
          _fileStatus = '''
文件路径: $targetPath
文件大小: ${fileStat.size} bytes
创建时间: ${fileStat.modified}
          '''
              .trim();
        });

        print('文件写入成功: $targetPath, 大小: ${fileStat.size} bytes');
      } else {
        setState(() {
          _permissionStatus = '文件写入失败:文件不存在';
          _fileStatus = '写入失败';
        });
      }
    } catch (e) {
      print('写入文件时出错: $e');
      setState(() {
        _permissionStatus = '写入文件失败: $e';
        _fileStatus = '错误: $e';
      });
    }
  }

  /// 启动SUOTA更新(使用写入的文件)
  Future<void> _startSuotaUpdate() async {
    try {
      setState(() {
        _permissionStatus = '正在启动SUOTA更新...';
      });

      // 获取应用文档目录中的文件路径
      final appDocDir = await getTemporaryDirectory();
      final filePath = '${appDocDir.path}/bleupdata.img';

      // 检查文件是否存在
      final file = File(filePath);
      if (!await file.exists()) {
        setState(() {
          _permissionStatus = '错误:文件不存在,请先写入文件';
        });
        return;
      }

      // 启动更新
      _streamSubscription = _suotaPlugin
          .startUpdate(filePath, "Greenfit Watch D Pro 24E6")
          .listen((event) {
        print('received event: $event');
        setState(() {
          _permissionStatus = 'SUOTA事件: $event';
        });
      }, onError: (dynamic error) {
        print('received error: ${error.message}');
        setState(() {
          _permissionStatus = 'SUOTA错误: ${error.message}';
        });
      }, cancelOnError: true);
    } catch (e) {
      print('启动SUOTA更新失败: $e');
      setState(() {
        _permissionStatus = '启动更新失败: $e';
      });
    }
  }

  /// 检查文件状态
  Future<void> _checkFileStatus() async {
    try {
      final appDocDir = await getApplicationDocumentsDirectory();
      final filePath = '${appDocDir.path}/bleupdata.img';
      final file = File(filePath);

      if (await file.exists()) {
        final stat = await file.stat();
        setState(() {
          _fileStatus = '''
文件存在: $filePath
文件大小: ${stat.size} bytes
修改时间: ${stat.modified}
访问时间: ${stat.accessed}
          '''
              .trim();
        });
      } else {
        setState(() {
          _fileStatus = '文件不存在: $filePath';
        });
      }
    } catch (e) {
      setState(() {
        _fileStatus = '检查文件状态失败: $e';
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Plugin example app'),
        ),
        body: Center(
          child: Text('Running on: $_platformVersion\n'),
        ),
      ),
    );
  }
}
0
likes
0
points
13
downloads

Publisher

unverified uploader

Weekly Downloads

A new suota project user suota ota.

Homepage

License

unknown (license)

Dependencies

flutter, plugin_platform_interface

More

Packages that depend on suota

Packages that implement suota