코딩강의/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) 로그인을 하게 되면 파베에서 자동으로 기기에 토큰을 저장한다. 각 기기에 저장된 토큰으로 파베 데이터랑 비교 후 문제 없으면 승인을 해주는 것이다.