Eu quero criar uma verificação de autorização para exibir telas diferentes dependendo se o usuário está logado. Quando o usuário está logado, então HomeScreen() deve ser exibida para ele. E quando não estiver logado, então a página SignIn, cujo código está anexado abaixo Como colocar o widget com a tela corretamente?
class SignInScreen extends StatefulWidget {
const SignInScreen({Key? key}) : super(key: key);
@override
_SignInScreenState createState() => _SignInScreenState();
}
class _SignInScreenState extends State<SignInScreen> {
TextEditingController _passwordTextController = TextEditingController();
TextEditingController _emailTextController = TextEditingController();
late StreamSubscription<User?> user;
void initState() {
super.initState();
user = FirebaseAuth.instance.authStateChanges().listen((user) {
if(user == null) {
}
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Container(
width: MediaQuery.of(context).size.width,
height: MediaQuery.of(context).size.height,
decoration: BoxDecoration(
gradient: LinearGradient(colors: [
hexStringToColor("#a40606"),
hexStringToColor("#d98324"),
], begin: Alignment.topCenter, end: Alignment.bottomCenter)),
child: SingleChildScrollView(
child: Padding(
padding: EdgeInsets.fromLTRB(
20, MediaQuery.of(context).size.height * 0.2, 20, 0),
child: Column(
children: <Widget>[
logoWidget("images/news_icon.png"),
const SizedBox(
height: 30,
),
reusableTextField("Enter UserName", Icons.person_outline, false,
_emailTextController),
const SizedBox(
height: 20,
),
reusableTextField("Enter Password", Icons.lock_outline, true,
_passwordTextController),
const SizedBox(
height: 5,
),
forgetPassword(context),
firebaseUIButton(context, "Sign In", () {
FirebaseAuth.instance
.signInWithEmailAndPassword(
email: _emailTextController.text,
password: _passwordTextController.text)
.then((value) {
Navigator.push(context,
MaterialPageRoute(builder: (context) => HomeScreen()));
}).onError((error, stackTrace) {
print("Error ${error.toString()}");
});
}),
signUpOption()
],
),
),
),
),
);
}
Vou apenas assumir que você já tem uma tela inicial, nessa tela você pode colocar a condição de navegação para HomeScreen ou SignInScreen em seu initState()
.
void initState() {
super.initState();
FirebaseAuth.instance.authStateChanges().listen((User? user) {
if (user == null) {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => const SignInScreen()),
);
} else {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => const HomeScreen()),
);
}
});
}
Esta solução mostra apenas como navegar para uma tela específica com base no status do usuário. O que eu recomendo é criar um arquivo de serviço onde você vai colocar a lógica necessária para o Flutter Auth. Aqui está um link que será útil: https://www.youtube.com/watch?v=mZYuuGAIwe4
Este artigo é coletado da Internet.
Se houver alguma infração, entre em [email protected] Delete.
deixe-me dizer algumas palavras