Advertisement
yudiwbs

Untitled

Apr 9th, 2023
1,335
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Dart 2.63 KB | None | 0 0
  1. import 'package:flutter_bloc/flutter_bloc.dart';
  2. import 'package:flutter/material.dart';
  3. import 'package:http/http.dart' as http;
  4. import 'dart:convert';
  5. import 'dart:developer' as developer;
  6.  
  7. class ActivityModel {
  8.   String aktivitas;
  9.   String jenis;
  10.   ActivityModel({required this.aktivitas, required this.jenis}); //constructor
  11. }
  12.  
  13. class ActivityCubit extends Cubit<ActivityModel> {
  14.   String url = "https://www.boredapi.com/api/activity";
  15.   ActivityCubit() : super(ActivityModel(aktivitas: "", jenis: ""));
  16.  
  17.   //map dari json ke atribut
  18.   void setFromJson(Map<String, dynamic> json) {
  19.     String aktivitas = json['activity'];
  20.     String jenis = json['type'];
  21.     emit(ActivityModel(aktivitas: aktivitas, jenis: jenis));
  22.   }
  23.  
  24.   void fetchData() async {
  25.     final response = await http.get(Uri.parse(url));
  26.     if (response.statusCode == 200) {
  27.       setFromJson(jsonDecode(response.body));
  28.     } else {
  29.       throw Exception('Gagal load');
  30.     }
  31.   }
  32. }
  33.  
  34. void main() => runApp(const MyApp());
  35.  
  36. class MyApp extends StatelessWidget {
  37.   const MyApp({Key? key}) : super(key: key);
  38.  
  39.   @override
  40.   Widget build(BuildContext context) {
  41.     return MaterialApp(
  42.       home: BlocProvider(
  43.         create: (_) => ActivityCubit(),
  44.         child: const HalamanUtama(),
  45.       ),
  46.     );
  47.   }
  48. }
  49.  
  50. class HalamanUtama extends StatelessWidget {
  51.   const HalamanUtama({Key? key}) : super(key: key);
  52.   @override
  53.   Widget build(Object context) {
  54.     return MaterialApp(
  55.         home: Scaffold(
  56.       body: Center(
  57.         child: Column(mainAxisAlignment: MainAxisAlignment.center, children: [
  58.           BlocBuilder<ActivityCubit, ActivityModel>(
  59.             buildWhen: (previousState, state) {
  60.               developer.log("${previousState.aktivitas} -> ${state.aktivitas}",
  61.                   name: 'logyudi');
  62.               return true;
  63.             },
  64.             builder: (context, aktivitas) {
  65.               return Center(
  66.                   child: Column(
  67.                       mainAxisAlignment: MainAxisAlignment.center,
  68.                       children: [
  69.                     Padding(
  70.                       padding: const EdgeInsets.only(bottom: 20),
  71.                       child: ElevatedButton(
  72.                         onPressed: () {
  73.                           context.read<ActivityCubit>().fetchData();
  74.                         },
  75.                         child: const Text("Saya bosan ..."),
  76.                       ),
  77.                     ),
  78.                     Text(aktivitas.aktivitas),
  79.                     Text("Jenis: ${aktivitas.jenis}")
  80.                   ]));
  81.             },
  82.           ),
  83.         ]),
  84.       ),
  85.     ));
  86.   }
  87. }
  88.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement