import 'package:flutter/material.dart'; import 'package:freekake/components/buildcard_info.dart'; import 'package:freekake/components/card_list.dart'; import 'package:freekake/components/collection_container%20copy.dart'; import 'package:freekake/components/main_menu.dart'; import 'package:freekake/components/topbar_container.dart'; import 'package:freekake/screen/pustaka/pustaka_detail_screen.dart'; import 'package:freekake/helpers/color_helper.dart'; class ListEducation extends StatefulWidget { const ListEducation({super.key}); @override State createState() => _ListEducationState(); } class _ListEducationState extends State { TextEditingController searchController = TextEditingController(); List allItems = [ "Matematika", "Fisika", "Kimia", "Biologi", "Sejarah", "Geografi", ]; List filteredItems = []; @override void initState() { super.initState(); filteredItems = List.from(allItems); } void filterSearch(String query) { setState(() { filteredItems = allItems .where((item) => item.toLowerCase().contains(query.toLowerCase())) .toList(); }); } @override Widget build(BuildContext context) { String _searchQuery = ""; final List> _collections = [ { "label": "Kesehatan", "image": "assets/icons/healthy.svg", "color": "#cdd0ee", "category": "kesehatan", }, { "label": "Gizi", "image": "assets/icons/Nutrition.svg", "color": "#e8e29a", "category": "gizi", }, { "label": "Pendidikan", "image": "assets/icons/Education.svg", "color": "#efd8c6", "category": "pendidikan", }, { "label": "Keselamatan", "image": "assets/icons/Safety.svg", "color": "#cef1da", "category": "keselamatan", }, ]; List> filteredCollections = _collections .where( (item) => item["label"]!.toLowerCase().contains( _searchQuery.toLowerCase(), ), ) .toList(); return Scaffold( appBar: AppBar( backgroundColor: Color.fromARGB(225, 79, 76, 182), leading: IconButton( icon: Icon(Icons.arrow_back), onPressed: () => Navigator.of(context).pop(false), ), actions: [], ), backgroundColor: const Color.fromARGB(255, 255, 255, 255), body: Column( children: [ // Header Section Container( width: MediaQuery.of(context).size.width, height: 150, decoration: BoxDecoration( color: const Color.fromARGB(225, 79, 76, 182), borderRadius: BorderRadius.only( bottomLeft: Radius.circular(25), bottomRight: Radius.circular(25), ), ), child: Column( children: [ Padding( padding: const EdgeInsets.symmetric( horizontal: 20, vertical: 6, ), child: Container( height: 47, decoration: BoxDecoration( borderRadius: BorderRadius.circular(20), color: Colors.grey.shade200, ), padding: const EdgeInsets.symmetric(horizontal: 10), child: Row( children: [ const Icon( Icons.search, color: Color.fromARGB(137, 180, 172, 172), size: 18, ), const SizedBox(width: 8), Expanded( child: TextField( controller: searchController, onChanged: filterSearch, // Memanggil filter saat mengetik style: const TextStyle( color: Colors.black, fontSize: 14, ), decoration: const InputDecoration( border: InputBorder.none, hintText: 'Cari pelajaran...', hintStyle: TextStyle(color: Colors.black54), ), ), ), if (searchController.text.isNotEmpty) IconButton( icon: const Icon( Icons.close, color: Colors.black54, ), onPressed: () { searchController.clear(); filterSearch(''); }, ), ], ), ), ), Row( crossAxisAlignment: CrossAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: filteredCollections.map((item) { return CollectionContainer( label: item["label"]!, imageSvg: item["image"]!, iconw: 20, iconh: 20, width: 70, height: 70, textColor: Colors.black, lblSize: 10, colorContiner: ColorHelper.hexToColor(item["color"]), onTapAc: () => { searchController.clear(), filterSearch(item["category"]), }, ); }).toList(), ), ], ), ), // Search Bar // Padding( // padding: const EdgeInsets.symmetric(horizontal: 20, vertical: 10), // child: Container( // height: 47, // decoration: BoxDecoration( // borderRadius: BorderRadius.circular(20), // color: Colors.grey.shade200, // ), // padding: const EdgeInsets.symmetric(horizontal: 10), // child: Row( // children: [ // const Icon( // Icons.search, // color: Color.fromARGB(137, 180, 172, 172), // size: 18, // ), // const SizedBox(width: 8), // Expanded( // child: TextField( // controller: searchController, // onChanged: filterSearch, // Memanggil filter saat mengetik // style: const TextStyle(color: Colors.black, fontSize: 14), // decoration: const InputDecoration( // border: InputBorder.none, // hintText: 'Cari pelajaran...', // hintStyle: TextStyle(color: Colors.black54), // ), // ), // ), // if (searchController.text.isNotEmpty) // IconButton( // icon: const Icon(Icons.close, color: Colors.black54), // onPressed: () { // searchController.clear(); // filterSearch(''); // }, // ), // ], // ), // ), // ), // Collection Items dengan Filter SizedBox(height: 20), Expanded( child: Container( decoration: BoxDecoration( color: const Color.fromARGB(224, 145, 145, 155), borderRadius: BorderRadius.only( topLeft: Radius.circular(25), topRight: Radius.circular(25), ), ), child: Column( children: [ SizedBox(height: 5), Padding( padding: EdgeInsets.symmetric( horizontal: MediaQuery.of(context).size.width / 4, ), child: Divider( color: const Color.fromARGB(255, 155, 147, 147), height: 20, ), ), Expanded( child: Padding( padding: const EdgeInsets.symmetric( horizontal: 10, // vertical: 10, ), child: filteredItems.isEmpty ? const Center( child: Text( "Tidak ada hasil", style: TextStyle( fontSize: 16, color: Colors.black54, ), ), ) : Padding( padding: EdgeInsets.only( top: 20.0, left: 20, right: 20, ), child: Container( decoration: BoxDecoration( borderRadius: BorderRadius.only( topLeft: Radius.circular(20), topRight: Radius.circular(20), ), color: const Color.fromARGB( 255, 222, 181, 133, ), ), child: Padding( padding: EdgeInsets.only( top: 12, right: 20, left: 20, ), child: GridView.builder( gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount( crossAxisCount: 1, // 2 Kolom crossAxisSpacing: 10, mainAxisSpacing: 10, childAspectRatio: 2.5, ), itemCount: filteredItems.length, itemBuilder: (context, index) { return GestureDetector( child: CardList(), onTap: () { Navigator.push( context, MaterialPageRoute( builder: ( context, ) => ListDetailScreen( title: filteredItems[index], imagePath: filteredItems[index], paragraphs: [ """

Enter the main heading, usually the same as the title.

Be bold in stating your key points. Put them in a list:

  • The first item in your list
  • The second item; italicize key words

Improve your image by including an image.

A Great HTML Resource

Add a link to your favorite Web site.


Finally, link to another page in your own Web site.

© Wiley Publishing, 2011

""", ], ), ), ); }, ); }, ), ), ), ), ), ), ], ), ), ), // Bottom Navigation // MainMenu(), ], ), ); } }