Advertisement
Vassa007

Cobachoic

Sep 5th, 2023
1,437
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Dart 4.87 KB | None | 0 0
  1. import 'dart:convert';
  2. import 'package:flutter/material.dart';
  3.  
  4. void main() {
  5.   runApp(MyApp());
  6. }
  7.  
  8. class MyApp extends StatefulWidget {
  9.   @override
  10.   _MyAppState createState() => _MyAppState();
  11. }
  12.  
  13. class _MyAppState extends State<MyApp> {
  14.   List<Peserta> pesertaList = [
  15.     Peserta("Peserta 1", "hadir", "sudah"),
  16.     Peserta("Peserta 2", "hadir", "belum"),
  17.     Peserta("Peserta 3", "ijin", "sudah"),
  18.     Peserta("Peserta 4", "hadir", "sudah"),
  19.     Peserta("Peserta 5", "ijin", "belum"),
  20.   ];
  21.  
  22.   String selectedKehadiran = "hadir";
  23.   String selectedStatus = "sudah";
  24.  
  25.   List<Peserta> filteredList = [];
  26.  
  27.   @override
  28.   void initState() {
  29.     super.initState();
  30.     // Inisialisasi filteredList dengan semua peserta saat aplikasi pertama kali dimulai.
  31.     filteredList = pesertaList;
  32.   }
  33.  
  34.   // Fungsi untuk memfilter peserta berdasarkan kedua kriteria
  35.   void filterPeserta() {
  36.     setState(() {
  37.       filteredList = pesertaList.where((peserta) {
  38.         if ((selectedKehadiran == "semua" || peserta.kehadiran == selectedKehadiran) &&
  39.             (selectedStatus == "semua" || peserta.status == selectedStatus)) {
  40.           return true;
  41.         }
  42.         return false;
  43.       }).toList();
  44.     });
  45.   }
  46.  
  47.   @override
  48.   Widget build(BuildContext context) {
  49.     return MaterialApp(
  50.       home: Scaffold(
  51.         appBar: AppBar(
  52.           title: Text('Filter Peserta'),
  53.         ),
  54.         body: Column(
  55.           children: [
  56.             Row(
  57.               children: [
  58.                 FutureBuilder(
  59.                   // Menggantilah dengan pemanggilan metode untuk mendapatkan JSON yang sesuai dengan pilihan ChoiceChip.
  60.                   future: loadChoiceKehadiran(),
  61.                   builder: (context, snapshot) {
  62.                     if (snapshot.hasData) {
  63.                       List<String> choices = json.decode(snapshot.data.toString());
  64.  
  65.                       return Wrap(
  66.                         children: choices.map((choice) {
  67.                           return ChoiceChip(
  68.                             label: Text(choice),
  69.                             selected: selectedKehadiran == choice,
  70.                             onSelected: (selected) {
  71.                               setState(() {
  72.                                 selectedKehadiran = selected ? choice : 'semua';
  73.                                 filterPeserta();
  74.                               });
  75.                             },
  76.                           );
  77.                         }).toList(),
  78.                       );
  79.                     } else {
  80.                       return CircularProgressIndicator();
  81.                     }
  82.                   },
  83.                 ),
  84.                 FutureBuilder(
  85.                   // Menggantilah dengan pemanggilan metode untuk mendapatkan JSON yang sesuai dengan pilihan ChoiceChip.
  86.                   future: loadChoiceStatus(),
  87.                   builder: (context, snapshot) {
  88.                     if (snapshot.hasData) {
  89.                       List<String> choices = json.decode(snapshot.data.toString());
  90.  
  91.                       return Wrap(
  92.                         children: choices.map((choice) {
  93.                           return ChoiceChip(
  94.                             label: Text(choice),
  95.                             selected: selectedStatus == choice,
  96.                             onSelected: (selected) {
  97.                               setState(() {
  98.                                 selectedStatus = selected ? choice : 'semua';
  99.                                 filterPeserta();
  100.                               });
  101.                             },
  102.                           );
  103.                         }).toList(),
  104.                       );
  105.                     } else {
  106.                       return CircularProgressIndicator();
  107.                     }
  108.                   },
  109.                 ),
  110.               ],
  111.             ),
  112.             Expanded(
  113.               child: ListView.builder(
  114.                 itemCount: filteredList.length,
  115.                 itemBuilder: (context, index) {
  116.                   return ListTile(
  117.                     title: Text(filteredList[index].nama),
  118.                   );
  119.                 },
  120.               ),
  121.             ),
  122.           ],
  123.         ),
  124.       ),
  125.     );
  126.   }
  127.  
  128.   // Metode untuk mendapatkan JSON pilihan Choice Kehadiran.
  129.   Future<String> loadChoiceKehadiran() async {
  130.     // Simulasi pemanggilan data JSON dari sumber eksternal.
  131.     await Future.delayed(Duration(seconds: 1));
  132.     return '["semua","hadir","ijin"]';
  133.   }
  134.  
  135.   // Metode untuk mendapatkan JSON pilihan Choice Status.
  136.   Future<String> loadChoiceStatus() async {
  137.     // Simulasi pemanggilan data JSON dari sumber eksternal.
  138.     await Future.delayed(Duration(seconds: 1));
  139.     return '["semua","sudah","belum"]';
  140.   }
  141. }
  142.  
  143. class Peserta {
  144.   final String nama;
  145.   final String kehadiran;
  146.   final String status;
  147.  
  148.   Peserta(this.nama, this.kehadiran, this.status);
  149. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement