CRUD Operation:
import 'package:cloud_firestore/cloud_firestore.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
home: MyHome(),
);
}
}
class MyHome extends StatefulWidget {
@override
_MyHomeState createState() => _MyHomeState();
}
class _MyHomeState extends State<MyHome> {
final db = Firestore.instance;
String task;
void showdialog(bool isUpdate, DocumentSnapshot ds) {
GlobalKey<FormState> formkey = GlobalKey<FormState>();
showDialog(
context: context,
builder: (context) {
return AlertDialog(
backgroundColor: Colors.lightGreen.shade50,
title: isUpdate ? Text("Update Data") : Text("Add Data"),
content: Form(
key: formkey,
autovalidate: true,
child: TextFormField(
autofocus: true,
decoration: InputDecoration(
border: OutlineInputBorder(),
labelText: "Data",
),
validator: (_val) {
if (_val.isEmpty) {
return "Can't Be Empty";
} else {
return null;
}
},
onChanged: (_val) {
task = _val;
},
),
),
actions: <Widget>[
RaisedButton(
color: Colors.red,
onPressed: () {
if (isUpdate) {
db
.collection("tasks")
.document(ds.documentID)
.updateData({"task": task, "time": DateTime.now()});
} else {
db
.collection("tasks")
.add({"task": task, "time": DateTime.now()});
}
Navigator.pop(context);
},
child: Text("Add"),
),
],
);
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("CRUD Operation"),
),
backgroundColor: Colors.yellow.shade50,
floatingActionButton: FloatingActionButton(
onPressed: () => showdialog(false, null),
child: Icon(Icons.add),
),
body: StreamBuilder<QuerySnapshot>(
stream: db.collection("tasks").orderBy("time").snapshots(),
builder: (context, snapshot) {
if (snapshot.hasData) {
return ListView.builder(
itemCount: snapshot.data.documents.length,
itemBuilder: (context, index) {
DocumentSnapshot ds = snapshot.data.documents[index];
return Container(
child: ListTile(
title: Text(
ds["task"],
style: TextStyle(
fontSize: 22,
),
),
////delete
trailing: IconButton(
icon: Icon(
Icons.delete,
color: Colors.red.shade700,
),
onPressed: () {
db.collection("tasks").document(ds.documentID).delete();
},
),
// onLongPress: () {
// db.collection("tasks").document(ds.documentID).delete();
// },
/////update
leading: IconButton(
icon: Icon(
Icons.edit,
color: Colors.green.shade900,
),
onPressed: () {
showdialog(true, ds);
},
),
// onTap: () {
// showdialog(true, ds);
// },
),
);
},
);
} else if (snapshot.hasError) {
return CircularProgressIndicator();
} else {
return CircularProgressIndicator();
}
},
),
);
}
}
0 Comments