[FLUTTER] Firebase ์—ฐ๋™

ํ•œ์ง€์›ยท2024๋…„ 12์›” 4์ผ

๋‚˜๋งŒ์˜ ์‚ฌ์ „

๋ชฉ๋ก ๋ณด๊ธฐ
25/26
post-thumbnail

๐Ÿ”‘ ์‹œ์ž‘ํ•˜๊ธฐ ์•ž์„œ...

1๏ธโƒฃ Node.js ์„ค์น˜

  1. Node.js ์„ค์น˜ํ•œ๋‹ค.
    1-1. Node.js์—์„œ ๋‹ค์šด๋กœ๋“œํ•œ๋‹ค.
    1-2. ํ„ฐ๋ฏธ๋„์ฐฝ์— brew install node ์ž…๋ ฅ ํ›„ ์„ค์น˜ํ•œ๋‹ค.
  2. node --version

๐Ÿ”‘ Firebase ์—ฐ๋™

1๏ธโƒฃ Firebase ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ

  1. Firebase์— ์ ‘์†ํ•˜์—ฌ ๋กœ๊ทธ์ธํ•œ๋‹ค.
  2. ์‹œ์ž‘ํ•˜๊ธฐ๋ฅผ ํด๋ฆญํ•˜๊ณ  ํ”„๋กœ์ ํŠธ ๋งŒ๋“ค๊ธฐ๋ฅผ ๋ˆŒ๋Ÿฌ ์ƒˆ ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
  3. ํ”„๋กœ์ ํŠธ๋ช…๊ณผ Google ์• ๋„๋ฆฌํ‹ฑ์Šค๋ฅผ ์„ค์ •ํ•˜์—ฌ ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ์„ ์™„๋ฃŒํ•œ๋‹ค.
    โœ”๏ธ Google ์• ๋„๋ฆฌํ‹ฑ์Šค๋Š” ์„ค์ •ํ•˜์ง€ ์•Š์•„๋„ ์ƒ๊ด€X

2๏ธโƒฃ Flutter๊ณผ ์—ฐ๋™

  1. VScode์˜ ํ„ฐ๋ฏธ๋„์„ ์—ด๊ณ  ์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•œ๋‹ค.
npm install -g firebase-tools
  1. firebase ๊ณ„์ •๊ณผ ์—ฐ๋™ํ•œ๋‹ค.
    2-1. firebase login
    2-2. ์งˆ๋ฌธ์ด ๋‚˜์˜ค๋ฉด Y๋ฅผ ์ž…๋ ฅํ•˜์—ฌ ๋„˜์–ด๊ฐ„๋‹ค.
  2. dart pub global activate flutterfire_cli
  3. flutterfire configure -a "com.ํ”„๋กœ์ ํŠธ๋ช….app"
  4. ์—ฐ๋™ํ•˜๋ ค๋Š” ํ”„๋กœ์ ํŠธ์™€ ํ”Œ๋žซํผ์„ ์„ ํƒํ•œ๋‹ค.
  5. ์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜์—ฌ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•œ๋‹ค.
flutter pub add firebase_core
flutter pub add cloud_firestore

๐Ÿ’ก CLI ์„ค์น˜ ์‹œ Path ์—ฐ๊ฒฐ ์˜ค๋ฅ˜ ํ•ด๊ฒฐ
1. nano ~/.zshrc
2. ์•„๋ž˜ ๊ฒฝ๋กœ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค.

export PATH="$PATH:$HOME/.pub-cache/bin"
  1. source ~/.zshrc

3๏ธโƒฃ Firebase ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ƒ์„ฑ

  1. ์‚ฌ์ดํŠธ๋กœ ๋Œ์•„๊ฐ€ cloud Firestore๋ฅผ ํด๋ฆญํ•œ๋‹ค.
  2. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋งŒ๋“ค๊ธฐ๋ฅผ ํด๋ฆญํ•˜๊ณ  ํ…Œ์ŠคํŠธ ๋ชจ๋“œ์—์„œ ์‹œ์ž‘์„ ์„ ํƒํ•œ๋‹ค.
  3. ์ปฌ๋ ‰์…˜์ถ”๊ฐ€๋ฅผ ํด๋ฆญํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ๋Š”๋‹ค.
    3-1. ๋‹ค์Œ ์ปฌ๋ ‰์…˜ID๋ฅผ ์ž…๋ ฅํ•œ๋‹ค.

    3-2. ๋ฌธ์„œID๋Š” ์ž๋™ID๋ฅผ ์„ ํƒํ•˜๊ณ  ํ•„๋“œ์— ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ž…๋ ฅํ•œ๋‹ค.

