У меня есть экран spla sh, на котором я хочу управлять следующим: 1. Если пользователь вышел из системы, переведите его на OnBoardingScreen. 2. Если пользователь вошел в систему, но не имеет данных в firestore. Перенесите пользователя на SetupAccountPage 3. Если пользователь вошел в систему и имел данные для go на HomePage. Моя проблема в том, что строковое значение (_controller) возвращает ноль. когда пользователь вышел из системы и работает нормально, когда пользователь вошел в систему. Я запутался. Я дал код для загрузки, но это не помогло.
Пожалуйста, помогите всем, кто знает, что здесь не так. Ниже мой код
import 'dart:async';
import 'package:app/model/user.dart';
import 'package:app/pages/HomePage.dart';
import 'package:app/pages/SetupAccountPage.dart';
import 'package:app/screens/home/home.dart';
import 'package:app/screens/onboarding.dart';
import 'package:app/screens/setup_profile.dart';
import 'package:app/shared/loading.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
class Wrapper extends StatefulWidget {
@override
_WrapperState createState() => _WrapperState();
}
class _WrapperState extends State<Wrapper> {
//FirebaseUser user;
String onlineUserId;
String _controller;
@override
void initState() {
super.initState();
_checkUser();
Timer(Duration(seconds: 5), () {
print('done');
if (_controller == 'out') {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => OnBoardingScreen(),
),
);
} else if (_controller == 'info') {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => SetupAccountPage(),
),
);
} else if (_controller == 'home') {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => HomePage(),
),
);
}
;
});
}
_checkUser() async {
final FirebaseUser user = await FirebaseAuth.instance.currentUser();
final uid = user.uid;
if (await FirebaseAuth.instance.currentUser() == null) {
setState(() {
_controller = 'out';
});
} else {
final snapShot =
await Firestore.instance.collection('Users').document(user.uid).get();
if (snapShot.exists) {
setState(() {
_controller = 'home';
});
// Document with id == docId doesn't exist.
} else {
setState(() {
_controller = 'info';
});
}
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Stack(
fit: StackFit.expand,
children: <Widget>[
Container(
decoration: BoxDecoration(color: Colors.redAccent),
),
Column(
mainAxisAlignment: MainAxisAlignment.start,
children: <Widget>[
Expanded(
flex: 2,
child: Container(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
CircleAvatar(
backgroundColor: Colors.white,
radius: 50.0,
child: Icon(
Icons.shopping_cart,
color: Colors.greenAccent,
size: 50.0,
),
),
Padding(
padding: EdgeInsets.only(top: 10.0),
),
Text(
'this is a name',
style: TextStyle(
color: Colors.white,
fontWeight: FontWeight.bold,
fontSize: 24.0),
)
],
),
),
),
Expanded(
flex: 1,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
CircularProgressIndicator(),
Padding(
padding: EdgeInsets.only(top: 20.0),
),
Text(
'another name',
softWrap: true,
textAlign: TextAlign.center,
style: TextStyle(
fontWeight: FontWeight.bold,
fontSize: 18.0,
color: Colors.white),
)
],
),
)
],
)
],
),
);
}
}