import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';
import './newauth.dart';
void main() {
runApp(Welcome());
}
var occupied;
var setter;
class Welcome extends StatefulWidget {
@override
_WelcomeState createState() => _WelcomeState();
}
class _WelcomeState extends State<Welcome> {
getVisitingFlagsignin() async{
SharedPreferences preferences = await SharedPreferences.getInstance();
setState(() {
occupied = preferences.getBool("alreadyVisited");
print(occupied);
});
}
@override
Widget build(BuildContext context) {
Scaffold loginScaffold = new Scaffold(
appBar: AppBar(
title: Text('LOGIN'),
backgroundColor: Colors.orange[700],
),
body: Center(
child: Container(
margin: EdgeInsets.all(15),
child: Column(
children: <Widget>[
Image.asset('assets/applogo.png'),
Padding(
padding: const EdgeInsets.all(40.0),
child: SizedBox(
width: 152,
child: RaisedButton(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(50)),
child: Row(
children: <Widget>[
Image.asset(
'assets/Glogo.png',
height: 30,
),
Padding(
padding: const EdgeInsets.all(15.0),
child: Text(
'Login',
style: TextStyle(
fontSize: 15, fontFamily: 'Michroma'),
),
),
],
),
onPressed: () {
handleSignIn();
}),
),
)
],
),
),
),
);
Вот где я называю свои леса. Моя проблема заключается в том, что когда нажимается логин масла, я вызываю функцию входа в Google из моего другого файла дротика, который основан на документации флаттера, и там мало что изменилось. я могу успешно войти в систему и инициализировать состояние приложения, если уже есть пользователь, вошедший в систему. когда нажата кнопка входа в систему, я врезаюсь в стену о том, как вызвать другой эшафот и, возможно, передать ему некоторые данные.
Scaffold hompagescaffold = new Scaffold(
appBar: AppBar(
title: Text('Homepage'),
),
body: RaisedButton(child: Text('signout'),onPressed: (){signOutGoogle();},),
);
return new MaterialApp(home: occupied == true ? hompagescaffold:loginScaffold);
}
void initState() {
super.initState();
getVisitingFlagsignin();
}
}
это мой файл auth.dart. поэтому, когда нажимается кнопка входа, вызывается функция входа в систему, затем запускается весь необходимый вход в Google, и запускается аутентификация firebase, и после этого вызывается общая настройка, чтобы установить для моей логической настройки значение true. Следующее, что я хочу сделать, это вызвать мой эшафот домашней страницы, чтобы он заменил логинсаффолд.
import 'package:firebase_auth/firebase_auth.dart';
import 'package:google_sign_in/google_sign_in.dart';
import 'package:shared_preferences/shared_preferences.dart';
final FirebaseAuth _auth = FirebaseAuth.instance;
final GoogleSignIn _googleSignIn = GoogleSignIn();
setVisitingFlagsignin() async{
SharedPreferences preferences = await SharedPreferences.getInstance();
preferences.setBool("alreadyVisited", true);
print(preferences.getBool("alreadyVisited"));
}
Future<FirebaseUser> handleSignIn() async {
final GoogleSignInAccount googleUser = await _googleSignIn.signIn();
final GoogleSignInAuthentication googleAuth = await googleUser.authentication;
final AuthCredential credential = GoogleAuthProvider.getCredential(
accessToken: googleAuth.accessToken,
idToken: googleAuth.idToken,
);
final FirebaseUser user = (await _auth.signInWithCredential(credential)).user;
print("signed in " + user.displayName);
setVisitingFlagsignin();
return user;
}
setVisitingFlagsignout() async{
SharedPreferences preferences = await SharedPreferences.getInstance();
await preferences.setBool("alreadyVisited", false);
print (preferences.getBool("alreadyVisited"));
}
void signOutGoogle() async{
await _googleSignIn.signOut();
print ('User has signed out');
setVisitingFlagsignout();
}