Advertisement
yudiwbs

Untitled

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