Skip to content

Instantly share code, notes, and snippets.

@princesanjivy
Last active April 12, 2024 18:02
Show Gist options
  • Save princesanjivy/1e39d0ca4642d3d17700bedede933c04 to your computer and use it in GitHub Desktop.
Save princesanjivy/1e39d0ca4642d3d17700bedede933c04 to your computer and use it in GitHub Desktop.
Flutter Firebase CRUD operations with Provider example
import 'package:demo_project/provider/home_provider.dart';
import 'package:firebase_core/firebase_core.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp(
options: const FirebaseOptions(
apiKey: "", // add your secrets here!
appId: "",
messagingSenderId: "",
projectId: "",
),
);
runApp(
MultiProvider(providers: [
ChangeNotifierProvider(
create: (_) => HomeProvider(),
),
], child: const MyApp()),
);
}
class MyApp extends StatefulWidget {
const MyApp({super.key});
@override
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
@override
Widget build(BuildContext context) {
return const MaterialApp(
home: Homepage(),
);
}
}
class Homepage extends StatelessWidget {
const Homepage({super.key});
@override
Widget build(BuildContext context) {
return Consumer<HomeProvider>(builder: (context, homeProvider, _) {
return Scaffold(
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(homeProvider.data),
Padding(
padding: const EdgeInsets.all(8.0),
child: TextField(
controller: homeProvider.dataController,
),
),
ElevatedButton(
onPressed: () {
homeProvider.createData();
},
child: const Text("Create"),
),
ElevatedButton(
onPressed: () {
homeProvider.readData();
},
child: const Text("Read"),
),
ElevatedButton(
onPressed: () {
homeProvider.updateData();
},
child: const Text("Update"),
),
ElevatedButton(
onPressed: () {
homeProvider.deleteData();
},
child: const Text("Delete"),
),
],
),
),
);
});
}
}
class ReadPage extends StatelessWidget {
const ReadPage({super.key});
@override
Widget build(BuildContext context) {
return StreamBuilder<QuerySnapshot>(
stream: FirebaseFirestore.instance.collection("data").snapshots(),
builder: (context, dataSnapshot) {
if (!dataSnapshot.hasData) {
return CircularProgressIndicator();
}
return Scaffold(
body: ListView.builder(
itemCount: dataSnapshot.data!.docs.length,
itemBuilder: (context, index) {
return ListTile(
title: Text("Dummy"),
);
},
),
);
});
}
}
class ReadPage2 extends StatelessWidget {
const ReadPage2({super.key});
@override
Widget build(BuildContext context) {
return Consumer<HomeProvider>(builder: (context, homeProvider, _) {
return FutureBuilder<List<Map<String, dynamic>>>(
future: homeProvider.readAll(),
builder: (context, dataSnapshot) {
if (!dataSnapshot.hasData) {
return CircularProgressIndicator();
}
return Scaffold(
body: ListView.builder(
itemCount: dataSnapshot.data!.length,
itemBuilder: (context, index) {
return ListTile(
title: Text(dataSnapshot.data![index]["data"]),
);
},
),
);
});
});
}
}
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:flutter/material.dart';
// MVC - Modal (Json Data) View (Screen / Page) Controller (Provider)
class HomeProvider with ChangeNotifier {
String data = "Firestore data appear here";
TextEditingController dataController = TextEditingController();
void createData() async {
await FirebaseFirestore.instance.collection("data").doc("1").set(
{
"data": dataController.text,
},
);
}
void readData() async {
final fbData =
await FirebaseFirestore.instance.collection("data").doc("1").get();
data = fbData.get("data");
print(data);
notifyListeners();
}
void updateData() async {
await FirebaseFirestore.instance.collection("data").doc("1").update(
{
"data": dataController.text,
},
);
readData();
}
void deleteData() async {
await FirebaseFirestore.instance.collection("data").doc("1").delete();
data = "Firestore data appear here";
notifyListeners();
}
Future<List<Map<String, dynamic>>> readAll() async {
List<Map<String, dynamic>> temp = [];
final result = await FirebaseFirestore.instance.collection("data").get();
result.docs.forEach((element) {
temp.add(element.data());
});
print(temp);
return temp;
}
}
name: demo_project
description: "A new Flutter project."
environment:
sdk: '>=3.2.4 <4.0.0'
dependencies:
flutter:
sdk: flutter
firebase_core: any
cloud_firestore: any
provider: any
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment