错误:flutter/lib/ui/ui_dart_state.cc(148) 未处理的异常
Posted
技术标签:
【中文标题】错误:flutter/lib/ui/ui_dart_state.cc(148) 未处理的异常【英文标题】:ERROR:flutter/lib/ui/ui_dart_state.cc(148) Unhandled Exception 【发布时间】:2019-07-21 10:54:44 【问题描述】:在应用启动时出现此错误。最初我认为这是一个迁移到 AndroidX 问题,做了所有步骤来迁移到 androidx 支持库,但无济于事。
-
发布了一个 Github 问题here
在 similar issue 上寻求 cmets 的帮助。
由于我在主函数第一行的断点命中之前收到此错误,因此无法调试。
错误
Built build/app/outputs/apk/debug/app-debug.apk.
Installing build/app/outputs/apk/app.apk...
E/flutter (30114): [ERROR:flutter/lib/ui/ui_dart_state.cc(148)] Unhandled Exception: type 'List<String>' is not a subtype of type 'ReactiveFeedsRepository' of 'feedsRepository'
E/flutter (30114): #0 _runMainZoned.<anonymous closure>.<anonymous closure> (dart:ui/hooks.dart:185:38)
E/flutter (30114): #1 _rootRun (dart:async/zone.dart:1124:13)
E/flutter (30114): #2 _CustomZone.run (dart:async/zone.dart:1021:19)
E/flutter (30114): #3 _runZoned (dart:async/zone.dart:1516:10)
E/flutter (30114): #4 runZoned (dart:async/zone.dart:1500:12)
E/flutter (30114): #5 _runMainZoned.<anonymous closure> (dart:ui/hooks.dart:180:5)
E/flutter (30114): #6 _startIsolate.<anonymous closure> (dart:isolate/runtime/libisolate_patch.dart:300:19)
E/flutter (30114): #7 _RawReceivePortImpl._handleMessage (dart:isolate/runtime/libisolate_patch.dart:171:12)
E/flutter (30114):
Syncing files to device ONEPLUS A5000...
V/FA (30114): Inactivity, disconnecting from the service
我的颤振医生
[✓] Flutter (Channel stable, v1.2.1, on Mac OS X 10.13.6 17G65, locale en-SG)
• Flutter version 1.2.1 at /Users/harshvardhan/Documents/work/portable/flutter
• Framework revision 8661d8aecd (13 days ago), 2019-02-14 19:19:53 -0800
• Engine revision 3757390fa4
• Dart version 2.1.2 (build 2.1.2-dev.0.0 0a7dcf17eb)
[✓] Android toolchain - develop for Android devices (Android SDK version 28.0.3)
• Android SDK at /Users/harshvardhan/Library/Android/sdk
• Android NDK location not configured (optional; useful for native profiling support)
• Platform android-28, build-tools 28.0.3
• ANDROID_HOME = /Users/harshvardhan/Library/Android/sdk
• Java binary at: /Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/bin/java
• Java version OpenJDK Runtime Environment (build 1.8.0_152-release-1248-b01)
• All Android licenses accepted.
[✓] ios toolchain - develop for iOS devices (Xcode 10.1)
• Xcode at /Applications/Xcode.app/Contents/Developer
• Xcode 10.1, Build version 10B61
• ios-deploy 2.0.0
• CocoaPods version 1.5.3
[✓] Android Studio (version 3.3)
• Android Studio at /Applications/Android Studio.app/Contents
• Flutter plugin version 33.3.1
• Dart plugin version 182.5215
• Java version OpenJDK Runtime Environment (build 1.8.0_152-release-1248-b01)
[✓] Connected device (1 available)
• ONEPLUS A5000 • fe6f9295 • android-arm64 • Android 9 (API 28)
Main.dart
void main([
ReactiveTodosRepository todosRepository,
ReactiveFeedsRepository feedsRepository,
ReactiveUserFeedsRepository userFeedsRepository,
ReactiveAuditRepository auditRepository,
UserFirebaseRepository userRepository,
SCUserRepositoryImpl scUserRepository
]) async
bool isInDebugMode = true;
SystemChrome.setPreferredOrientations([
DeviceOrientation.portraitDown,
DeviceOrientation.portraitUp,
]);
FlutterError.onError = (FlutterErrorDetails details)
if (isInDebugMode)
// In development mode simply print to console.
FlutterError.dumpErrorToConsole(details);
else
// In production mode report to the application zone to report to
// Crashlytics.
Zone.current.handleUncaughtError(details.exception, details.stack);
;
await FlutterCrashlytics().initialize();
runZoned<Future<Null>>(() async
runApp(ReduxApp(
todosRepository: todosRepository,
feedsRepository: feedsRepository,
userFeedsRepository: userFeedsRepository,
auditRepository: auditRepository,
userRepository: userRepository,
scUserRepository: scUserRepository,
));
, onError: (error, stackTrace) async
// Whenever an error occurs, call the `reportCrash` function. This will send
// Dart errors to our dev console or Crashlytics depending on the environment.
await FlutterCrashlytics().reportCrash(error, stackTrace, forceCrash: false);
);
class ReduxApp extends StatelessWidget
final Store<AppState> store;
ReduxApp(
Key key,
ReactiveTodosRepository todosRepository,
ReactiveFeedsRepository feedsRepository,
ReactiveUserFeedsRepository userFeedsRepository,
ReactiveAuditRepository auditRepository,
UserFirebaseRepository userRepository,
SCUserRepositoryImpl scUserRepository,
) : store = Store<AppState>(
appReducer,
initialState: AppState.initial(),
middleware: createStoreTodosMiddleware(
todosRepository ??
FirestoreReactiveTodosRepository(Firestore.instance),
feedsRepository ??
FirestoreReactiveFeedsRepository(Firestore.instance),
userFeedsRepository ??
FirestoreReactiveUserFeedsRepository(Firestore.instance),
auditRepository ?? AuditAPIRepository(),
userRepository ?? FirebaseUserRepository(FirebaseAuth.instance),
scUserRepository ?? SCUserRepositoryImpl(),
),
),
super(key: key)
store.dispatch(InitAppAction());
@override
Widget build(BuildContext context)
return StoreProvider(
store: store,
child: MaterialApp(
debugShowCheckedModeBanner: false,
title: FirestoreReduxLocalizations().appTitle,
theme: ArchSampleTheme.theme,
localizationsDelegates: [
ArchSampleLocalizationsDelegate(),
FirestoreReduxLocalizationsDelegate(),
],
routes:
ArchSampleRoutes.signin: (context) => SignIn(),
ArchSampleRoutes.newPassword: (context) => NewPassword(),
ArchSampleRoutes.home: (context) => HomeScreen(),
ArchSampleRoutes.analytics: (context) => Chart(),
ArchSampleRoutes.addTodo: (context) => AddTodo(),
ArchSampleRoutes.forgotPasswordEmailPrompt: (context) => ForgotPasswordEmailPromptScreen(),
ArchSampleRoutes.forgotPasswordOtpPrompt: (context) => ForgotPasswordOtpPromptScreen(),
,
),
);
【问题讨论】:
【参考方案1】:当我将 Flutter 从 1.0.3 迁移到 1.2.1 时,我遇到了类似的问题。我发现问题与void main
方法上定义的参数有关。调用 main 时永远不会传递这些参数。要解决此问题,您可以删除这些参数并对使用它的其他地方进行以下更改。
void main() async
.
.
.
runZoned<Future<Null>>(() async
runApp(ReduxApp());
.
.
.
ReduxApp(
Key key) : store = Store<AppState>(
appReducer,
initialState: AppState.initial(),
middleware: createStoreTodosMiddleware(
FirestoreReactiveTodosRepository(Firestore.instance),
FirestoreReactiveFeedsRepository(Firestore.instance),
FirestoreReactiveUserFeedsRepository(Firestore.instance),
AuditAPIRepository(),
FirebaseUserRepository(FirebaseAuth.instance),
SCUserRepositoryImpl(),
),
.
.
.
【讨论】:
【参考方案2】:这是类型不匹配错误,请确保您的返回类型与变量类型相同
【讨论】:
【参考方案3】:请检查请求类型是 GET 还是 POST。如果您为发布请求调用获取请求,则会显示此错误。如果请求类型正确,请检查您的 JSON 响应是否为 JSON 格式。 希望对你有帮助。
【讨论】:
如何知道是get请求还是post请求?【参考方案4】:如果您收到此错误
Unhandled Exception: MissingPluginException(No implementation found for method getAll on channel plugins.flutter.io/shared_preferences
然后将其添加到 main() 函数中的 main.dart
SharedPreferences.setMockInitialValues();
IOS 中不显示此错误。
【讨论】:
此用于非真实测试以上是关于错误:flutter/lib/ui/ui_dart_state.cc(148) 未处理的异常的主要内容,如果未能解决你的问题,请参考以下文章
Pig 安装错误:错误 pig.Main:错误 2998:未处理的内部错误