Aplikasi Mobile Multi-Fitur dengan Desain Modern dan Futuristik
📦 Repository: github.com/fathurp01/SynergyApp
Klik untuk melihat demo lengkap fitur-fitur Synergy App
| Informasi | Detail |
|---|---|
| Nama Lengkap | Fathurrahman Pratama Putra |
| NIM | 152023057 |
| Kelas | Pemrograman Mobile, AA |
| Program Studi | Informatika |
| Mata Kuliah | Pemrograman Mobile |
| Dosen Pengampu | Galih Ashari R., S.Si., MT |
| Institusi | Institut Teknologi Nasional Bandung |
| Semester | Ganjil 2024/2025 |
| Tugas | UTS (Ujian Tengah Semester) |
| Tanggal Pengumpulan | 13 November 2025 |
SynergyApp adalah aplikasi mobile komprehensif yang dikembangkan menggunakan Flutter Framework sebagai pemenuhan tugas Ujian Tengah Semester (UTS) mata kuliah Pemrograman Mobile.
Aplikasi ini menggabungkan berbagai fitur esensial dalam satu platform, mencakup manajemen biodata, daftar kontak, kalkulator matematika, informasi cuaca, dan portal berita - semuanya dengan antarmuka yang modern, intuitif, dan aesthetic.
Proyek ini bertujuan untuk mendemonstrasikan kemampuan dalam:
- ✅ Implementasi Fragment Pattern untuk navigasi multi-halaman
- ✅ Pembuatan UI/UX modern dengan Material Design 3
- ✅ Pengelolaan State Management menggunakan StatefulWidget
- ✅ Penggunaan Custom Widgets yang reusable
- ✅ Implementasi berbagai input types (TextField, Dropdown, Radio, DatePicker)
- ✅ Pembuatan layout responsif untuk berbagai ukuran layar
- ✅ Penerapan animasi smooth untuk user experience yang lebih baik
Proyek ini bertujuan untuk mendemonstrasikan kemampuan dalam:
- ✅ Halaman Awal berupa Splash Screen 5 detik dengan identitas di lengkapi dengan animasi yang bagus
- ✅ Halaman Dashboard berupa menu bottom navigation yang responsif dengan layout menggunakan konsep fragment untuk di gunakan pada seluruh halaman
- ✅ Halaman Biodata berupa halaman yang terdapat informasi biodata dan profile image dilengkapi dengan komponen seperti dropdown, radio button, teks, dan calendar untuk input data
- ✅ Halaman Kontak berupa halaman yang terdiri atas daftar telepon
- ✅ Halaman Kalkulator Berupa halaman kalkulator sederhana dengan aritmatika dasar
- ✅ Halaman Cuaca berupa halaman yang menampilkan informasi suhu, kelembapan dan lainnya dilengkapi dengan animasi yang bagus dan data statis
- ✅ Halaman Berita berupa halaman yang memuat berbagai berita, di lengkapi dengan desain yang bagus dan data statis
Durasi: Tepat 5 detik
Fungsi: Halaman pembuka aplikasi dengan animasi menarik
Komponen:
- 📱 Judul Aplikasi: "SYNERGY" dengan font besar dan letter spacing
- 📝 Subtitle: "ALL YOU NEED IN ONE APP"
- 📸 Foto Developer: Foto profil bulat dengan border putih
- 🆔 NIM: 152023057
- 👤 Nama Developer: Fathurrahman Pratama Putra
- 🌊 Wave Animation: Gelombang animasi di background (lambat & aesthetic)
- ⏳ Progress Bar: Loading bar horizontal dengan animasi smooth
- ✨ Animasi: Scale & fade animation untuk logo
Screenshot:
Cuplikan Kode:
// Timer untuk navigasi otomatis setelah 5 detik
Timer(const Duration(seconds: 5), () {
if (mounted) {
Navigator.of(context).pushReplacement(
PageRouteBuilder(
pageBuilder: (context, animation, secondaryAnimation) =>
const MainScreen(),
transitionsBuilder: (context, animation, secondaryAnimation, child) {
return FadeTransition(opacity: animation, child: child);
},
transitionDuration: const Duration(milliseconds: 800),
),
);
}
});Konsep: Fragment Pattern / Page Switching
Navigasi: Bottom Navigation Bar dengan 5 menu utama
5 Menu Utama:
| Icon | Label | Halaman |
|---|---|---|
| 👤 | Biodata | Halaman informasi pribadi |
| 📇 | Contacts | Daftar kontak telepon |
| 🧮 | Calculator | Kalkulator matematika |
| 🌤️ | Weather | Informasi cuaca |
| 📰 | News | Portal berita teknologi |
Screenshot:
Cara Kerja Fragment Pattern:
class _MainScreenState extends State<MainScreen> {
int _currentIndex = 0; // Index halaman yang aktif
// List of Fragments (Pages)
final List<Widget> _pages = const [
BiodataPage(), // Fragment 1
ContactsPage(), // Fragment 2
CalculatorPage(), // Fragment 3
WeatherPage(), // Fragment 4
NewsPage(), // Fragment 5
];
@override
Widget build(BuildContext context) {
return Scaffold(
body: AnimatedSwitcher(
duration: const Duration(milliseconds: 300),
child: _pages[_currentIndex], // Ganti fragment berdasarkan index
),
bottomNavigationBar: BottomNavigationBar(
currentIndex: _currentIndex,
onTap: (index) {
setState(() {
_currentIndex = index; // Ubah index = ganti halaman
});
},
// ... menu items
),
);
}
}Deskripsi: Halaman untuk menampilkan dan mengedit informasi pribadi dengan berbagai jenis input form.
Data yang Ditampilkan:
- Nama Lengkap
- NIM
- Jurusan (Dropdown)
- Jenis Kelamin (Radio)
- Tanggal Lahir (DatePicker)
- Hobi (TextField multiline)
Fitur Tambahan:
- ✅ Mode View/Edit: Toggle untuk switch antara mode tampil dan edit
- ✅ Foto Profil: Circular avatar dengan border dan shadow
- ✅ Glass Card Design: Efek glassmorphism untuk container
- ✅ Live Preview: Data ditampilkan real-time saat input
- ✅ Validasi: Basic validation untuk input
Screenshot:
Komponen Input:
TextFormField(
controller: _nameController,
decoration: const InputDecoration(
labelText: 'Nama Lengkap',
prefixIcon: Icon(Icons.person_outline),
),
)
TextFormField(
controller: _hobiController,
maxLines: 3,
decoration: const InputDecoration(
labelText: 'Hobi',
prefixIcon: Icon(Icons.favorite_outline),
),
)DropdownButtonFormField<String>(
value: _selectedJurusan,
items: _jurusanList.map((String value) {
return DropdownMenuItem<String>(
value: value,
child: Text(value),
);
}).toList(),
onChanged: (String? newValue) {
setState(() {
_selectedJurusan = newValue!;
});
},
)Pilihan: Informatika, Sistem Informasi, Teknik Elektro, Teknik Sipil
RadioListTile<String>(
title: const Text('Laki-laki'),
value: 'Laki-laki',
groupValue: _selectedGender,
onChanged: (String? value) {
setState(() {
_selectedGender = value!;
});
},
)Pilihan: Laki-laki, Perempuan
Future<void> _selectDate(BuildContext context) async {
final DateTime? picked = await showDatePicker(
context: context,
initialDate: _selectedDate,
firstDate: DateTime(1950),
lastDate: DateTime(2010),
);
if (picked != null && picked != _selectedDate) {
setState(() {
_selectedDate = picked;
});
}
}Deskripsi: Daftar kontak telepon dengan layout modern dan interaktif.
Spesifikasi:
- 📊 Jumlah Kontak: 17 kontak (melebihi requirement minimal 15)
- 📱 Data: Nama lengkap + nomor telepon
- 🎨 Layout: Card dengan Circle Avatar + Text
- 💾 Sumber Data: Variable statis (tidak ada database)
Fitur:
- ✅ Circle Avatar: Warna dinamis berdasarkan nama
- ✅ Card Layout: Modern dengan shadow dan border
- ✅ Action Buttons: Icon untuk telepon dan pesan
- ✅ Search Icon: Di AppBar (UI only)
- ✅ FAB: Floating Action Button untuk tambah kontak (UI only)
- ✅ Hero Animation: Smooth transition saat tap
- ✅ Header Info: Total jumlah kontak
Screenshot:
Data Statis:
static const List<Map<String, String>> _contacts = [
{'name': 'Budi Bin Belut', 'phone': '0812-3456-7101'},
{'name': 'Tina Tertawa', 'phone': '0813-7788-2202'},
{'name': 'Siti Suka Soto', 'phone': '0821-9090-3303'},
{'name': 'Roni Rambutan', 'phone': '0822-3344-4404'},
{'name': 'Joko Jomblo', 'phone': '0812-7711-5505'},
{'name': 'Udin Ulala', 'phone': '0831-6622-6606'},
{'name': 'Ani Anti Galau', 'phone': '0838-4141-7707'},
{'name': 'Tono Tertib', 'phone': '0851-5223-8808'},
{'name': 'Dewi Durian', 'phone': '0852-6420-9909'},
{'name': 'Bambang Baperan', 'phone': '0819-3535-0010'},
{'name': 'Darto Daring', 'phone': '0877-9898-1111'},
{'name': 'Sari Sambal Setan', 'phone': '0881-7744-1212'},
{'name': 'Ratna Receh', 'phone': '0895-1122-1313'},
{'name': 'Bagas Bakso Beranak', 'phone': '0896-5544-1414'},
{'name': 'Mimin Mamam Mie', 'phone': '0897-6677-1515'},
{'name': 'Gilang Guling', 'phone': '0898-8800-1616'},
{'name': 'Caca Caper', 'phone': '0899-9922-1717'},
];Deskripsi: Kalkulator matematika lengkap dengan desain modern.
Operasi Matematika yang Tersedia:
| Operasi | Symbol | Fungsi | Validasi |
|---|---|---|---|
| Penjumlahan | + | a + b |
✅ |
| Pengurangan | - | a - b |
✅ |
| Perkalian | × | a × b |
✅ |
| Pembagian | ÷ | a ÷ b |
✅ Error jika b=0 |
| Kuadrat | x² | a² |
✅ |
| Akar Kuadrat | √ | √a |
✅ Error jika a<0 |
| Clear | C | Reset semua | ✅ |
| Backspace | ⌫ | Hapus digit terakhir | ✅ |
Fitur:
- ✅ Display Ganda: Expression + Result
- ✅ Error Handling: Division by zero, negative sqrt
- ✅ Chain Calculation: Operasi beruntun tanpa '='
- ✅ Format Number: Hasil dengan decimal yang rapi
- ✅ Responsive Keypad: Grid layout yang rapi
- ✅ Visual Feedback: Highlight saat tombol ditekan
- ✅ Gradient Background: Design yang modern
Screenshot:
Implementasi Kode:
void _calculate() {
double result;
switch (_operator) {
case '+':
result = _firstOperand! + secondOperand;
break;
case '-':
result = _firstOperand! - secondOperand;
break;
case '×':
result = _firstOperand! * secondOperand;
break;
case '÷':
if (secondOperand == 0) {
_showError('Cannot divide by zero');
return;
}
result = _firstOperand! / secondOperand;
break;
}
setState(() {
_display = _formatResult(result);
});
}
void _onSquare() {
final double? value = double.tryParse(_display);
if (value == null) return;
setState(() {
final result = value * value;
_display = _formatResult(result);
});
}
void _onSquareRoot() {
final double? value = double.tryParse(_display);
if (value == null) return;
if (value < 0) {
_showError('Cannot calculate square root of negative number');
return;
}
setState(() {
final result = sqrt(value);
_display = _formatResult(result);
});
}Deskripsi: Informasi cuaca dengan data statis dan animasi menarik.
Animasi Weather Icon:
- ☁️ Animated Cloud: Bergerak smooth ±8px dengan 6 detik duration
- ☀️ Pulsing Sun: Glow effect dengan opacity 0.4-0.6
- 🎨 Material Icons: Menggunakan Icons.cloud yang realistic
- ⚡ Smooth Movement: Curves.easeInOut untuk natural animation
Informasi yang Ditampilkan:
| Info | Value | Icon | Deskripsi |
|---|---|---|---|
| Lokasi | Bandung, Indonesia | 📍 | Kota Paris van Java |
| Suhu | 28°C | 🌡️ | Temperature saat ini |
| Kondisi | Partly Cloudy | ⛅ | Cuaca berawan sebagian |
| Feels Like | 30°C | 🔥 | Suhu yang terasa |
| Humidity | 70% | 💧 | Kelembaban udara |
| Wind Speed | 8 km/h | 💨 | Kecepatan angin |
| UV Index | 6 | ☀️ | Indeks UV (Medium) |
7-Day Forecast (Static Data):
- Mon: Partly Cloudy - 28°/21°
- Tue: Cloudy - 27°/20°
- Wed: Rainy - 25°/19°
- Thu: Partly Cloudy - 29°/22°
- Fri: Sunny - 30°/23°
Desain:
- ✅ Gradient Sky: Background gradien biru langit
- ✅ Weather Icon: Icon animasi kondisi cuaca (bisa diganti Lottie)
- ✅ Large Temperature: Font 80px untuk suhu utama
- ✅ Glass Cards: Info detail dalam card transparan
- ✅ Icons: Material icons untuk setiap data point
- ✅ Forecast Section: Prakiraan 7 hari (static)
Screenshot:
Data Cuaca Statis (Bandung):
static const Map<String, dynamic> _weatherData = {
'location': 'Bandung, Indonesia',
'temperature': 28,
'condition': 'Partly Cloudy',
'humidity': 70,
'windSpeed': 8,
'feelsLike': 30,
'uvIndex': 6,
};Upgrade Path (Optional):
// Ganti Icon dengan Lottie Animation
Lottie.asset(
'assets/animations/weather_sunny.json',
width: 200,
height: 200,
)Deskripsi: Portal berita teknologi dengan layout card yang modern.
Spesifikasi:
- 📰 Jumlah Berita: 8 artikel
- 🎨 Layout: Card dengan pattern berulang (seperti Contacts)
- 💾 Data: Statis dari variable
Setiap Card Berita Menampilkan:
- 🖼️ Thumbnail: Placeholder image (bisa diganti dengan gambar nyata)
- 📰 Title: Judul berita (bold, 2 lines max)
- 📝 Summary: Ringkasan berita (3 lines max)
- 🏷️ Category Badge: Tag kategori dengan warna
- 🕐 Date: Waktu publish (relative time)
- 🔖 Bookmark Icon: Icon untuk save (UI only)
Kategori yang Tersedia:
- National
- Sports
- Economy
- Business
- Health
- Disaster
- Technology
- Culture
Fitur:
- ✅ ListView Builder: Repeating pattern untuk cards
- ✅ Header Banner: Gradient banner dengan info
- ✅ Category Chips: Filter kategori (UI only)
- ✅ Smooth Scroll: Scroll yang halus
- ✅ Card Elevation: Shadow untuk depth
- ✅ Tap Interaction: Visual feedback saat tap
Screenshot:
Data Berita Statis:
static const List<Map<String, String>> _newsItems = [
{
'title': 'Flutter 3.5 Released with Amazing Features',
'summary': 'Google announces the latest version of Flutter...',
'category': 'Technology',
'date': '2 hours ago',
},
{
'title': 'AI Revolution in Mobile Development',
'summary': 'Artificial Intelligence is transforming...',
'category': 'AI & ML',
'date': '5 hours ago',
},
// ... 6 berita lainnya
];Aplikasi ini mengimplementasikan Material Design 3 (Material You) dengan komponen modern:
- ✅ Color Scheme: Dynamic theming dengan primary & secondary colors
- ✅ Typography: Google Fonts (Poppins) untuk konsistensi
- ✅ Elevation: Subtle shadows untuk depth perception
- ✅ Border Radius: Rounded corners (8-20px)
- ✅ Spacing: Consistent padding & margins (8, 12, 16, 24px)
Transisi halaman menggunakan White Flash Effect yang sangat cepat dan smooth:
Durasi Total: ~140ms (50ms fade out + 40ms white flash + 50ms fade in)
- Wave Animation: Background wave dengan 20 detik per cycle (very slow & aesthetic)
- Logo Scale: Tween sequence animation (0.3 → 1.1 → 1.0)
- Fade In: Smooth fade untuk semua elemen
- Progress Bar: Linear progress dari 0 ke 100% dalam 5 detik
- Cloud Movement: Animated cloud bergerak ±8px dengan durasi 6 detik
- Sun Glow: Pulsing glow effect dengan opacity 0.4-0.6 (sangat subtle)
- Smooth Curves: Menggunakan
Curves.easeInOutuntuk natural movement
- Hero Animations: Smooth transition untuk images dan avatars
- AnimatedOpacity: Untuk fade transitions
- AnimatedSwitcher: Switch between widgets dengan animation
ColorScheme.fromSeed(
seedColor: const Color(0xFF6C63FF), // Primary: Ungu modern
secondary: const Color(0xFF03DAC6), // Secondary: Cyan/Teal
brightness: Brightness.light,
)- Flutter: 3.9.2 (Stable)
- Dart: 3.0+
dependencies:
flutter:
sdk: flutter
cupertino_icons: ^1.0.8 # iOS style icons
google_fonts: ^6.2.1 # Typography (Poppins)
lottie: ^3.1.3 # Animasi (optional)
provider: ^6.1.2 # State management (future use)dev_dependencies:
flutter_test:
sdk: flutter
flutter_lints: ^5.0.0 # Code qualitysynergy_app/
├── android/ # Android native files
├── ios/ # iOS native files
├── lib/
│ ├── main.dart # 🚀 Entry point & App theme
│ ├── screens/
│ │ ├── splash_screen.dart # 🎯 Splash (5 detik)
│ │ ├── main_screen.dart # 🏠 Main container + BottomNav
│ │ ├── biodata_page.dart # 👤 Biodata dengan forms
│ │ ├── contacts_page.dart # 📇 17 kontak statis
│ │ ├── calculator_page.dart # 🧮 Kalkulator lengkap
│ │ ├── weather_page.dart # 🌤️ Info cuaca Jakarta
│ │ └── news_page.dart # 📰 8 berita teknologi
│ └── widgets/
│ ├── glass_card.dart # 💎 Reusable glassmorphism
│ ├── avatar_circle.dart # ⭕ Avatar dengan inisial
│ └── app_button.dart # 🔘 Custom button widget
├── assets/
│ ├── images/
│ │ ├── profil.jpg # 📸 Foto developer
│ │ └── .gitkeep
│ ├── animations/
│ │ └── .gitkeep # 🎬 Lottie files (optional)
│ └── screenshots/ # 📱 Screenshot untuk README
│ ├── splash.png
│ ├── biodata_view.png
│ ├── biodata_edit.png
│ ├── contacts.png
│ ├── calculator.png
│ ├── weather.png
│ └── news.png
├── test/ # Unit tests
├── .gitignore
├── pubspec.yaml # Dependencies & assets
├── README.md # 📖 Dokumentasi ini
└── LICENSE # MIT License
Pastikan sudah terinstall:
- ✅ Flutter SDK (3.x atau lebih baru)
- ✅ Android Studio atau VS Code
- ✅ Emulator Android atau iOS Simulator
- ✅ Git untuk clone repository
git clone https://github.com/fathurp01/SynergyApp.git
cd synergy_appflutter pub getflutter doctorPastikan tidak ada error (✓ = OK)
Menggunakan Command Line:
# Run di debug mode
flutter run
# Run di release mode (lebih cepat)
flutter run --releaseMenggunakan VS Code:
- Buka folder
synergy_appdi VS Code - Tekan
F5atau klik Run > Start Debugging - Pilih device (emulator/physical device)
Menggunakan Android Studio:
- Open Project > Pilih folder
synergy_app - Klik tombol Run (
▶️ ) di toolbar - Pilih device target
# Build APK release
flutter build apk --release
# Output: build/app/outputs/flutter-apk/app-release.apkflutter installHalaman pembuka dengan logo SYNERGY, foto developer, NIM, nama, dan wave animation
Main screen dengan 5 menu di bottom navigation bar
Tampilan biodata lengkap dengan foto profil dan informasi
Mode edit dengan berbagai input: TextField, Dropdown, Radio, DatePicker
Daftar 17 kontak dengan circle avatar dan action buttons
Kalkulator dengan operasi +, -, ×, ÷, x², √, C
Informasi cuaca lengkap dengan suhu, kelembaban, angin, UV index
Daftar 8 berita dengan card layout, kategori, dan timestamp
- Durasi tepat 5 detik
- Menampilkan judul aplikasi "SYNERGY"
- Menampilkan foto developer (profil.jpg)
- Menampilkan NIM: 152023057
- Menampilkan nama: Fathurrahman Pratama Putra
- Animasi smooth (scale, fade, wave)
- Progress bar loading
- Auto navigate ke Dashboard
- Menggunakan BottomNavigationBar
- 5 Menu: Biodata, Contacts, Calculator, Weather, News
- Konsep Fragment (page switching dengan AnimatedSwitcher)
- Smooth transition antar halaman
- Layout lengkap untuk semua menu
- Tidak reload seluruh app saat pindah menu
- Foto profil dengan border dan shadow
- TextField: Nama Lengkap & Hobi (2 items)
- Dropdown: Jurusan (4 pilihan)
- Radio Button: Jenis Kelamin (2 pilihan)
- DatePicker: Tanggal Lahir (calendar dialog)
- Toggle View/Edit mode
- Data tidak disimpan ke database (state only)
- Desain modern dengan glassmorphism
- Minimal 15 kontak (tersedia 17)
- Layout: Circle Image + Text
- Data statis dari variable
- Nama lengkap dan nomor telepon
- Action buttons (call & message)
- Search icon di AppBar
- FAB untuk add contact
- Card layout yang modern
- Operasi Tambah (+)
- Operasi Kurang (-)
- Operasi Kali (×)
- Operasi Bagi (÷)
- Operasi Kuadrat (x²)
- Operasi Akar Kuadrat (√)
- Tombol Clear (C)
- Tombol Backspace (⌫)
- Error handling (div zero, negative sqrt)
- Display expression dan result
- Data statis (tidak API)
- Lokasi: Bandung, Indonesia
- Informasi Suhu (28°C)
- Kondisi: Partly Cloudy
- Informasi Kelembaban (70%)
- Informasi Kecepatan Angin (8 km/h)
- Informasi UV Index (6 - Medium)
- Feels Like temperature (30°C)
- Animated weather icon (cloud + sun)
- 7-day forecast dengan temperatures
- Glass card design untuk detail info
- Gradient sky background
- Icon/Animasi cuaca yang cakep
- Gradient background langit
- Layout responsif
- Data statis (8 berita)
- Pola tampilan berulang (ListView)
- Card layout dengan thumbnail
- Title, summary, category, date
- Category badges dengan warna
- Bookmark icon
- Header banner gradient
- Smooth scrolling
- Upload ke GitHub dengan deskripsi lengkap
- Screenshot semua halaman di README
- Deskripsi fitur dan teknologi
- Cara instalasi dan menjalankan
- Struktur folder yang jelas
- Code snippet untuk fitur penting
- Identitas mahasiswa di README
- LICENSE file (MIT)
- .gitignore yang proper
- Clean code dengan comment yang minimal
- Konsistensi bahasa: English untuk semua UI
- README dalam Bahasa Indonesia
- White Flash Transition: Page transition effect yang sangat smooth
- Weather Animations: Cloud movement & sun glow effect
- Wave Animation: Aesthetic background di splash screen
- Hero Animations: Smooth image transitions
- Glass Card Design: Glassmorphism untuk modern UI
- Custom Widgets: Reusable components (GlassCard, AvatarCircle, AppButton)
- Error Handling: Proper error messages untuk calculator
- Code Quality: Clean, organized, dan well-commented
- 17 Contacts: Nama lucu Indonesia dengan formatting yang rapi
- Typography: Poppins font family dari Google Fonts
Apa itu Fragment? Fragment adalah konsep dari Android native development yang memungkinkan kita membuat UI modular yang dapat di-swap/diganti tanpa reload seluruh aplikasi.
Implementasi di Flutter:
- Container (Main Screen) - Tetap di memori
class MainScreen extends StatefulWidget {
// Ini adalah "bingkai" yang tidak berubah
}- List of Fragments - Pages yang bisa diganti
final List<Widget> _pages = const [
BiodataPage(), // Fragment index 0
ContactsPage(), // Fragment index 1
CalculatorPage(), // Fragment index 2
WeatherPage(), // Fragment index 3
NewsPage(), // Fragment index 4
];- Index Selector - State untuk track fragment aktif
int _currentIndex = 0;- Switcher Mechanism - Ganti fragment
body: AnimatedSwitcher(
duration: const Duration(milliseconds: 300),
child: _pages[_currentIndex], // Switch berdasarkan index
)- Navigation Trigger - Event handler
onTap: (index) {
setState(() {
_currentIndex = index; // Ubah index = ganti halaman
});
}Keuntungan:
- ⚡ Performance lebih baik (tidak reload app)
- 🎨 Smooth transitions
- 💾 State fragment terjaga
- 🔧 Mudah maintenance (separated concerns)
Reusable widget untuk efek glassmorphism:
GlassCard(
child: Column(
children: [
Text('Content goes here'),
],
),
)Avatar dengan inisial dan warna dinamis:
AvatarCircle(
name: 'Fathurrahman Pratama Putra',
size: 48,
)Custom button untuk calculator:
AppButton(
text: '+',
onPressed: () => _onOperatorPressed('+'),
color: Colors.blue,
)Aplikasi ini menggunakan StatefulWidget untuk state management sederhana:
class _BiodataPageState extends State<BiodataPage> {
// State variables
bool _isEditMode = false;
String _selectedJurusan = 'Informatika';
DateTime _selectedDate = DateTime(2005, 1, 30);
// Update state
void _toggleEditMode() {
setState(() {
_isEditMode = !_isEditMode;
});
}
}Kenapa StatefulWidget?
- Simple untuk aplikasi kecil-menengah
- Tidak perlu library external
- Performance cukup untuk requirement ini
- Easy to understand untuk pembelajaran
- ❌ Tidak ada database (SQLite/Hive/etc)
- ❌ Tidak ada SharedPreferences
- ❌ Tidak ada API backend
- ❌ Data input tidak persisten setelah app restart
- ✅ Semua data dari hard-coded variables/constants
- ✅ Cocok untuk demonstrasi UI/UX dan konsep Fragment
Jika ingin dikembangkan lebih lanjut:
-
Database
- Gunakan
sqfliteuntuk database lokal - Atau
hiveuntuk NoSQL storage
- Gunakan
-
API Integration
- Weather API: OpenWeatherMap
- News API: NewsAPI.org
- Contacts: Backend REST API
-
State Management
- Upgrade ke Provider/Riverpod
- Atau gunakan Bloc untuk complex state
-
Animations
- Tambah Lottie animations
- Custom rive animations
-
Testing
- Unit tests untuk logic
- Widget tests untuk UI
- Integration tests untuk flow
MIT License
Copyright (c) 2025 Fathurrahman Pratama Putra
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
NIM: 152023057
Program Studi: Informatika
Institut: Institut Teknologi Nasional Bandung
Kontak:
- 📧 Email: fathurrahman.pratama@itenas.ac.id
- 💼 LinkedIn: Fathurrahman Pratama Putra
- 🐙 GitHub: @fathurp01
Terima kasih kepada:
- Galih Ashari R., S.Si., MT - Dosen Pengampu Mata Kuliah Pemrograman Mobile
- Flutter Team - Framework yang luar biasa dan dokumentasi yang lengkap
- Material Design Team - Design system yang comprehensive dan modern
- Google Fonts - Poppins font family untuk typography yang indah
- Stack Overflow Community - Untuk problem solving dan best practices
- GitHub Copilot - AI assistant untuk productivity boost
- Teman-teman Kelas AA - Diskusi dan saling membantu dalam belajar
Dibuat dengan ❤️ menggunakan Flutter
© 2025 Fathurrahman Pratama Putra. All Rights Reserved.







