Subject Programmer
IF-481: Pemrograman dan Teknologi Integratif Samuel Oliver
Topik Program Studi
HTTP Request Sistem Informasi
Bidang Durasi
- -
Source Code
1 /*Mengimport package*/
2 import 'dart:convert';
3 import 'package:flutter/material.dart';
6 void main() {
8 runApp(MyApp());
9 }
10
14
15 @override
17 return MaterialApp(
19 home: HomePage(),
20 );
21 }
22 }
Page 1 of 21
23
27
28 @override
31 }
32
36
39 /*Membuat sebuah variabel bernama myResponse yang berisi API yang di-
42 http.get(Uri.parse("https://jsonplaceholder.typicode.com/users/3"));
43
46
49 setState(() {
50 body = data.toString();
51 });
52 }
53
54 @override
Page 2 of 21
55 Widget build(BuildContext context) {
56 return Scaffold(
59 floatingActionButton: FloatingActionButton(
60 onPressed: getData,
61 child: Icon(Icons.get_app),
62 ),
64 appBar: AppBar(
65 title: Text("GET"),
66 ),
68 body: Center(
69 child: Text(body),
70 ),
71 );
72 }
73 }
Page 3 of 21
Berikut ini adalah tampilan awal dari aplikasi pada saat di jalankan, pada bagian tengah aplikasi
masih tertulis “No data” karena user belum menekan floating button.
Berikut ini adalah tampilan saat user menekan floating button, terlihat ada hasil data yang diambil
dari API dalam bentuk map dengan nomor id 3 yaitu Clementine Bauch.
Page 4 of 21
Case Study 2: Future Builder
Dengan menggunakan source code dari case study sebelumnya, data yang ditampilkan akan muncul
secara otomatis dalam waktu beberapa detik tanpa harus menekan floating button terlebih dahulu
dengan menggunakan method GET.
Source Code
1 /*Mengimpor package*/
2 import 'dart:convert';
3 import 'package:flutter/material.dart';
6 void main() {
8 runApp(MyApp());
9 }
10
14
15 @override
17 return MaterialApp(
19 home: HomePage(),
20 );
21 }
22 }
23
27
Page 5 of 21
28 @override
31 }
32
34 /*Pembuatan list baru bernama data yang diinisiasikan dengan array kosong
35 */
37
42
43 /*Membuat sebuah variabel bernama myResponse yang berisi API yang di-
44 Gunakan*/
46 http.get(Uri.parse("https://jsonplaceholder.typicode.com/users"));
47
50 if (myResponse.statusCode == 200) {
52 data = dataResponse;
53 }
54 else {
55 print("Error");
56 }
57 }
58
59 @override
Page 6 of 21
60 Widget build(BuildContext context) {
61 return Scaffold(
63 appBar: AppBar(
64 title: Text("GET"),
65 ),
67 body: FutureBuilder(
69 future: getData(),
73 if (snapshoot.connectionState == ConnectionState.waiting) {
75 }
76 /*Jika waktu delay telah dilewati, maka akan menampilkan data dari
78 else {
79 return ListView.builder(
81 itemCount: data.length,
86 return ListTile(
88 title: Text(dataUser['name'],),
90 berwarna abu-abu*/
91 leading: CircleAvatar(
Page 7 of 21
92 backgroundColor: Colors.grey),
94 subtitle*/
95 subtitle: Text(dataUser['email']),
96 );
97 });
98 }
99
100 }
101 )
102 );
103 }
104 }
Berikut ini adalah tampilan awal dari aplikasi saat pertama kali di jalankan. Disini akan menampilkan
icon loading selama 3 detik sebelum data ditampilkan secara berseluruh dikarena menggunakan
future.
Page 8 of 21
3 detik kemudian, icon loading akan menghilang dan digantikan oleh seluruh data yang diambil dari
API dalam bentuk list view. Data yang ditampilkan adalah nama dan email user dan dilengkapi oleh
avatar lingkaran pada bagian kiri.
Page 9 of 21
Case Study 3: POST
Aplikasi ini dapat melakukan penambahaan data yaitu title dan body yang dapat disi oleh user
melalui text field dengan menggunakan metode POST.
Source Code
1 /*Mengimpor package*/
2 import 'dart:math';
3 import 'package:flutter/material.dart';
6 void main() {
8 runApp(MyApp());
9 }
10
14
15 @override
17 return MaterialApp(
19 home: HomePage(),
20 );
21 }
22 }
23
27
28 @override
Page 10 of 21
29 /*Pembuatan state yang dimabil dari kelas _HomePageState*/
31 }
32
41 'userId': Random().nextInt(10).toString(),
42 'title': inputTitle.text,
43 'body': inputBody.text
44 });
46 print(response.body);
47 }
49 */
52
53 @override
55 return Scaffold(
57 appBar: AppBar(
58 title: Text("POST"),
59 ),
60
Page 11 of 21
61 /*Menetapkan body pada posisi center*/
62 body: Center(
63 child: Padding(
66 child: Column(
68 mainAxisAlignment: MainAxisAlignment.center,
69 children: [
71 TextField(controller: inputTitle),
72 TextField(controller: inputBody),
73 SizedBox(
74 height: 20
75 ),
77 telah diinput */
78 ElevatedButton(
79 onPressed: postData,
80 child: Text("POST"),
81 )
82 ],
83 ),
84 ),
85 )
86 );
87 }
88 }
Page 12 of 21
Uji coba program:
Berikut ini adalah tampilan awal dari aplikasi saat pertama kali di jalankan. Disini akan menampilkan
text field yang dapat diisi oleh user dan tombol post.
Disini user menginput header dengan “Text 123” dan body dengan “Hai, ini Samuel”. Pada saat
tombol ditekan, maka secara otomatis akan menampilkan hasil dari data tersebut pada terminal.
UserId 1 diambil random oleh program, sedangkan id disesuaikan dengan API yang sudah ada
sebelumnya.
Page 13 of 21
Case Study 4: DELETE
Aplikasi ini akan menghapuskan data yang berada pada API saat meenekan tombol “DELETE” dan
menampilkan status code dan kondisi id setelah dihapus
Source Code
1 /*Mengimport package*/
2 import 'dart:convert';
3 import 'package:flutter/material.dart';
6 void main() {
8 runApp(MyApp());
9 }
10
14
15 @override
17 return MaterialApp(
19 home: HomePage(),
20 );
21 }
22 }
23
27
28 @override
Page 14 of 21
29 /*Pembuatan state yang dimabil dari kelas _HomePageState*/
31 }
32
34 @override
36 return Scaffold(
38 appBar: AppBar(
39 title: Text("DELETED"),
40 ),
42 body: Center(
43 child: Padding(
46 child: Column(
48 mainAxisAlignment: MainAxisAlignment.center,
49 children: [
51 ElevatedButton(
52 onPressed: () async{
53 /*Membuat sebuah variabel bernama myResponse yang berisi API yang akan
56 http.delete(Uri.parse("https://jsonplaceholder.typicode.com/posts/1"));
58 print(myResponse.statusCode);
60 print(myResponse.body);
Page 15 of 21
61 },
62 child: Text("DELETED"))
63 ],
64 )
65 ),
66 ),
67 );
68 }
69 }
Berikut ini adalah tampilan awal dari aplikasi pada saat di jalankan yang hanya menampilkan tombol
“DELETE” pada bagian tengah body.
Saat tombol ditekan, maka akan keluar output berikut pada terimal. Pada baris pertama
menandakan bahwa penghapusan data berhasil (200 artinya success) sedangkan baris kedua
menandakan bahwa data pada id 1 sudah tidak ada lagi atau kosong.
Page 16 of 21
Case Study 5: Provider
Aplikasi ini akan menampilkan beberapa menu dengan berbagai informasi, gambar dan state hati
dalam bentuk list. Aplikasi ini akan menggunakan provider yang menyediakan Teknik pengolahan Dta
yang dapat digunakan untuk memanage data dalam aplikasi
2 import 'package:flutter/material.dart';
3 import 'package:provider/provider.dart';
4 import 'package:provider_app/provider/all_food.dart';
5 import 'screen/food_screen.dart';
7 void main() {
9 runApp(const MyApp());
10 }
11
15
16 @override
18 return MaterialApp(
19 /*Pada contoh ini, provider hanya dapat diakses pada FoodScreen dan
21 home: ChangeNotifierProvider(
23 child: FoodScreen()),
24 );
25 }
26 }
Page 17 of 21
Source Code – food_screen.dart
1 /*Mengimport package dan data dari beberapa kelas*/
2 import 'package:flutter/material.dart';
3 import 'package:provider/provider.dart';
4 import 'package:provider_app/provider/all_food.dart';
5 import 'package:provider_app/widget/food_item.dart';
9 dari StatelessWidget*/
10 const FoodScreen({
11 super.key,
12 });
13
14 @override
17 makanan*/
19 return Scaffold(
20
22 appBar: AppBar(
23 title: Text("Provider"),
24 ),
26 body: ListView.builder(
28 itemCount: dataFoods.length,
31
Page 18 of 21
32 /*Mengembalikan id, judul, durasi dan gambar dari data makanan*/
33 return FoodItem(
34 id: food.id,
35 title: food.title,
36 duration: food.duration,
37 imageUrl: food.imageUrl,
38 );
39 })),
40 );
41 }
42 }
2 import 'package:flutter/material.dart';
6 String, imageUrl dengan tipe string dan duration dengan tipe int*/
7 String title;
8 String id;
9 String imageUrl;
10 int duration;
11
12 /*Pembuatan method dengan nama foodItem yang memiliki parameter key, id,
14 FoodItem(
15 {Key? key,
16 required this.id,
17 required this.title,
18 required this.imageUrl,
19 required this.duration})
Page 19 of 21
20 : super(key:key);
21
22
23 @override
25 return ListTile(
27 trailing: Icon(Icons.favorite_border),
31 title: Text(title),
33 setiap makanan*/
34 leading: CircleAvatar(
35 child: Container(
36 decoration: BoxDecoration(
37 shape: BoxShape.circle,
39 BoxFit.cover),
40 ),
41 ),
42 ),
43 );
44 }
45 }
Page 20 of 21
Uji coba program:
Berikut ini adalah tampilan yang dihasilkan pada saat di jalankan. Disini terdapat beberapa list
makanan yang ditampikan pada bentuk list yang menampilkan nama makanan, durasi makanan,
gambar makanan dan icon hati di setiap listnya.
Page 21 of 21