Asset-Borrowing-App / lib / Project / Admin / Itemlist.dart
Itemlist.dart
Raw
// 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'),
          );
    }
  }
}