// ignore_for_file: prefer_const_constructors, non_constant_identifier_names import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:flutter/material.dart'; const Color aColor = Color.fromARGB(219, 58, 168, 50); const Color cColor = Color.fromARGB(246, 255, 255, 246); const Color bColor = Color.fromARGB(153, 28, 240, 187); class ItemAlist extends StatefulWidget { ItemAlist({super.key}); @override State createState() => _ItemAlistState(); } class _ItemAlistState extends State { final _tcAsset_Description = TextEditingController(); final _tcAsset_Number = TextEditingController(); final _tcAsset_Email = TextEditingController(); final _tcAsset_Status = TextEditingController(); @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( leadingWidth: 140, backgroundColor: bColor, title: const Text('Item list'), actions: [ IconButton( onPressed: Adddata, icon: const Icon(Icons.add), ) ], ), body: Container( constraints: BoxConstraints.expand(), decoration: const BoxDecoration( image: DecorationImage( image: NetworkImage( "https://i.pinimg.com/originals/77/7b/07/777b07a784b619eb9840734261133cbd.jpg"), fit: BoxFit.cover), ), child: StreamBuilder( stream: FirebaseFirestore.instance.collection("products").snapshots(), builder: (context, AsyncSnapshot snapshot) { if (!snapshot.hasData) { return Center( child: CircularProgressIndicator(), ); } else { return ListView( children: snapshot.data!.docs.map((document) { return Padding( padding: const EdgeInsets.only(top: 16.0,left: 16.0, right: 16.0), child: Container( decoration: BoxDecoration( color: cColor, border: Border.all(color: aColor, width: 1), borderRadius: BorderRadius.circular(12), ), child: ListTile( leading: IconButton( onPressed: () { editData(document.id); _tcAsset_Description.text = document['Asset_Description']; _tcAsset_Number.text = document['Asset_Number'].toString(); _tcAsset_Email.text = document['Email'].toString(); _tcAsset_Status.text = document['Status'].toString(); }, icon: const Icon( Icons.edit, size: 20, ), ), title: Text( document["Asset_Description"], style: TextStyle(fontSize: 13), ), subtitle: Text( document["Asset_Number"] + '\n' + document["Email"] + '\n' + 'Status: ' + document['Status'], style: TextStyle(fontSize: 10), ), trailing: IconButton( onPressed: () { deleteData(document.id); }, icon: const Icon( Icons.delete, size: 20, ), ), ), ), ); }).toList(), ); } }, ), ), ); } Future ReadData() async { context: context; builder: (context) => StreamBuilder( stream: FirebaseFirestore.instance.collection("products").snapshots(), builder: (context, AsyncSnapshot snapshot) { if (!snapshot.hasData) { return Center( child: CircularProgressIndicator(), ); } else { return ListView( children: snapshot.data!.docs.map((document) { return Container( child: Column( children: [ SizedBox( height: 20, ), Row( children: [ IconButton( onPressed: () { Navigator.pop(context); }, icon: Icon(Icons.arrow_back), iconSize: 30, ), SizedBox( width: 60, ), Text( 'Item list', style: Theme.of(context) .textTheme .headlineMedium! .copyWith( fontWeight: FontWeight.bold, color: Colors.black), ), ], ), Row( children: [ Spacer(), InkWell( child: Container( height: 71, width: 296, decoration: BoxDecoration( color: aColor, border: Border.all( width: 1, color: aColor, ), borderRadius: BorderRadius.circular(12), ), child: Row( // ignore: prefer_const_literals_to_create_immutables children: [ SizedBox( width: 20, ), Icon( Icons.receipt_long_outlined, size: 50, ), Spacer(), Text( 'Add item', style: TextStyle( fontSize: 20, fontWeight: FontWeight.w900), ), Spacer(), ], )), onTap: () { Adddata(); }, ), Spacer(), ], ), ], ), ); }).toList(), ); } }, ); } Future Adddata() async { String? answer = await showDialog( context: context, builder: (context) => AlertDialog( title: Text("Add Item"), content: Column( children: [ TextField( controller: _tcAsset_Description, decoration: const InputDecoration(hintText: 'Asset-Description'), ), TextField( controller: _tcAsset_Number, decoration: const InputDecoration(hintText: 'Asset-Number'), ), TextField( controller: _tcAsset_Email, decoration: const InputDecoration(hintText: 'Email'), ), TextField( controller: _tcAsset_Status, decoration: const InputDecoration(hintText: 'Status'), ), ], ), actions: [ TextButton( onPressed: () { Navigator.of(context).pop(); }, child: const Text( 'Cancel', style: TextStyle(color: Colors.red), ), ), TextButton( onPressed: () { Navigator.of(context).pop('OK'); }, child: const Text('OK'), ), ], ), ); if (answer == 'OK') { String Descrip = _tcAsset_Description.text; String Num = _tcAsset_Number.text; String Email = _tcAsset_Email.text; String Status = _tcAsset_Status.text; var data = { 'Asset_Description': Descrip, 'Asset_Number': Num, 'Email': Email, 'Status': Status }; FirebaseFirestore.instance.collection('products').add(data).then( (value) => print('Adding done!'), onError: (e) => print('Error $e'), ); } } Future editData(String docId) async { // show alert dialog String? answer = await showDialog( context: context, builder: (context) { return AlertDialog( title: const Text('Edit'), content: Column( mainAxisSize: MainAxisSize.min, children: [ TextField( controller: _tcAsset_Description, decoration: const InputDecoration(hintText: 'Asset_Description'), ), TextField( controller: _tcAsset_Number, decoration: const InputDecoration(hintText: 'Asset_Number'), ), TextField( controller: _tcAsset_Email, decoration: const InputDecoration(hintText: 'Email'), ), TextField( controller: _tcAsset_Status, decoration: const InputDecoration(hintText: 'Status'), ), ], ), actions: [ TextButton( onPressed: () { Navigator.of(context).pop(); }, child: const Text( 'Cancel', style: TextStyle(color: Colors.red), ), ), TextButton( onPressed: () { Navigator.of(context).pop('OK'); }, child: const Text('OK'), ), ], ); }, ); // edit data in db if (answer == 'OK') { String Description = _tcAsset_Description.text; String Number = _tcAsset_Number.text; String Email = _tcAsset_Email.text; String Status = _tcAsset_Status.text; var data = { 'Asset_Description': Description, 'Asset_Number': Number, 'Email': Email, 'Status': Status }; // print(name); // print(age.toString()); FirebaseFirestore.instance .collection('products') .doc(docId) .update(data) .then( (value) => print('Updating done!'), onError: (e) => print('Error $e'), ); } } Future deleteData(String docId) async { // show alert dialog String? answer = await showDialog( context: context, builder: (context) { return AlertDialog( title: const Text('Sure to delete data?'), actions: [ TextButton( onPressed: () { Navigator.of(context).pop(); }, child: const Text( 'Cancel', style: TextStyle(color: Colors.red), ), ), TextButton( onPressed: () { Navigator.of(context).pop('OK'); }, child: const Text('OK'), ), ], ); }, ); // delete the data if (answer == 'OK') { FirebaseFirestore.instance .collection('products') .doc(docId) .delete() .then( (value) => print('Document deleted!'), onError: (e) => print('Error $e'), ); } } }