1. Setup Flutter Project
Buat proyek Flutter baru:
flutter create my_app
cd my_app
2. Tambahkan Dependensi
Tambahkan dependensi di pubspec.yaml
untuk SQLite dan provider:
dependencies:
flutter:
sdk: flutter
sqflite: ^2.0.0
path_provider: ^2.0.0
provider: ^6.0.0
Jalankan flutter pub get
untuk menginstal dependensi.
3. Buat Model Database
Buat file database_helper.dart
untuk mengelola database SQLite:
import 'package:sqflite/sqflite.dart';
import 'package:path/path.dart';
class DatabaseHelper {
static final DatabaseHelper _instance = DatabaseHelper._internal();
factory DatabaseHelper() => _instance;
static Database? _database;
DatabaseHelper._internal();
Future<Database> get database async {
if (_database != null) return _database!;
_database = await _initDB();
return _database!;
}
Future<Database> _initDB() async {
String path = join(await getDatabasesPath(), 'user.db');
return await openDatabase(path, version: 1, onCreate: _createDB);
}
Future _createDB(Database db, int version) async {
await db.execute('''
CREATE TABLE users(
id INTEGER PRIMARY KEY AUTOINCREMENT,
username TEXT,
password TEXT
)
''');
}
Future<void> insertUser(String username, String password) async {
final db = await database;
await db.insert('users', {'username': username, 'password': password});
}
Future<List<Map<String, dynamic>>> getUsers() async {
final db = await database;
return await db.query('users');
}
}
4. Buat Halaman Splash Screen
Buat file splash_screen.dart
:
import 'package:flutter/material.dart';
import 'login_screen.dart';
class SplashScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
Future.delayed(Duration(seconds: 3), () {
Navigator.of(context).pushReplacement(
MaterialPageRoute(builder: (context) => LoginScreen()),
);
});
return Scaffold(
body: Center(
child: Text('Welcome to My App', style: TextStyle(fontSize: 24)),
),
);
}
}
5. Buat Halaman Login dan Register
Buat file login_screen.dart
:
import 'package:flutter/material.dart';
import 'database_helper.dart';
class LoginScreen extends StatelessWidget {
final TextEditingController usernameController = TextEditingController();
final TextEditingController passwordController = TextEditingController();
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('Login')),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
children: [
TextField(controller: usernameController, decoration: InputDecoration(labelText: 'Username')),
TextField(controller: passwordController, decoration: InputDecoration(labelText: 'Password'), obscureText: true),
ElevatedButton(
onPressed: () async {
// Implement login logic
},
child: Text('Login'),
),
TextButton(
onPressed: () {
// Navigate to register screen
},
child: Text('Register'),
),
],
),
),
);
}
}
6. Buat Halaman Home
Buat file home_screen.dart
:
import 'package:flutter/material.dart';
class HomeScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('Home')),
body: Center(child: Text('Welcome to Home Page')),
floatingActionButton: FloatingActionButton(
onPressed: () {
// Implement logout logic
},
child: Icon(Icons.logout),
),
);
}
}
7. Update main.dart
Akhirnya, update main.dart
untuk memulai aplikasi:
import 'package:flutter/material.dart';
import 'splash_screen.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter App',
theme: ThemeData(primarySwatch: Colors.blue),
home: SplashScreen(),
);
}
}
8. Tampilan Menarik dan Colorful
Anda bisa menambahkan lebih banyak warna dan gaya menggunakan ThemeData
dan widget seperti Container
, Card
, dan ListTile
untuk membuat tampilan lebih menarik.
9. Jalankan Aplikasi
Jalankan aplikasi dengan perintah:
flutter run
Ini adalah kerangka dasar untuk aplikasi Anda. Anda bisa menambahkan logika untuk login, register, dan logout sesuai kebutuhan. Jika ada pertanyaan lebih lanjut atau butuh bantuan, silakan tanya! 😊