Asset-Borrowing-App / lib / Project / HomePage / home_display_screen.dart
home_display_screen.dart
Raw
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart';
import 'package:flutter_application_1/Project/HomePage/product_display.dart';
import 'package:flutter_application_1/Project/HomePage/top_container.dart';

import 'categories_display.dart';

class HomeDisplayScreen extends StatefulWidget {
  const HomeDisplayScreen({Key? key}) : super(key: key);

  @override
  _HomeDisplayScreenState createState() => _HomeDisplayScreenState();
}

class _HomeDisplayScreenState extends State<HomeDisplayScreen>
    with SingleTickerProviderStateMixin {
  late TabController tabController;
  int selectedValue = 0;
  int currentIndex = 0;

  @override
  void initState() {
    super.initState();
    tabController = TabController(length: 2, vsync: this, initialIndex: 0);
  }

  @override
  Widget build(BuildContext context) {
    return StreamBuilder<DocumentSnapshot>(
      stream: FirebaseFirestore.instance
          .collection('users')
          .doc(FirebaseAuth.instance.currentUser!.uid)
          .snapshots(),
      builder: (context, snapshot) {
        if (!snapshot.hasData) {
          return const Center(
            child: CircularProgressIndicator(),
          );
        }

        final data = snapshot.data!;

        return SingleChildScrollView(
          padding: const EdgeInsets.symmetric(vertical: 30.0, horizontal: 30.0),
          child: Column(
            children: [
              TopContainer(
                title: 'Hello ${data.get('firstName')} ${data.get('lastName').substring(0, 1)}.'
                            .length >
                        15
                    ? '${'Hello ${data.get('firstName')} ${data.get('lastName').substring(0, 1)}.'
                            .substring(0, 14)}...'
                    : 'Hello ${data.get('firstName')} ${data.get('lastName').substring(0, 1)}.',
                searchBarTitle: "Search Product",
              ),
              //tap bar
              TabBar(
                controller: tabController,
                indicatorColor: Colors.transparent,
                labelColor: Colors.white,
                unselectedLabelColor: Colors.black,
                indicatorSize: TabBarIndicatorSize.label,
                onTap: (value) {
                  setState(() {
                    selectedValue = value;
                  });
                  tabController.animateTo(value);
                },
                tabs: [
                  Container(
                    width: double.infinity,
                    height: 50,
                    alignment: Alignment.center,
                    decoration: BoxDecoration(
                      borderRadius: BorderRadius.circular(30),
                      color:
                          selectedValue == 0 ? Colors.black : Colors.grey[300],
                      boxShadow: selectedValue == 0
                          ? [
                              BoxShadow(
                                color: Colors.grey.withOpacity(0.3),
                                spreadRadius: 1,
                                blurRadius: 5,
                                offset: const Offset(0, 1),
                              ),
                            ]
                          : null,
                    ),
                    child: const Text(
                      "All Products",
                      textAlign: TextAlign.center,
                    ),
                  ),
                  Container(
                    width: double.infinity,
                    height: 50,
                    alignment: Alignment.center,
                    decoration: BoxDecoration(
                      borderRadius: BorderRadius.circular(30),
                      color:
                          selectedValue == 1 ? Colors.black : Colors.grey[300],
                      boxShadow: selectedValue == 1
                          ? [
                              BoxShadow(
                                color: Colors.grey.withOpacity(0.3),
                                spreadRadius: 1,
                                blurRadius: 5,
                                offset: const Offset(0, 1),
                              ),
                            ]
                          : null,
                    ),
                    child: const Text(
                      "Categories",
                      textAlign: TextAlign.center,
                    ),
                  ),
                ],
              ),
              //tab bar view
              SizedBox(
                height: MediaQuery.of(context).size.height,
                child: TabBarView(
                  physics: const NeverScrollableScrollPhysics(),
                  controller: tabController,
                  children: const [
                    ProductDisplayWidget(),
                    CategoriesDisplay(),
                  ],
                ),
              )
            ],
          ),
        );
      },
    );
  }
}