每次启动应用程序时,我都会收到此错误。 Crashlytics 错误,app_update_controller.dart。怎么解决?
Flutter(频道稳定,3.19.1,在 macOS 13.5.2 22G91 darwin-arm64 上,区域设置 ru-AE) Android 工具链 - 为 Android 设备开发(Android SDK 版本 34.0.0) Xcode - 为 iOS 和 macOS 开发 (Xcode 14.3.1) Chrome - 为网络开发 Android Studio(版本2023.1) VS 代码(版本 1.87.0) 连接的设备(3 个可用) 网络资源
这是AppUpdateController,app_update_controller.dart:
class AppUpdateController extends GetxController {
final _logger = Get.find<ILogger>();
String installedVersion = '';
String packageName = '';
String appName = '';
String storeVersion = '';
String itunesStoreUrl = '';
final PlayStoreSearchAPI _playStoreSearchAPI = PlayStoreSearchAPI();
final ITunesSearchAPI _iTunesSearchAPI = ITunesSearchAPI();
late final FirebaseRemoteConfig remoteConfig;
static const Duration remindLaterDuration = Duration(days: 1);
static AppUpdateController get find => Get.find();
Future<void> init(FirebaseRemoteConfig remoteConfig) async {
this.remoteConfig = remoteConfig;
await _checkAppUpdate(true);
}
void getPackageInfo() => _getPackageInfo();
Future<void> _getPackageInfo() async {
_logger.verbose('Getting package info...');
var packageInfo = await PackageInfo.fromPlatform();
installedVersion = packageInfo.version;
packageName = packageInfo.packageName;
appName = packageInfo.appName;
}
Future<void> _checkAppUpdate(bool showAlert) async {
await _getPackageInfo();
if (Platform.isAndroid) {
final response = await _playStoreSearchAPI.lookupById(
packageName,
country: Get.deviceLocale?.countryCode,
language: Get.deviceLocale?.languageCode,
);
if (response == null) {
_logger.error('Cant fetch android store version info');
return;
}
final String? version = _playStoreSearchAPI.version(response);
if (version == null) {
_logger.error('Failed to parse android store version');
return;
}
storeVersion = version;
} else if (Platform.isIOS) {
final response = await _iTunesSearchAPI.lookupByBundleId(packageName,
country: Get.deviceLocale?.countryCode);
if (response == null) {
_logger.error('Cant fetch ios store version info');
return;
}
final String? version = _iTunesSearchAPI.version(response);
if (version == null) {
_logger.error('Failed to parse ios store version');
return;
}
storeVersion = version;
itunesStoreUrl = _iTunesSearchAPI.trackViewUrl(response) ?? '';
} else {
_logger
.info('Updater: Platform ${Platform.operatingSystem} not supported.');
return;
}
final Version parsedCurrentVersion = Version.parse(installedVersion);
final Version parsedStoreVersion = Version.parse(storeVersion);
_logger.info(
'Got version info from store. storeVersion: $parsedStoreVersion, currentVersion: $parsedCurrentVersion');
if (parsedStoreVersion > parsedCurrentVersion) {
_logger.info('Store version is newer. Requesting update...');
final String minVersion =
remoteConfig.getString(Defaults.remoteConfigMinVersionKey);
final Version parsedMinVersion =
minVersion.isEmpty ? Version(0, 0, 0) : Version.parse(minVersion);
late final bool updateRequired;
if (parsedMinVersion > parsedCurrentVersion) {
updateRequired = true;
} else {
updateRequired = false;
}
final DateTime lastUpdateRequestedString =
await _getLastUpdateRequestTime();
final DateTime now = DateTime.now();
if (!updateRequired &&
now.difference(lastUpdateRequestedString).inSeconds <
remindLaterDuration.inSeconds) {
_logger.info(
'User suspended update by pressing "install later" button before');
return;
}
RouteManagement.goToAppUpdateView();
}
}
Future<DateTime> _getLastUpdateRequestTime() async {
final String? lastUpdateRequestedString = await HiveService.get<String>(
HiveBoxNames.lashUpdateRequested, Defaults.lastUpdateRequestedTimeKey);
if (lastUpdateRequestedString == null) return DateTime(0);
return DateTime.parse(lastUpdateRequestedString);
}
Future<void> _setLastUpdateRequestTime(DateTime date) {
return HiveService.put(HiveBoxNames.lashUpdateRequested,
Defaults.lastUpdateRequestedTimeKey, date.toIso8601String());
}
sendLaterLogs() {
_logger.info('User pressed later update');
}
sendUpdateLogs() {
_logger.info('User pressed update');
}
openStore() {
if (Platform.isAndroid || Platform.isIOS) {
final url = Uri.parse(
Platform.isAndroid
? AppUrls.appPackageAndroidUrlFormat + packageName
: itunesStoreUrl,
);
launchUrl(
url,
mode: LaunchMode.externalApplication,
);
}
}
}
您的应用程序抛出错误消息“无法获取 Android 商店版本信息”。 从您的代码来看,当
_playStoreSearchAPI.lookupById
响应为 null
时,就会发生这种情况。
假设您正在使用“upgrader”包,如果我们检查此函数的源代码,我们可以看到当包的id
为空或无法在 Play 商店中找到时,就会发生这种情况。