错误:Flutter / lib / ui / ui_dart_state.cc(148)未处理的异常

时间:2019-02-27 16:34:00

标签: android firebase redux dart flutter

在应用启动时获取此错误。最初,我认为这是一个迁移到AndroidX 的问题,并完成了所有迁移到androidx支持库的步骤,但无济于事。

  1. 发布了Github问题here
  2. 在有关similar issue的评论中寻求帮助。

无法调试,因为我在命中主函数第一行的断点之前收到了此错误。

错误

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 Doctor

[✓] 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(),
        },
      ),
    );
  }
}

4 个答案:

答案 0 :(得分:5)

当我将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(),
          ),
.
.
.

答案 1 :(得分:0)

这是类型不匹配的错误,请确保您的返回类型与变量类型相同

答案 2 :(得分:0)

请检查请求类型是GET还是POST。如果您调用获取请求以获取发布请求,则会显示此错误。如果请求类型正确,则请检查您的JSON响应是否为JSON格式。 希望对您有所帮助。

答案 3 :(得分:-1)

如果您遇到此错误

Unhandled Exception: MissingPluginException(No implementation found for method getAll on channel plugins.flutter.io/shared_preferences

然后将其添加到main()函数的main.dart中

SharedPreferences.setMockInitialValues({});

此错误在IOS中不显示。