Stream Builder не работает, ошибка навигации - PullRequest
0 голосов
/ 21 октября 2019

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

Я получаю токен на адрес электронной почты, который используется для входа в систему, но навигация не выполняется Stream Builder.

Это Main.dart:

class _ThisAppState extends State<ThisApp> {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        body: _handleWindowDisplay(),
      ),
    );
  }
}
Widget _handleWindowDisplay() {
  StreamBuilder(
      stream: FirebaseAuth.instance.onAuthStateChanged,
      builder: (context, asyncSnapshot) {
        if (asyncSnapshot.hasError) {
          return new Text("Error!");
        } else if (asyncSnapshot.data == null) {
          return new LoginPage();
        } else {
          if (asyncSnapshot.data.state) {
            return new LoginPage();
          } else
            return MainScreen();
        }
      },);
}


class _ThisAppState extends State<ThisApp> {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        body: _handleWindowDisplay(),
      ),
    );
  }
}
Widget _handleWindowDisplay() {
  StreamBuilder(
      stream: FirebaseAuth.instance.onAuthStateChanged,
      builder: (context, asyncSnapshot) {
        if (asyncSnapshot.hasError) {
          return new Text("Error!");
        } else if (asyncSnapshot.data == null) {
          return new LoginPage();
        } else {
          if (asyncSnapshot.data.state) {
            return new LoginPage();
          } else
            return MainScreen();
        }
      },);
}


**Login Screen**

import 'dart:async';

import 'package:flutter/material.dart';
import 'package:firebase_auth/firebase_auth.dart';
class LoginPage extends StatefulWidget {
  @override
  _LoginPageState createState() => _LoginPageState();
}

class _LoginPageState extends State<LoginPage> {
  String _email,_Password;

  FutureOr Function(AuthResult value) get onValue => null;
  @override
  Widget build(BuildContext context) {
    return Container(
      child:
        Form(child:
        Column(
          children: <Widget>[
            TextFormField(decoration: InputDecoration(labelText: "Enter Email"),
            onChanged: (value){
              this.setState((){_email=value;});
            },
            ),
            SizedBox(height: 10,),
            TextFormField(decoration: InputDecoration(labelText: "Enter Password"),
            onChanged:(value) {
              this.setState(() {
                _Password = value;
              });
            },
            ),
            SizedBox(height: 10,),
            RaisedButton(child: Text("Sign In"),onPressed: ()=>{
              FirebaseAuth.instance.signInWithEmailAndPassword(email: _email, password: _Password)
            .then((onValue){

              }).catchError((error){
              debugPrint("The error is "+error);
            })
            })
    ],

        ),
      ),
    );
  }
}

1 Ответ

0 голосов
/ 21 октября 2019

Вам необходимо использовать метод Navigator.push ().

Например, чтобы перейти на главный экран (), вам нужно использовать следующий код.

Navigator.push(
    context,
    MaterialPageRoute(builder: (context) => MainScreen()),
  );

Вы должны оформить заказ Основы навигации

...