错误: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:未处理的内部错误

Informix 错误:发生了语法错误。错误代码:-201

我收到一个错误:“MetaMask - RPC 错误:错误:错误:[ethjs-rpc] rpc 错误与有效负载”

错误精灵错误跟踪器错误

网页打开显示错误500是啥意思

PHP错误处理