import 'package:flutter/material.dart'; import 'package:furibase/components/bottom_navbar.dart'; import 'package:furibase/components/buildcard_info.dart'; import 'package:furibase/components/collection_container.dart'; import 'package:furibase/components/main_menu.dart'; import 'package:furibase/components/scan_button.dart'; import 'package:furibase/components/topbar_container.dart'; import 'package:furibase/screen/pustaka/list_education.dart'; class PustakaScreen extends StatefulWidget { const PustakaScreen({super.key}); @override State createState() => _PustakaScreenState(); } class _PustakaScreenState extends State { final PageController _pageController = PageController(); int _selectedIndex = 0; final TextEditingController _searchController = TextEditingController(); String _searchQuery = ""; final List> _collections = [ {"label": "Kesehatan", "image": "icons/healthy.svg"}, {"label": "Gizi", "image": "icons/Nutrition.svg"}, {"label": "Pendidikan", "image": "icons/Education.svg"}, {"label": "Keselamatan", "image": "icons/Safety.svg"}, ]; void _onMenuTapped(int index) { setState(() { _selectedIndex = index; }); _pageController.animateToPage( index, duration: const Duration(milliseconds: 300), curve: Curves.easeInOut, ); } @override Widget build(BuildContext context) { List> filteredCollections = _collections .where( (item) => item["label"]!.toLowerCase().contains( _searchQuery.toLowerCase(), ), ) .toList(); return Scaffold( backgroundColor: const Color.fromARGB(255, 166, 161, 161), body: Stack( children: [ //Top Bar Positioned( top: 0, left: 0, right: 0, child: SizedBox(height: 130, child: TopbarContainer()), ), Column( children: [ // Header Section Container( padding: const EdgeInsets.all(10), color: const Color.fromARGB( 250, 255, 255, 255, ).withOpacity(0.0), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ BuildcardInfo( icon: Icons.person, text: 'User01', extraIcon: Icons.emoji_events, extraText: "5000", width: 180, ), BuildcardInfo( icon: Icons.monetization_on, text: "1.300", width: 90, ), ], ), ), // // Date Display // Padding( // padding: const EdgeInsets.symmetric(vertical: 10), // child: Text( // DateTime.now().toString(), // style: const TextStyle(color: Colors.white), // ), // ), // Search Bar Padding( padding: const EdgeInsets.symmetric( horizontal: 40, vertical: 10, ), child: Container( height: 47, decoration: BoxDecoration( borderRadius: BorderRadius.circular(20), color: const Color.fromARGB(50, 237, 227, 227), ), padding: const EdgeInsets.symmetric(horizontal: 10), child: Row( children: [ const Icon(Icons.search, color: Colors.black54, size: 18), const SizedBox(width: 8), Expanded( child: TextField( controller: _searchController, onChanged: (value) { setState(() { _searchQuery = value; }); }, style: const TextStyle( color: Colors.black, fontSize: 12, ), decoration: const InputDecoration( border: InputBorder.none, hintText: 'Search...', hintStyle: TextStyle(color: Colors.grey), ), ), ), ], ), ), ), // Collection Items Expanded( child: Padding( padding: const EdgeInsets.symmetric( horizontal: 106, vertical: 20, ), child: GridView.count( crossAxisCount: 2, crossAxisSpacing: 20, mainAxisSpacing: 20, children: filteredCollections.map((item) { return CollectionContainer( label: item["label"]!, imageSvg: item["image"]!, width: 100, height: 100, textColor: Colors.black, onTapAc: () => { Navigator.push( context, MaterialPageRoute( builder: (context) => ListEducation(), ), ), }, ); }).toList(), ), ), ), SizedBox( child: Padding( padding: const EdgeInsets.symmetric( horizontal: 40, vertical: 1, ), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text("List Topic"), Divider(color: Colors.amber), ], ), ), ), // Horizontal Scroll List Padding( padding: EdgeInsets.symmetric(horizontal: 40, vertical: 10), child: SizedBox( width: MediaQuery.of(context).size.width, height: 100, child: SingleChildScrollView( scrollDirection: Axis.horizontal, child: Row( children: List.generate( 10, (index) => Padding( padding: const EdgeInsets.symmetric(horizontal: 8.0), child: Card( shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(10.0), ), elevation: 5, color: const Color.fromARGB(120, 255, 255, 255), // color: const Color.fromARGB(140, 255, 255, 255), // shape: RoundedRectangleBorder( // borderRadius: BorderRadius.circular(15), // ), child: GestureDetector( onTap: () => { Navigator.push( context, MaterialPageRoute( builder: (context) => ListEducation(), ), ), }, child: Container( width: 80, padding: const EdgeInsets.all(10), child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ Icon( Icons.book, size: 50, color: Colors.blueAccent, ), Text( 'Topic ' + (index + 1).toString(), style: const TextStyle( fontWeight: FontWeight.bold, ), ), ], ), ), ), ), ), ), ), ), ), ), // Bottom Navigation MainMenu(), ], ), // BG MEnu Stack( children: [ Positioned( bottom: 0, left: 0, right: 0, child: SizedBox(height: 85, child: BottomNavbar()), ), Positioned(bottom: 0, left: 0, right: 0, child: MainMenu()), ], ), Positioned( bottom: 1, left: MediaQuery.of(context).size.width / 2 - 48, child: Transform.translate( offset: Offset(0, -20), child: ScanButton(), ), ), ], ), ); } }