4๏ธโƒฃ Flutter๊ณผ ์—ฐ๋™2

  1. ์•„๋ž˜์˜ ์ฝ”๋“œ๋ฅผ ํ”„๋กœ์ ํŠธ์— ์ž…๋ ฅํ•œ๋‹ค.
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_core/firebase_core.dart';
import 'package:flutter_application_241204/firebase_options.dart';

void main() async {
  //flutter์—”์ง„๊ณผ ์œ„์ ฏ ์‹œ์Šคํ…œ์„ ์ดˆ๊ธฐํ™”
  WidgetsFlutterBinding.ensureInitialized();
  //firebase ์„œ๋น„์Šค๋ฅผ ์ดˆ๊ธฐํ™”(์ดˆ๊ธฐํ™” ์‹œ์ž‘ ์ „๊นŒ์ง€ ์‹œ์ž‘ํ•˜์ง€ ์•Š๊ณ  ๋Œ€๊ธฐ)
  await Firebase.initializeApp(
    options: DefaultFirebaseOptions.currentPlatform, //ํ˜„์žฌ ํ”Œ๋žซํผ์— ๋งž๋Š” ์„ค์ • ์ •๋ณด๋ฅผ ์‚ฌ์šฉ
  );
  runApp(MyApp());
}
  1. ๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๋Š” ๋ถ€๋ถ„์„ ๋ณ€๊ฒฝํ•œ๋‹ค.
//strean: firebase์˜ ์ปฌ๋ ‰์…˜์„ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๊ตฌ๋…,  snapshots : ์ปฌ๋ ‰์…˜์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝ
StreamBuilder(
	stream: FirebaseFirestore.instance.collection('todo').snapshots(),
	builder: (context, snapshot) {
		//๋ฐ์ดํ„ฐ๊ฐ€ ๋กœ๋“œ๋˜์ง€ ์•Š์•˜์„ ๋•Œ ๋กœ๋”ฉ์„ ๋ฐ˜ํ™˜
		if (snapshot.hasData) {
			return CircularProgressIndicator();
		}
		//์ŠคํŠธ๋ฆผ์—์„œ ๋ฐ›์€ ๋ฐ์ดํ„ฐ์˜ ๋ฌธ์„œ ๋ชฉ๋ก์„ ์ €์žฅ
		final document = snapshot.data!.docs;
		return Expanded(
			child: ListView(
				children:document.map((doc) => _buildItemWidget(doc)).toList(),
	));
}),
  1. ๋ฐ์ดํ„ฐ๋ฅผ ์ƒ์„ฑ, ์‚ญ์ œ, ๋ณ€๊ฒฝํ•˜๋Š” ๋ถ€๋ถ„์„ ๋ณ€๊ฒฝํ•œ๋‹ค.
void _addTodo(Todo todo) {
    FirebaseFirestore.instance
        .collection('todo')
        .add({'title': todo.title, 'isDone': todo.isDone});
    _todoController.text = "";
  }

  void _deleteTodo(DocumentSnapshot doc) {
    FirebaseFirestore.instance.collection('todo').doc(doc.id).delete();
  }

  void _toggleTodo(DocumentSnapshot doc) {
    FirebaseFirestore.instance
        .collection('todo')
        .doc(doc.id)
        .update({'isDone': !doc['isDone']});
  }

  Widget _buildItemWidget(DocumentSnapshot doc) {
    final todo = Todo(doc['title'], isDone: doc['isDone']);

    return ListTile(
      onTap: () {
        _toggleTodo(doc);
      },
      title: Text(
        todo.title,
        style: todo.isDone
            ? TextStyle(
                decoration: TextDecoration.lineThrough,
                fontStyle: FontStyle.italic)
            : null,
      ),
      trailing: IconButton(
          onPressed: () {
            _deleteTodo(doc);
          },
          icon: Icon(Icons.delete_forever)),
    );
  }
profile
์ฒœ์ฒœํžˆ ์˜ฎ๊ธฐ๋Š” ์ค‘

0๊ฐœ์˜ ๋Œ“๊ธ€