Last active
April 12, 2024 18:02
-
-
Save princesanjivy/1e39d0ca4642d3d17700bedede933c04 to your computer and use it in GitHub Desktop.
Flutter Firebase CRUD operations with Provider example
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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"]), | |
); | |
}, | |
), | |
); | |
}); | |
}); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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; | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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