Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

ERROR:flutter/lib/ui/ui_dart_state.cc(148) Unhandled Exception

Getting this error on start of the app. Initially I thought its a Migration to AndroidX issue, did all the steps to migrate to androidx support library, to no avail.

  1. Posted a Github issue here
  2. Looked for help in comments on similar issue.

Not able to debug since I get this error before the breakpoint at first line of the main function hits.

Error

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

My 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(),
        },
      ),
    );
  }
}
like image 335
Harsh Vardhan Avatar asked Feb 27 '19 16:02

Harsh Vardhan


2 Answers

I faced a similar problem when I migrated Flutter from 1.0.3 to 1.2.1. What I found out the problem is related to the parameter defined on the void main method. Those parameters are never passed when main is called. To fix this you can remove those params and make the following changes to the other places where it's being used.

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(),
          ),
.
.
.
like image 122
5_nd_5 Avatar answered Oct 16 '22 10:10

5_nd_5


This is a type mismatch error make sure your return type is same as the variable type

like image 37
Brinda Rathod Avatar answered Oct 16 '22 11:10

Brinda Rathod