繁体   English   中英

Flutter:如何设置 Stream 自动登录到应用程序?

[英]Flutter: How to setup Stream to auto log in into app?

我正在尝试使用 Firebase 使用匿名登录制作 Flutter 应用程序。 我想设置 Stream (或任何其他方法),以便在登录后并重新启动应用程序后,它不会 go 再次登录页面而不是 Z34D1F91FB2E514B8576FAB1A7A7A 。

我正在关注本教程。 https://firebase.flutter.dev/docs/auth/usage/#authentication-state

我在这里查看了许多围绕提供者和所有内容的答案。 作为一个初学者,它超出了我的想象。

我在这里提供我的代码:

main.dart

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Wrapper(),
    );
  }
}

包装器.dart

class Wrapper extends StatefulWidget {
  @override
  _WrapperState createState() => _WrapperState();
}

class _WrapperState extends State<Wrapper> {
  final FirebaseAuth _auth = FirebaseAuth.instance;
  @override
  Widget build(BuildContext context) {
    _auth.authStateChanges().listen((User user) {
      if (user == null) {
        print('the user is currently signed out');
        return Authenticate();
      } else {
        print('The User is currently signed In');
        return Home();
      }
    });
  }
}

身份验证服务文件

import 'package:firebase_auth/firebase_auth.dart';

class AuthenticationService {
  final FirebaseAuth _auth = FirebaseAuth.instance;

  //sign in anonympusly
  Future signinanon() async {
    try {
      UserCredential result = await _auth.signInAnonymously();
      User userdetails = result.user;
      return userdetails;
    } catch (e) {
      print(e.toString());
      return null;
    }
  }
}

如何实现正确的流式传输?

当您可以通过这种方式轻松完成时,我认为不需要 Stream:

 checkIfLoggedIn() {
    if (FirebaseAuth.instance.currentUser?.uid == null) {
      return Authenticate();
    } else {
      // logged
      return Home();
    }
  }

然后在目录中调用它。dart希望这有效!

main.dart:

return MaterialApp(
     home: FutureBuilder<FirebaseUser>(
            future: FirebaseAuth.instance.currentUser(),
            builder: (BuildContext context, AsyncSnapshot<FirebaseUser> snapshot){
                       if (snapshot.hasData){
                           FirebaseUser user = snapshot.data; // this is your user instance
                           /// is because there is user already logged
                           return MainScreen();
                        }
                         /// other way there is no user logged.
                         return LoginScreen();
             }
         )
          );

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM