// 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<ItemAlist> createState() => _ItemAlistState();
}
class _ItemAlistState extends State<ItemAlist> {
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<QuerySnapshot> 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<void> ReadData() async {
context:
context;
builder:
(context) => StreamBuilder(
stream: FirebaseFirestore.instance.collection("products").snapshots(),
builder: (context, AsyncSnapshot<QuerySnapshot> 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<void> 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<void> 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<void> 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'),
);
}
}
}