// 应用相关操作状态 State 类,用于 RiverPod 中 Provider 的定义 import 'package:device_info_plus/device_info_plus.dart'; import 'package:flutter/material.dart'; import 'package:package_info_plus/package_info_plus.dart'; import 'package:shared/utils/device_utils.dart'; class AppConfig { /// android 设备信息 AndroidDeviceInfo? androidDeviceInfo; /// ios 设备信息 IosDeviceInfo? iosDeviceInfo; /// 包信息 PackageInfo? packageInfo; double? _safeAreaPaddingTop; double? _safeAreaPaddingBottom; //屏幕大小 Size? mSize; //密度 double? mRatio; //设备像素px double? width; double? height; //设备宽高比,大于1.9是全面屏手机 double whRatio = 1; double density = 0; //是否是全面屏设备(宽高比大于1.9) bool isFullScreenDevice = false; // 上下边距 (主要用于 刘海 和 内置导航键) double? topPadding; double? bottomPadding; double? textScaleFactor; Brightness? platformBrightness; EdgeInsets? viewInsets; EdgeInsets? padding; bool? alwaysUse24HourFormat; bool? accessibleNavigation; bool? invertColors; bool? disableAnimations; bool? boldText; Orientation? orientation; /// 是否 release 包(生产环境) bool get isRelease => const bool.fromEnvironment("dart.vm.product"); String get version => packageInfo?.version ?? '-'; String get appName => packageInfo?.appName ?? '-'; String get packageName => packageInfo?.packageName ?? '-'; String get buildNumber => packageInfo?.buildNumber ?? '-'; // 顶部安全距离(pt) double get safeAreaPaddingTop => _safeAreaPaddingTop!; // 底部安全距离(pt) double get safeAreaPaddingBottom => _safeAreaPaddingBottom!; // 获取当前Android设备的Android版本 int getAndroidSdkInt() { if (DeviceUtils.isAndroid) { return androidDeviceInfo?.version.sdkInt ?? -1; } else { return -1; } } //===================== 插件自动生成-无需手动修改 ↓ =================================== // AppConfig({ this.androidDeviceInfo, this.iosDeviceInfo, this.packageInfo, this.mSize, this.mRatio, this.width, this.height, required this.whRatio, required this.density, required this.isFullScreenDevice, this.topPadding, this.bottomPadding, this.textScaleFactor, this.platformBrightness, this.viewInsets, this.padding, this.alwaysUse24HourFormat, this.accessibleNavigation, this.invertColors, this.disableAnimations, this.boldText, this.orientation, required double? safeAreaPaddingTop, required double? safeAreaPaddingBottom, }) : _safeAreaPaddingTop = safeAreaPaddingTop, _safeAreaPaddingBottom = safeAreaPaddingBottom; @override bool operator ==(Object other) => identical(this, other) || (other is AppConfig && runtimeType == other.runtimeType && androidDeviceInfo == other.androidDeviceInfo && iosDeviceInfo == other.iosDeviceInfo && packageInfo == other.packageInfo && _safeAreaPaddingTop == other._safeAreaPaddingTop && _safeAreaPaddingBottom == other._safeAreaPaddingBottom && mSize == other.mSize && mRatio == other.mRatio && width == other.width && height == other.height && whRatio == other.whRatio && density == other.density && isFullScreenDevice == other.isFullScreenDevice && topPadding == other.topPadding && bottomPadding == other.bottomPadding && textScaleFactor == other.textScaleFactor && platformBrightness == other.platformBrightness && viewInsets == other.viewInsets && padding == other.padding && alwaysUse24HourFormat == other.alwaysUse24HourFormat && accessibleNavigation == other.accessibleNavigation && invertColors == other.invertColors && disableAnimations == other.disableAnimations && boldText == other.boldText && orientation == other.orientation); @override int get hashCode => androidDeviceInfo.hashCode ^ iosDeviceInfo.hashCode ^ packageInfo.hashCode ^ _safeAreaPaddingTop.hashCode ^ _safeAreaPaddingBottom.hashCode ^ mSize.hashCode ^ mRatio.hashCode ^ width.hashCode ^ height.hashCode ^ whRatio.hashCode ^ density.hashCode ^ isFullScreenDevice.hashCode ^ topPadding.hashCode ^ bottomPadding.hashCode ^ textScaleFactor.hashCode ^ platformBrightness.hashCode ^ viewInsets.hashCode ^ padding.hashCode ^ alwaysUse24HourFormat.hashCode ^ accessibleNavigation.hashCode ^ invertColors.hashCode ^ disableAnimations.hashCode ^ boldText.hashCode ^ orientation.hashCode; @override String toString() { return 'AppConfig{' + ' androidDeviceInfo: $androidDeviceInfo,' + ' iosDeviceInfo: $iosDeviceInfo,' + ' packageInfo: $packageInfo,' + ' _safeAreaPaddingTop: $_safeAreaPaddingTop,' + ' _safeAreaPaddingBottom: $_safeAreaPaddingBottom,' + ' mSize: $mSize,' + ' mRatio: $mRatio,' + ' width: $width,' + ' height: $height,' + ' whRatio: $whRatio,' + ' density: $density,' + ' isFullScreenDevice: $isFullScreenDevice,' + ' topPadding: $topPadding,' + ' bottomPadding: $bottomPadding,' + ' textScaleFactor: $textScaleFactor,' + ' platformBrightness: $platformBrightness,' + ' viewInsets: $viewInsets,' + ' padding: $padding,' + ' alwaysUse24HourFormat: $alwaysUse24HourFormat,' + ' accessibleNavigation: $accessibleNavigation,' + ' invertColors: $invertColors,' + ' disableAnimations: $disableAnimations,' + ' boldText: $boldText,' + ' orientation: $orientation,' + '}'; } AppConfig copyWith({ AndroidDeviceInfo? androidDeviceInfo, IosDeviceInfo? iosDeviceInfo, PackageInfo? packageInfo, double? safeAreaPaddingTop, double? safeAreaPaddingBottom, Size? mSize, double? mRatio, double? width, double? height, double? whRatio, double? density, bool? isFullScreenDevice, double? topPadding, double? bottomPadding, double? textScaleFactor, Brightness? platformBrightness, EdgeInsets? viewInsets, EdgeInsets? padding, bool? alwaysUse24HourFormat, bool? accessibleNavigation, bool? invertColors, bool? disableAnimations, bool? boldText, Orientation? orientation, }) { return AppConfig( androidDeviceInfo: androidDeviceInfo ?? this.androidDeviceInfo, iosDeviceInfo: iosDeviceInfo ?? this.iosDeviceInfo, packageInfo: packageInfo ?? this.packageInfo, safeAreaPaddingTop: safeAreaPaddingTop ?? this._safeAreaPaddingTop, safeAreaPaddingBottom: safeAreaPaddingBottom ?? this._safeAreaPaddingBottom, mSize: mSize ?? this.mSize, mRatio: mRatio ?? this.mRatio, width: width ?? this.width, height: height ?? this.height, whRatio: whRatio ?? this.whRatio, density: density ?? this.density, isFullScreenDevice: isFullScreenDevice ?? this.isFullScreenDevice, topPadding: topPadding ?? this.topPadding, bottomPadding: bottomPadding ?? this.bottomPadding, textScaleFactor: textScaleFactor ?? this.textScaleFactor, platformBrightness: platformBrightness ?? this.platformBrightness, viewInsets: viewInsets ?? this.viewInsets, padding: padding ?? this.padding, alwaysUse24HourFormat: alwaysUse24HourFormat ?? this.alwaysUse24HourFormat, accessibleNavigation: accessibleNavigation ?? this.accessibleNavigation, invertColors: invertColors ?? this.invertColors, disableAnimations: disableAnimations ?? this.disableAnimations, boldText: boldText ?? this.boldText, orientation: orientation ?? this.orientation, ); } // }