-1

so intentionally passes wrong parameters in my code to get the user not found exception. but when my code catches the error in the bloc and tries to emit the failure state the app crashes and no state is emitted

custom Exception

repository_function cubit function this is the call stack i get below

_handleBeginFrame (c:\src\flutter\flutter\packages\flutter\lib\src\scheduler\binding.dart:986)
<asynchronous gap> (Unknown Source:0)
scheduleFrame (c:\src\flutter\flutter\packages\flutter\lib\src\scheduler\binding.dart:810)
scheduleFrameCallback (c:\src\flutter\flutter\packages\flutter\lib\src\scheduler\binding.dart:536)
scheduleTick (c:\src\flutter\flutter\packages\flutter\lib\src\scheduler\ticker.dart:265)
_tick (c:\src\flutter\flutter\packages\flutter\lib\src\scheduler\ticker.dart:254)
_invokeFrameCallback (c:\src\flutter\flutter\packages\flutter\lib\src\scheduler\binding.dart:1175)
<closure> (c:\src\flutter\flutter\packages\flutter\lib\src\scheduler\binding.dart:1079)
handleBeginFrame (c:\src\flutter\flutter\packages\flutter\lib\src\scheduler\binding.dart:1077)
_handleBeginFrame (c:\src\flutter\flutter\packages\flutter\lib\src\scheduler\binding.dart:994)
<asynchronous gap> (Unknown Source:0)
scheduleFrame (c:\src\flutter\flutter\packages\flutter\lib\src\scheduler\binding.dart:810)
scheduleFrameCallback (c:\src\flutter\flutter\packages\flutter\lib\src\scheduler\binding.dart:536)
scheduleTick (c:\src\flutter\flutter\packages\flutter\lib\src\scheduler\ticker.dart:265)
_tick (c:\src\flutter\flutter\packages\flutter\lib\src\scheduler\ticker.dart:254)
_invokeFrameCallback (c:\src\flutter\flutter\packages\flutter\lib\src\scheduler\binding.dart:1175)
<closure> (c:\src\flutter\flutter\packages\flutter\lib\src\scheduler\binding.dart:1079)
handleBeginFrame (c:\src\flutter\flutter\packages\flutter\lib\src\scheduler\binding.dart:1077)
_handleBeginFrame (c:\src\flutter\flutter\packages\flutter\lib\src\scheduler\binding.dart:994)
<asynchronous gap> (Unknown Source:0)
scheduleFrame (c:\src\flutter\flutter\packages\flutter\lib\src\scheduler\binding.dart:810)
scheduleFrameCallback (c:\src\flutter\flutter\packages\flutter\lib\src\scheduler\binding.dart:536)
scheduleTick (c:\src\flutter\flutter\packages\flutter\lib\src\scheduler\ticker.dart:265)
_tick (c:\src\flutter\flutter\packages\flutter\lib\src\scheduler\ticker.dart:254)
_invokeFrameCallback (c:\src\flutter\flutter\packages\flutter\lib\src\scheduler\binding.dart:1175)
<closure> (c:\src\flutter\flutter\packages\flutter\lib\src\scheduler\binding.dart:1079)
handleBeginFrame (c:\src\flutter\flutter\packages\flutter\lib\src\scheduler\binding.dart:1077)
_handleBeginFrame (c:\src\flutter\flutter\packages\flutter\lib\src\scheduler\binding.dart:994)
<asynchronous gap> (Unknown Source:0)
scheduleFrame (c:\src\flutter\flutter\packages\flutter\lib\src\scheduler\binding.dart:810)
scheduleFrameCallback (c:\src\flutter\flutter\packages\flutter\lib\src\scheduler\binding.dart:536)
scheduleTick (c:\src\flutter\flutter\packages\flutter\lib\src\scheduler\ticker.dart:265)
_tick (c:\src\flutter\flutter\packages\flutter\lib\src\scheduler\ticker.dart:254)
_invokeFrameCallback (c:\src\flutter\flutter\packages\flutter\lib\src\scheduler\binding.dart:1175)
<closure> (c:\src\flutter\flutter\packages\flutter\lib\src\scheduler\binding.dart:1079)
handleBeginFrame (c:\src\flutter\flutter\packages\flutter\lib\src\scheduler\binding.dart:1077)
_handleBeginFrame (c:\src\flutter\flutter\packages\flutter\lib\src\scheduler\binding.dart:994)
<asynchronous gap> (Unknown Source:0)
scheduleFrame (c:\src\flutter\flutter\packages\flutter\lib\src\scheduler\binding.dart:810)

that all i can provide..

olu
  • 93
  • 7

1 Answers1

0

You cant throw an error in a catch block. You would again have to put a try block around it. If you throw an exception of course your app crashes.

I would do this:

enum SignInFailures {
   userNotFound,
   wrongPassword,
   ...
}

An then inside of the catch block:

on FirebaseAuthException catch(e) {
   switch(e.code) {
      case "user-not-found":
        return SignInFailures.userNotFound,
      ...
   }
}

To make this work, make walkIn() a Future instead of Future<auth.User?> and catch the result:

final result = await walkIn();

if(result is SignInFailures)
{
   return print("Error occured!");
}

print("Success! User UID: ${(result as User).uid}");
Code Master
  • 437
  • 1
  • 7
  • thanks for your answer. i don't understand it but it made me check my code again and i found the problem. i was passing a statement instead of passing the custom class. i dont know if you understand but thanks. – olu Sep 12 '22 at 19:00