import 'package:package_info_plus/package_info_plus.dart';
import 'package:device_info_plus/device_info_plus.dart';
import 'package:uuid/uuid.dart';
import 'package:flutter/foundation.dart';
import 'dart:io';
import 'dart:math';

// 定义常见浏览器引擎
final List<String> commonBrowserEngines = [
  'AppleWebKit',
  'Gecko',
];

Future<String> getUserAgent() async {
  final PackageInfo packageInfo = await PackageInfo.fromPlatform();
  final String appName = packageInfo.appName;
  final String appVersion = packageInfo.version;

  final DeviceInfoPlugin deviceInfoPlugin = DeviceInfoPlugin();
  String platformName = '';
  String platformVersion = '';
  String deviceData = '';
  String browserName = '';
  String browserVersion = '';
  String browserEngine = '';

  if (kIsWeb) {
    platformName = 'Web';
    platformVersion = 'Unknown';
    deviceData = 'Unknown';
    browserEngine = 'AppleWebKit'; // Default for web
    browserName = 'CustomBrowser';
    browserVersion = appVersion;
  } else if (Platform.isAndroid) {
    final AndroidDeviceInfo androidInfo = await deviceInfoPlugin.androidInfo;
    platformName = 'Android';
    platformVersion = androidInfo.version.release;
    deviceData = androidInfo.model;
    browserEngine = 'AppleWebKit';
    browserName = 'Chrome'; // Default for Android
    browserVersion = 'Mobile Safari/${appVersion}';
  } else if (Platform.isIOS) {
    final IosDeviceInfo iosInfo = await deviceInfoPlugin.iosInfo;
    platformName = 'iOS';
    platformVersion = iosInfo.systemVersion;
    deviceData = iosInfo.utsname.machine;
    browserEngine = 'AppleWebKit';
    browserName = 'Safari'; // Default for iOS
    browserVersion = 'Version/${appVersion}';
  } else if (Platform.isMacOS) {
    final MacOsDeviceInfo macOsInfo = await deviceInfoPlugin.macOsInfo;
    platformName = 'macOS';
    platformVersion = macOsInfo.osRelease;
    deviceData = macOsInfo.model;
    browserEngine = 'AppleWebKit';
    browserName = 'Safari'; // Default for macOS
    browserVersion = 'Version/${appVersion}';
  } else {
    // Handle other platforms as needed
  }

  final String flutterVersion = await getFlutterVersion();

  return '$appName/$appVersion ($platformName $platformVersion; $deviceData) $browserEngine $browserName/$browserVersion Flutter/$flutterVersion';
}

Future<String> getFlutterVersion() async {
  return Platform.version.split(" ")[0];
}

生成效果: user-agent: [todoList_flutter/1.0.0 (Android 14; sdk_gphone64_x86_64) AppleWebKit Chrome/Mobile Safari/1.0.0 Flutter/3.4.0]

最后修改:2024 年 05 月 23 日
如果觉得我的文章对你有用,请随意赞赏