Advertisement
yudiwibisono

jawaban_q3_umkm

May 13th, 2023
1,150
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Dart 6.55 KB | None | 0 0
  1. import 'package:flutter/material.dart';
  2. import 'package:flutter_bloc/flutter_bloc.dart';
  3. import 'package:http/http.dart' as http;
  4. import 'dart:convert';
  5.  
  6. //screen kedua
  7. class ScreenDetil extends StatelessWidget {
  8.   @override
  9.   Widget build(BuildContext context) {
  10.     return Scaffold(
  11.         appBar: AppBar(
  12.           title: const Text('Detil'),
  13.         ),
  14.         body: BlocBuilder<DetilUmkmCubit, DetilUmkmModel>(
  15.             builder: (context, detilUmkm) {
  16.           return Column(children: [
  17.             Text("Nama: ${detilUmkm.nama}"),
  18.             Text("Detil: ${detilUmkm.jenis}"),
  19.             Text("Member Sejak: ${detilUmkm.memberSejak}"),
  20.             Text("Omzet per bulan: ${detilUmkm.omzet}"),
  21.             Text("Lama usaha: ${detilUmkm.lamaUsaha}"),
  22.             Text("Jumlah pinjaman sukses: ${detilUmkm.jumPinjamanSukses}"),
  23.           ]);
  24.         }));
  25.   }
  26. }
  27.  
  28. class DetilUmkmModel {
  29.   String id;
  30.   String jenis;
  31.   String nama;
  32.   String omzet;
  33.   String lamaUsaha;
  34.   String memberSejak;
  35.   String jumPinjamanSukses;
  36.  
  37.   //lama_usaha":"1","member_sejak":"01-01-2019","jumlah_pinjaman_sukses":3}
  38.  
  39.   DetilUmkmModel(
  40.       {required this.id,
  41.       required this.nama,
  42.       required this.jenis,
  43.       required this.omzet,
  44.       required this.jumPinjamanSukses,
  45.       required this.lamaUsaha,
  46.       required this.memberSejak}); //constructor
  47. }
  48.  
  49. class Umkm {
  50.   String id;
  51.   String jenis;
  52.   String nama;
  53.   Umkm({required this.id, required this.nama, required this.jenis});
  54. }
  55.  
  56. class UmkmModel {
  57.   List<Umkm> dataUmkm;
  58.   UmkmModel({required this.dataUmkm}); //constructor
  59. }
  60.  
  61. class DetilUmkmCubit extends Cubit<DetilUmkmModel> {
  62.   //String urlDetil = "http://127.0.0.1:8000/detil_umkm/";
  63.   String urlDetil = "http://178.128.17.76:8000/detil_umkm/";
  64.   DetilUmkmCubit()
  65.       : super(DetilUmkmModel(
  66.             id: '',
  67.             jenis: '',
  68.             nama: '',
  69.             omzet: '',
  70.             jumPinjamanSukses: '',
  71.             lamaUsaha: '',
  72.             memberSejak: ''));
  73.  
  74.   void setFromJson(Map<String, dynamic> json) {
  75.     emit(DetilUmkmModel(
  76.         id: json["id"],
  77.         nama: json["nama"],
  78.         jenis: json["jenis"],
  79.         omzet: json["omzet_bulan"],
  80.         jumPinjamanSukses: json["jumlah_pinjaman_sukses"],
  81.         lamaUsaha: json["lama_usaha"],
  82.         memberSejak: json["member_sejak"]));
  83.   }
  84.  
  85.   void fetchDataDetil(String id) async {
  86.     String urldet = "$urlDetil$id";
  87.     final response = await http.get(Uri.parse(urldet));
  88.     if (response.statusCode == 200) {
  89.       setFromJson(jsonDecode(response.body));
  90.     } else {
  91.       throw Exception('Gagal load');
  92.     }
  93.   }
  94. }
  95.  
  96. class UmkmCubit extends Cubit<UmkmModel> {
  97.   //String url = "http://127.0.0.1:8000/daftar_umkm";
  98.   String url = "http://178.128.17.76:8000/daftar_umkm";
  99.  
  100.   UmkmCubit() : super(UmkmModel(dataUmkm: []));
  101.  
  102.   //map dari json ke atribut
  103.   void setFromJson(Map<String, dynamic> json) {
  104.     var arrData = json["data"];
  105.     List<Umkm> arrOut = [];
  106.     for (var el in arrData) {
  107.       String id = el['id'];
  108.       String jenis = el['jenis'];
  109.       String nama = el['nama'];
  110.       arrOut.add(Umkm(id: id, nama: nama, jenis: jenis));
  111.     }
  112.     emit(UmkmModel(dataUmkm: arrOut));
  113.   }
  114.  
  115.   void setFromJsonDetil(Map<String, dynamic> json) {}
  116.  
  117.   void fetchData() async {
  118.     final response = await http.get(Uri.parse(url));
  119.     if (response.statusCode == 200) {
  120.       setFromJson(jsonDecode(response.body));
  121.     } else {
  122.       throw Exception('Gagal load');
  123.     }
  124.   }
  125. }
  126.  
  127. void main() {
  128.   runApp(const MyApp());
  129. }
  130.  
  131. class MyApp extends StatelessWidget {
  132.   const MyApp({Key? key}) : super(key: key);
  133.  
  134.   @override
  135.   Widget build(BuildContext context) {
  136.     return MaterialApp(
  137.         home: MultiBlocProvider(
  138.       providers: [
  139.         BlocProvider<UmkmCubit>(
  140.           create: (BuildContext context) => UmkmCubit(),
  141.         ),
  142.         BlocProvider<DetilUmkmCubit>(
  143.           create: (BuildContext context) => DetilUmkmCubit(),
  144.         ),
  145.       ],
  146.       child: const HalamanUtama(),
  147.     ));
  148.   }
  149. }
  150.  
  151. class HalamanUtama extends StatelessWidget {
  152.   const HalamanUtama({Key? key}) : super(key: key);
  153.   @override
  154.   Widget build(Object context) {
  155.     return MaterialApp(
  156.         home: Scaffold(
  157.       appBar: AppBar(
  158.         title: const Text(' My App'),
  159.       ),
  160.       body: Center(
  161.         child: BlocBuilder<UmkmCubit, UmkmModel>(
  162.           builder: (context, listUmkm) {
  163.             return Center(
  164.                 child: Column(
  165.                     //mainAxisAlignment: MainAxisAlignment.start,
  166.                     children: [
  167.                   Container(
  168.                       padding: const EdgeInsets.all(10), child: const Text("""
  169. nim1,nama1; nim2,nama2; Saya berjanji tidak akan berbuat curang data atau membantu orang lain berbuat curang""")),
  170.  
  171.                   Container(
  172.                     padding: const EdgeInsets.all(20),
  173.                     child: ElevatedButton(
  174.                       onPressed: () {
  175.                         context.read<UmkmCubit>().fetchData();
  176.                       },
  177.                       child: const Text("Reload Daftar UMKM"),
  178.                     ),
  179.                   ),
  180.                   //Text(listUmkm.dataUmkm[0].nama),
  181.                   Expanded(child: BlocBuilder<DetilUmkmCubit, DetilUmkmModel>(
  182.                       builder: (context, detilUmkm) {
  183.                     return ListView.builder(
  184.                         itemCount: listUmkm.dataUmkm.length, //jumlah baris
  185.                         itemBuilder: (context, index) {
  186.                           return ListTile(
  187.                               onTap: () {
  188.                                 context.read<DetilUmkmCubit>().fetchDataDetil(
  189.                                     listUmkm.dataUmkm[index].id);
  190.                                 Navigator.of(context)
  191.                                     .push(MaterialPageRoute(builder: (context) {
  192.                                   return ScreenDetil();
  193.                                 }));
  194.                               },
  195.                               leading: Image.network(
  196.                                   'https://flutter.github.io/assets-for-api-docs/assets/widgets/owl-2.jpg'),
  197.                               trailing: const Icon(Icons.more_vert),
  198.                               title: Text(listUmkm.dataUmkm[index].nama),
  199.                               subtitle: Text(listUmkm.dataUmkm[index].jenis),
  200.                               tileColor: Colors.white70);
  201.                         });
  202.                   }))
  203.                 ]));
  204.           },
  205.         ),
  206.       ),
  207.     ));
  208.   }
  209. }
  210.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement