Add following dependency in pubspec.yaml file:
firebase_database: ^6.1.2
Create a project in Firebase Console
Add Package Name
Apply Following Plugin in android/app/build.gradle file:
Add Classpath in android/build.gradle file:
firebase.dart
import 'package:firebase_database/firebase_database.dart'; import 'package:firebase_database/ui/firebase_animated_list.dart'; import 'package:flutter/material.dart'; void main() { runApp(MaterialApp( title: "Firebase CRUD Tutorial", home: MyHomeWidget(), )); } class MyHomeWidget extends StatefulWidget { Container mycontainer = Container(); @override _MyHomeWidgetState createState() => _MyHomeWidgetState(); } class _MyHomeWidgetState extends State<MyHomeWidget> { final databaseReference = FirebaseDatabase.instance.reference(); final name = TextEditingController(); final email = TextEditingController(); final mobile = TextEditingController(); final _formKey = GlobalKey<FormState>(); String key = ""; @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text("Firebase CRUD"), ), body: SingleChildScrollView( child: Form( key: _formKey, child: Container( child: Column( children: [ Container( margin: EdgeInsets.only(left: 20, right: 20, top: 20), child: TextFormField( controller: name, //onChanged: (value) => name.text=value, validator: (value) => (value.isEmpty) ? "Please enter name" : null, decoration: InputDecoration( prefixIcon: Icon(Icons.drive_file_rename_outline), labelText: "Name Here", border: OutlineInputBorder( gapPadding: 2, ), ), ), ), Container( margin: EdgeInsets.only(left: 20, right: 20, top: 20), child: TextFormField( controller: email, /*onChanged: (value) { setState(() { email.text = value; }); },*/ validator: (value) => (value.isEmpty) ? "Please enter email" : null, decoration: InputDecoration( prefixIcon: Icon(Icons.email), labelText: "Email Here", border: OutlineInputBorder( gapPadding: 2, ), ), ), ), Container( margin: EdgeInsets.only(left: 20, right: 20, top: 20), child: TextFormField( controller: mobile, /*onChanged: (value) { setState(() { mobile.text = value; }); },*/ validator: (value) => (value.isEmpty) ? "Please enter mobile" : null, decoration: InputDecoration( prefixIcon: Icon(Icons.call), labelText: "Mobile Here", border: OutlineInputBorder( gapPadding: 2, ), ), ), ), SizedBox( height: 20, ), Container( margin: EdgeInsets.only(left: 20, right: 20, top: 20), width: MediaQuery.of(context).size.width, child: ElevatedButton( child: Text("Add Me"), onPressed: () { if (_formKey.currentState.validate()) { insert(Student( name: name.text, email: email.text, mobile: mobile.text, key: "")); _formKey.currentState.reset(); } }, ), ), Container( margin: EdgeInsets.only( left: 20, right: 20, ), width: MediaQuery.of(context).size.width, child: ElevatedButton( child: Text("Fetch All"), onPressed: () { fetchAllInWidget().then((value) { print(value); widget.mycontainer = value; }); }, ), ), Container( margin: EdgeInsets.only( left: 20, right: 20, ), width: MediaQuery.of(context).size.width, child: ElevatedButton( child: Text("Update"), onPressed: () { setState(() { databaseReference .child("student") .child(key) .update(Student( name: name.text, email: email.text, mobile: mobile.text, key: key).toMap()).then((value) => { print("update successfully " + key), }); }); }, ), ), Container( child: widget.mycontainer,), ], ), ), ), ), ); } void insert(Student student) { setState(() { var databaseReference1 = databaseReference. child("student").push(); student.key = databaseReference1.key; databaseReference1.set(student.toMap()) .whenComplete( () => () { print("Successfully Added"); }, ); }); } void fetchAllDatabase() { databaseReference.child("student"). onValue.listen((event) { var snap = event.snapshot; setState(() { print(snap.value); }); }); } Future<List<Student>> fetchAll() async { List<Student> students = []; databaseReference.child("student"). once().then((value) => { for (var val in value.value.entries) { students.add( Student( name: val.value["name"], email: val.value["email"], mobile: val.value["mobile"], key: val.key, ), ), } }); print("fetching completed..."); //fetchAllDatabase(); return students; } Future<Widget> fetchAllInWidget() async { return Container( child: FirebaseAnimatedList( shrinkWrap: true, padding: new EdgeInsets.all(8.0), reverse: false, //duration: Duration(seconds: 5), query: databaseReference.child("student").orderByValue(), itemBuilder: (context, snapshot, animation, index) { return Card( child: ListTile( title: Text(snapshot.value["name"]), subtitle: Text(snapshot.value["email"]), trailing: Container( child: Row( mainAxisSize: MainAxisSize.min, mainAxisAlignment: MainAxisAlignment.start, children: [ IconButton( icon: Icon( Icons.edit, ), onPressed: () { setState(() { key = snapshot.key; name.text = snapshot.value["name"].toString(); email.text = snapshot.value["email"].toString(); mobile.text = snapshot.value["mobile"].toString(); print("Hello " + key); }); }, ), IconButton( icon: Icon( Icons.delete, ), onPressed: () { setState(() { databaseReference .child("student") .child(snapshot.key) .remove() .then((value) => { print("deleted.."), }); }); }, ), ], ), ), ), ); }), ); } Future delete(Student student) async { print(student.name); print(student.key); await databaseReference.child(student.key).remove(); } } class Student { String name, email, mobile, key; Student({this.name, this.email, this.mobile, this.key}); Map<String, dynamic> toMap() { return { 'name': name, 'email': email, "mobile": mobile, "key": key, }; } Student.fromMap(dynamic obj) { this.name = obj['name']; this.email = obj['email']; this.mobile = obj['mobile']; this.key = obj["key"]; } }
No comments:
Post a Comment