我有一个 flutter 应用程序,当我从 Xcode 或 Android Studio 运行它时,它可以在我的 iOS 模拟器和物理 iPhone 上完美地构建和运行。
现在我将其发布到 AppStore,在几个用户下载了它之后,该应用程序甚至没有为他们启动......它甚至在到达启动屏幕之前就崩溃了。
我尝试添加 Crashlytics 以捕获错误(如果有任何错误),但没有报告任何内容。
你们中有人遇到过类似的问题吗?有没有办法了解正在发生的事情?
这是我的 main.dart 文件:
import 'package:animated_theme_switcher/animated_theme_switcher.dart';
import 'package:firebase_core/firebase_core.dart';
import 'package:firebase_crashlytics/firebase_crashlytics.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:hive_flutter/hive_flutter.dart';
import 'package:path_provider/path_provider.dart';
import 'package:tupitools/core/locator.dart';
import 'package:tupitools/core/models/expansion_torque_search_model.dart';
import 'package:tupitools/core/models/gauge_converter_search_model.dart';
import 'package:tupitools/core/models/gauge_tube_chart_search_model.dart';
import 'package:tupitools/core/models/nominal_pipe_size_search_model.dart';
import 'package:tupitools/core/models/tes2_search_model.dart';
import 'package:tupitools/core/models/tube_expansion_search_model.dart';
import 'package:tupitools/core/theme_service.dart';
import 'package:tupitools/screens/splashscreen.dart';
import 'package:tupitools/utils/sp_utils.dart';
import 'firebase_options.dart';
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
await SystemChrome.setPreferredOrientations([
DeviceOrientation.portraitUp,
DeviceOrientation.portraitDown,
]);
await SPUtil.init();
await ScreenUtil.ensureScreenSize();
await Firebase.initializeApp(
options: DefaultFirebaseOptions.currentPlatform,
);
FlutterError.onError = (errorDetails) {
FirebaseCrashlytics.instance.recordFlutterFatalError(errorDetails);
};
// Pass all uncaught asynchronous errors that aren't handled by the Flutter framework to Crashlytics
PlatformDispatcher.instance.onError = (error, stack) {
FirebaseCrashlytics.instance.recordError(error, stack, fatal: true);
return true;
};
final themeService = await ThemeService.instance;
var initTheme = themeService.initial;
await setupLocator();
final document = await getApplicationDocumentsDirectory();
await Hive.initFlutter(document.path);
Hive.registerAdapter(GaugeTubeChartSearchModelAdapter());
Hive.registerAdapter(GaugeConverterSearchModelAdapter());
Hive.registerAdapter(NominalPipeSizeSearchModelAdapter());
Hive.registerAdapter(TubeExpansionSearchModelAdapter());
Hive.registerAdapter(ExpansionTorqueSearchModelAdapter());
Hive.registerAdapter(TES2SearchModelAdapter());
if (!SPUtil.containsKey(SPUtil.keyConvertersOrder)) {
SPUtil.setStringList(SPUtil.keyConvertersOrder, ["0", "1", "2", "3", "4", "5"]);
}
if (!SPUtil.containsKey(SPUtil.keyConvertersOrderByName)) {
SPUtil.setStringList(SPUtil.keyConvertersOrderByName,
['Length', 'Weight', 'Circumference to diameter', 'Torque', 'Power', 'Flow rate']);
}
runApp(MyApp(theme: initTheme));
}
class MyApp extends StatelessWidget {
final ThemeData theme;
const MyApp({super.key, required this.theme});
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
SystemChrome.setSystemUIOverlayStyle(const SystemUiOverlayStyle(
statusBarBrightness: Brightness.dark, // iOS
statusBarIconBrightness: Brightness.dark, // Android
));
final mediaQueryData = MediaQuery.of(context);
final scale = mediaQueryData.textScaleFactor.clamp(1.0, 1.0);
return MediaQuery(
data: MediaQuery.of(context).copyWith(textScaleFactor: scale),
child: ScreenUtilInit(
useInheritedMediaQuery: true,
designSize: const Size(393, 852),
minTextAdapt: true,
builder: (context, child) {
return ThemeProvider(
initTheme: theme,
builder: (_, theme) {
return MaterialApp(
debugShowCheckedModeBanner: false,
title: 'App name',
theme: theme,
home: child,
);
},
);
},
child: const SplashScreen(),
),
);
}
}
最后我将 flutter SDK 和所有依赖项更新到最新版本,此后一切正常。但不确定首先是什么导致了这个问题..