
brew install node ์
๋ ฅ ํ ์ค์นํ๋ค.node --version์์ํ๊ธฐ๋ฅผ ํด๋ฆญํ๊ณ ํ๋ก์ ํธ ๋ง๋ค๊ธฐ๋ฅผ ๋๋ฌ ์ ํ๋ก์ ํธ๋ฅผ ์์ฑํ๋ค.





npm install -g firebase-tools
firebase loginY๋ฅผ ์
๋ ฅํ์ฌ ๋์ด๊ฐ๋ค.



dart pub global activate flutterfire_cliflutterfire configure -a "com.ํ๋ก์ ํธ๋ช
.app"flutter pub add firebase_core
flutter pub add cloud_firestore


๐ก CLI ์ค์น ์ Path ์ฐ๊ฒฐ ์ค๋ฅ ํด๊ฒฐ
1.
nano ~/.zshrc
2. ์๋ ๊ฒฝ๋ก๋ฅผ ์ถ๊ฐํ๋ค.export PATH="$PATH:$HOME/.pub-cache/bin"
source ~/.zshrc
cloud Firestore๋ฅผ ํด๋ฆญํ๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ง๋ค๊ธฐ๋ฅผ ํด๋ฆญํ๊ณ ํ
์คํธ ๋ชจ๋์์ ์์์ ์ ํํ๋ค.





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());
}
//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(),
));
}),
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)),
);
}