Метод входа вызывается при нулевом (Firebase) Флаттер

#android #firebase #flutter #mobile

#Android #firebase #флаттер #Мобильный

Вопрос:

иногда, когда я пытаюсь выполнить процесс входа с помощью firebase, я получаю эти ошибки:

W / DynamiteModule(8142): локальный класс дескриптора модуля для com.google.firebase.auth не найден.

I/FirebaseAuth(8142): [FirebaseAuth:] Подготовка к созданию подключения службы к реализации gms

D /FirebaseAuth(8142): уведомление слушателей токенов идентификатора о пользователе (skEEmC0dDBW9z73MsfShWX8M1iu1 ).

I / flutter (8142): Ошибка: NoSuchMethodError: метод ‘call’ был вызван при null.

I / flutter (8142): Receiver: null

I / flutter (8142): пытался вызвать: call()

Особенно, если я нажму на кнопку регистрации, чтобы вернуться к входу в систему. Может кто-нибудь объяснить, почему я получаю эту ошибку и как я могу ее исправить: вот код:

      class LoginPage extends StatefulWidget{

      static const routeName = '/login';

       LoginPage({this.onSignedIn});

        final VoidCallback onSignedIn;

         @override
          State<StatefulWidget> createState() => new _LoginPageState();

                    }

          enum FormType {
             login,
            }

         class _LoginPageState extends State <LoginPage> {

          final formKey = new GlobalKey<FormState>();

           String _email,_password;

           bool validateAndSave(){
           final form = formKey.currentState;
            if(form.validate()){
            form.save();
            
          return true;
           }
          return false;
          }

    void validateAndSubmit() async{
     if(validateAndSave()){
   try{
   await FirebaseAuth.instance.signInWithEmailAndPassword(email: _email, password: _password);
    widget.onSignedIn();
  }catch (e){
  print('Error:$e');
  }
  }
 }

   void moveToRegister() {
    Navigator.of(context).pushReplacementNamed(RegisterPage.routeName);
     }

    @override
   Widget build(BuildContext context) {
return Scaffold(
  appBar: new AppBar(
    title:new Text ('',
    style: new TextStyle(color:Colors.white, fontWeight:FontWeight.bold)
  ),
  backgroundColor: Color(0xff04346c),
  ),
  body: Stack (
    children:<Widget>[
      Container(
        decoration: BoxDecoration(
        gradient: LinearGradient(
        colors: [
          Color(0xff04a3b3),
          Color(0xff04a3b3),
          Color(0xff04a3b3),
          Color(0xff04a3b3),
        ]
      )
    ),
  ),
    Center(
      child: Card(
      shape: RoundedRectangleBorder(
        borderRadius: BorderRadius.circular(10.0)
      ),
      child: Container(
        height:350,
        width:350,
        padding: EdgeInsets.all(16.0),
        child: Form(
          key:formKey,
          child: new Column( 
          children: 
          buildInputs()   buildSubmitButtons(),
          )
        )
     )
    )
   )
  ],
  ),
 );
}

List<Widget> buildInputs(){
return [
   Image.asset('imageapp/myimage.png',height:50,width: 250,),
   new TextFormField( 
          decoration: new InputDecoration(labelText: 'Email',
          icon: new Icon (Icons.email)
          ),
          onSaved: (value) => _email = value,
          ),
          new TextFormField(
            decoration: new InputDecoration (labelText: 'Password',
          icon: new Icon (Icons.lock)
          ),
            obscureText: true,
            onSaved: (value) => _password = value,
          ),
    ];
}

List<Widget> buildSubmitButtons(){
 return [
  Padding(padding: EdgeInsets.all(3.0)),
  new RaisedButton(
            child: new Text('Login',style: new TextStyle(fontSize:18.0,color: Colors.white),
            ),
            color:  Color(0xff04346c),
            shape: RoundedRectangleBorder(
            borderRadius : new BorderRadius.circular(30.0)
            ),
            onPressed: validateAndSubmit
            ),
            new FlatButton(
              onPressed: moveToRegister, 
              child: new Text('Create an account',style: new TextStyle(fontSize:13.0),)
              )
       ];
    }
    }
  

Ответ №1:

Проблема была в этом

 widget.onSignedIn();
  

Я изменил его на Навигацию…. (На страницу информационной панели)