upLoadUserInfo function

void upLoadUserInfo()

Implementation

void upLoadUserInfo() async {
  final client = HttpClient();
  const url = 'https://doraemon.xiaojukeji.com/uploadAppData';
  final request = await client.postUrl(Uri.parse(url));
  final packageInfo = await PackageInfo.fromPlatform();

  Locale? locale;
  void finder(Element element) {
    if (element.widget is Localizations) {
      locale ??= (element.widget as Localizations).locale;
    } else {
      element.visitChildren(finder);
    }
  }

  DoKitApp.appKey.currentContext?.visitChildElements(finder);

  final appId = packageInfo.packageName;
  // 在iOS上可能获取不到appName
  // https://github.com/flutter/flutter/issues/42510
  // 当info.plist文件中只有CFBundleName,没有CFBundleDisplayName时,则无法获取
  final appName =
      packageInfo.appName.isEmpty ? 'DoKitFlutterDefault' : packageInfo.appName;
  final appVersion = packageInfo.version;
  final version = DK_PACKAGE_VERSION;
  final from = '1';
  var type = 'flutter_';
  if (Platform.isIOS) {
    type += 'iOS';
  } else if (Platform.isAndroid) {
    type += 'android';
  } else {
    type += 'other';
  }
  final language = locale?.toString() ?? '';
  final playload = <String, dynamic>{};
  await VMServiceWrapper.instance
      .callExtensionService('flutterVersion')
      .then((value) {
    if (value != null) {
      final flutter = FlutterVersion.parse(value.json);
      playload['flutter_version'] = flutter.version;
      playload['dart_sdk_version'] = flutter.dartSdkVersion;
      type +=
          '-flutter_version_${flutter.version}-dart_sdk_version_${flutter.dartSdkVersion}';
    }
  });

  final params = <String, dynamic>{};
  params['appId'] = appId;
  params['appName'] = appName;
  params['appVersion'] = appVersion;
  params['version'] = version;
  params['from'] = from;
  params['type'] = type;
  params['language'] = language;
  params['playload'] = playload;

  request.headers
    ..add('Content-Type', 'application/json')
    ..add('Accept', 'application/json');
  request.add(utf8.encode(json.encode(params)));

  final response = await request.close();
//  final responseBody = await response.transform(utf8.decoder).join();
  if (response.statusCode == HttpStatus.ok) {
//    print('用户统计数据上报成功!');
  }
  client.close();
}