코딩강의/chat_app(플러터-유데미)

~274. Showing Different Screens Based On The Authentication

김마드 2023. 12. 6. 17:55

1. 로그인이 되면 다른 화면으로 넘어가보자.

 

- chat.dart

import 'package:flutter/material.dart';

class ChatScreen extends StatelessWidget {
  const ChatScreen({super.key});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('FlutterChat'),
      ),
      body: const Center(
        child: Text('Logged in!'),
      ),
    );
  }
}

1) 로그인이 되면 해당 화면으로 이동 시킬 것이다.

 

- main.dart

import 'package:chat_app/screens/chat.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart';
import 'package:firebase_core/firebase_core.dart';

import 'firebase_options.dart';
import 'package:chat_app/screens/auth.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp(
    options: DefaultFirebaseOptions.currentPlatform,
  );
  runApp(const App());
}

class App extends StatelessWidget {
  const App({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'FlutterChat',
      theme: ThemeData().copyWith(
        useMaterial3: true,
        colorScheme: ColorScheme.fromSeed(
            seedColor: const Color.fromARGB(255, 63, 17, 177)),
      ),
      home: StreamBuilder(
          stream: FirebaseAuth.instance.authStateChanges(),
          builder: (ctx, snapshot) {
            if (snapshot.hasData) {
              return const ChatScreen();
            }

            return const AuthScreen();
          }),
    );
  }
}

1) StreamBuilder 부분을 통해서 데이터가 있다면(로그인이 되었다면) 바로 ChatScreen으로, 로그인이 안되었다면 AuthScreen으로 넘어가는 로직이다.

2) 로그인을 하게 되면 파베에서 자동으로 기기에 토큰을 저장한다. 각 기기에 저장된 토큰으로 파베 데이터랑 비교 후 문제 없으면 승인을 해주는 것이다.