Tujuan praktikum ini yaitu mahasiswa menginstall kebutuhan Praktikum Aplikasi Mobile menggunakan bahasa Dart pada framework Flutter. Mahasiswa diharapkan menguasai dasar-dasar bahasa pemrograman Dart serta konsep Object-Oriented Programming (OOP) dalam Dart.
Dart adalah bahasa pemrograman berorientasi objek (OOP) yang dikembangkan oleh Google dan diperkenalkan pada tahun 2011 oleh Lars Bak dan Kasper. Dengan sintaks yang menyerupai C, Java, dan JavaScript, Dart dirancang agar mudah dipahami oleh pengembang yang sudah terbiasa dengan bahasa-bahasa tersebut.
Bahasa ini mendukung berbagai paradigma pemrograman—fungsional, imperatif, dan reflektif—serta dilengkapi fitur seperti class-based architecture, garbage collection, mixins, generics, dan type inference. Dart menawarkan performa tinggi melalui dua mode kompilasi: Just-in-Time (JIT) untuk pengembangan yang cepat dan Ahead-of-Time (AOT) untuk eksekusi yang optimal.
Sejak versi 2.12, Dart mengadopsi sound null safety, yang mencegah kesalahan null secara default, dan mulai Dart 3, semua kode wajib mematuhi prinsip ini.
Salah satu kekuatan utama Dart adalah penggunaannya sebagai bahasa inti dalam Flutter, framework open-source dari Google untuk membangun aplikasi lintas platform—Android, iOS, web, dan desktop—dengan satu basis kode. Selain Flutter, Dart juga digunakan untuk pengembangan aplikasi web (melalui kompilasi ke JavaScript atau WebAssembly), server-side, dan desktop.
Ekosistemnya didukung oleh pub.dev sebagai manajer paket, berbagai pustaka, serta alat bantu seperti DevTools dan plugin editor yang memperkaya pengalaman pengembang.
choco install dart-sdk
dart --version
C:\tools\dart-sdk.bin dari Dart SDK
dart --version
dart create halo di terminal
halo/
├── bin/
│ └── halo.dart
├── pubspec.yaml
├── README.md
└── test/
└── halo_test.dart
void main() {
print('Halo, Dart!');
}
Program ini bertujuan untuk mendemonstrasikan manipulasi data menggunakan List, Set, dan Map dalam Dart, serta menampilkan data menggunakan berbagai teknik perulangan.
JerukAlpukatSemangkashuffle untuk mengacak urutanManggaPisang dalam ListIkanKelinci (case-sensitive)AnjingPrinterMouseLaptopProgram menggunakan dua pendekatan perulangan:
for-in dan forEach untuk mencetak
isi List, Set, dan Mapfor dengan indeks untuk mencetak elemen
berdasarkan posisivoid main(List<String> arguments) {
print("Hasil manipulasi list:");
List<String> fruits = ['Apel', 'Alpukat', 'Nanas', 'Mangga', 'Pisang'];
print(fruits.toString());
// manipulasi list
fruits.add('Jeruk');
print(fruits.toString());
fruits.remove('Alpukat');
print(fruits.toString());
fruits.sort();
print(fruits.toString());
fruits[0] = 'Semangka';
print(fruits.toString());
fruits.shuffle();
print(fruits.toString());
print(fruits.first);
print(fruits.last);
print(fruits.contains('Mangga'));
print(fruits.indexOf('Pisang'));
print(fruits.isEmpty);
print(fruits.isNotEmpty);
Set<String> animals = {'Kucing', 'Anjing', 'kelinci', 'Burung'};
print(animals.toString());
// manipulasi set
print("Hasil manipulasi set");
animals.add('Ikan');
print(animals.toString());
animals.remove('Kelinci');
print(animals.toString());
print(animals.length);
print(animals.contains('Anjing'));
print(animals.isEmpty);
print(animals.isNotEmpty);
print("Hasil manipulasi map:");
Map<String, String> productPrices = {
'Laptop': '10.000.000',
'Mouse': '200.000',
'Keyboard': '500.000',
'Monitor': '2.000.000',
};
print(productPrices.toString());
// manipulasi map
productPrices['Printer'] = '1.500.000';
print(productPrices.toString());
productPrices.remove('Mouse');
print(productPrices.toString());
productPrices['Laptop'] = '9.500.000';
print(productPrices['Laptop']);
print(productPrices.length);
print(productPrices.containsKey('Keyboard'));
print(productPrices.containsValue('2.000.000'));
print(productPrices.keys);
print(productPrices.values);
print(productPrices.isNotEmpty);
print("Hasil perulangan:");
// Cara Pertama: for-in & forEach
for (var fruit in fruits) {
print(fruit);
}
for (var animal in animals) {
print(animal);
}
productPrices.forEach((key, value) {
print('$key: $value');
});
// Cara Kedua: indexed access
print("Hasil cetak")
for (var i = 0; i < fruits.length; i++) {
print(fruits[i]);
}
for (var i = 0; i < animals.length; i++) {
print(animals.elementAt(i));
}
for (var i = 0; i < productPrices.length; i++) {
print(
'${productPrices.keys.elementAt(i)}: ${productPrices.values.elementAt(i)}',
);
}
}
Program akan mencetak hasil manipulasi dan isi dari List, Set, dan Map ke terminal, termasuk:
Pastikan file disimpan sebagai dart_dasar.dart dan dijalankan menggunakan
perintah dart run di terminal.
void main(List<String> arguments) {
//Object Oriented Programming (OOP)
//membuat object
var car1 = Car();
car1.color = 'Red';
car1.brand = 'Toyota';
car1.year = 2020;
car1.drive();
car1.honk();
print('Car 1: ${car1.color}, ${car1.brand}, ${car1.year}');
Cat cat1 = Cat();
cat1.eat();
cat1.meow();
}
class Car {
//property
String color = '';
String brand = '';
int year = 0;
//method
void drive() {
print('The $color $brand is driving.');
}
void honk() {
print('The $color $brand is honking.');
}
}
//pewarisan
class Animal {
void eat() {
print('The animal is eating.');
}
}
class Dog extends Animal {
void bark() {
print('The dog is barking.');
}
}
class Cat extends Animal {
void meow() {
print('The cat is meowing.');
}
}
Buatlah aplikasi sederhana menggunakan bahasa pemrograman Dart dengan menerapkan konsep Object-Oriented Programming (OOP).
import 'dart:io';
void main(List<String> arguments) {
const int hargaCuciSetrika = 6000;
const int hargaCuci = 4000;
const int hargaSetrika = 3000;
int kgCuciSetrika = 0;
int kgCuci = 0;
int kgSetrika = 0;
bool isRunning = true;
while (isRunning) {
print('\n=== Selamat Datang di Mini Laundry ===');
print('Pilihan Menu:');
print('1. Cuci & Setrika dengan harga $hargaCuciSetrika');
print('2. Cuci Saja dengan harga $hargaCuci');
print('3. Setrika Saja dengan harga $hargaSetrika');
print('4. Keluar');
stdout.write('Pilih menu (1-4): ');
String? pilihan = stdin.readLineSync();
switch (pilihan) {
case '1':
stdout.write('Masukkan jumlah kg: ');
kgCuciSetrika += int.parse(stdin.readLineSync()!);
break;
case '2':
stdout.write('Masukkan jumlah kg: ');
kgCuci += int.parse(stdin.readLineSync()!);
break;
case '3':
stdout.write('Masukkan jumlah kg: ');
kgSetrika += int.parse(stdin.readLineSync()!);
break;
case '4':
print('Terima kasih telah menggunakan layanan kami!');
isRunning = false;
continue;
default:
print('Pilihan tidak valid.');
continue;
}
int total =
kgCuciSetrika * hargaCuciSetrika +
kgCuci * hargaCuci +
kgSetrika * hargaSetrika;
double diskon = 0;
if (total > 100000) {
diskon = 0.10;
} else if (total >= 50000) {
diskon = 0.05;
}
double totalCost = total - (total * diskon);
print('\n--- Struk Sementara ---');
print(
'Cuci & Setrika : $kgCuciSetrika kg x $hargaCuciSetrika = ${kgCuciSetrika * hargaCuciSetrika}',
);
print('Cuci Saja : $kgCuci kg x $hargaCuci = ${kgCuci * hargaCuci}');
print(
'Setrika Saja : $kgSetrika kg x $hargaSetrika = ${kgSetrika * hargaSetrika}',
);
print('Total Sebelum Diskon: $total');
print('Diskon: ${diskon * 100}%');
print('Total yang Harus Dibayar: ${totalCost.toInt()}');
}
}
import 'dart:io';
class LaundryPackage {
String selectionKey;
String name;
int kgAmount = 0;
int pricePerKg;
// Constructor
LaundryPackage(this.selectionKey, this.name, this.pricePerKg);
void printOption() {
print('$selectionKey -> $name dengan harga $pricePerKg/kg');
}
void increaseKg(int kg) {
if (kg < 0) {
print("Harus memberikan input positif!");
return;
}
this.kgAmount += kg;
}
void displayReceipt() {
int total = this.calculateCost();
if (total == 0) {
return;
}
print('$name : $kgAmount kg x $pricePerKg = $total');
}
int calculateCost() {
return pricePerKg * kgAmount;
}
}
void printReceipt(List<LaundryPackage> packages) {
int total = packages.fold(0, (sum, pkg) => sum + pkg.calculateCost());
for (var package in packages) {
package.printOption();
}
if (total == 0) {
print("Anda tidak membeli apa-apa");
}
double diskon = 0;
if (total > 100000) {
diskon = 0.10;
} else if (total >= 50000) {
diskon = 0.05;
}
double totalCost = total - (total * diskon);
print('Total Sebelum Diskon: $total');
print('Diskon: ${diskon * 100}%');
print('Total yang Harus Dibayar: ${totalCost.toInt()}');
}
void main(List<String> arguments) {
List<LaundryPackage> packages = [
LaundryPackage('1', 'Cuci & Setrika', 6000),
LaundryPackage('2', 'Cuci Saja', 4000),
LaundryPackage('3', 'Setrika Saja', 3000),
];
bool isRunning = true;
while (isRunning) {
print('\n=== Selamat Datang di Mini Laundry ===');
print('Pilihan Menu:');
for (var package in packages) {
package.printOption();
}
print("4. Keluar");
stdout.write('Pilih menu (1-4): ');
String? option = stdin.readLineSync();
if (option == "4") {
printReceipt(packages);
isRunning = true;
print('\n--- Struk Akhir ---');
printReceipt(packages);
print("Terima kasih atas berbelanja di laundry kami");
break;
}
var selected = packages.firstWhere(
(pkg) => pkg.selectionKey == option,
orElse: () {
print("Pilihan invalid!");
return LaundryPackage('', 'Invalid', 0);
},
);
if (selected.selectionKey == '') {
continue;
}
stdout.write('Masukkan jumlah kg: ');
try {
int kg = int.parse(stdin.readLineSync()!);
selected.increaseKg(kg);
} catch (e) {
print('Input tidak valid. Harus berupa angka!');
}
print('\n--- Struk Sementara ---');
printReceipt(packages);
}
}
Aplikasi ini bertujuan untuk melatih pemahaman mahasiswa terhadap struktur class, method, dan logika bisnis menggunakan pendekatan OOP dalam Dart.
🔗 Lihat Repositori Proyek di GitHub saya!