main.dart 1.8 KB
import 'dart:convert';

import 'package:appframe/config/constant.dart';
import 'package:appframe/config/env_config.dart';
import 'package:appframe/config/locator.dart';
import 'package:appframe/services/im_service.dart';
import 'package:archive/archive.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:shared_preferences/shared_preferences.dart';

import 'app.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();

  await setupLocator();
  await _initH5Version();
  await _initImSdk();

  runApp(const App());
}

Future<void> _initH5Version() async {
  // 1 读取保存的H5版本
  var h5Version = getIt.get<SharedPreferences>().getString(Constant.h5VersionKey);
  if (h5Version != null && h5Version.isNotEmpty) {
    Constant.h5Version = h5Version;
    return;
  }

  // 2 读取基准包
  try {
    String path = EnvConfig.isDev() ? "assets/base-dev.zip" : "assets/base-pro.zip";
    final byteData = await rootBundle.load(path);
    final archive = ZipDecoder().decodeBytes(byteData.buffer.asUint8List());

    // 查找 package.json 文件
    for (final file in archive) {
      if (file.name == 'package.json') {
        // 将内容转换成字符串
        final content = utf8.decode(file.content as List<int>);
        var json = jsonDecode(content);
        var h5Version = json['version'] ?? Constant.h5Version;

        Constant.h5Version = h5Version;
        getIt.get<SharedPreferences>().setString(Constant.h5ShowVersionKey, h5Version);
        return;
      }
    }
  } catch (e) {
    Constant.h5Version = '0.0.0';
    getIt.get<SharedPreferences>().setString(Constant.h5ShowVersionKey, '0.0.0');
    debugPrint(e.toString());
  }
}

Future<void> _initImSdk() async {
  if (Constant.needIM) {
    await getIt.get<ImService>().initSdk();
  }
}