TKK_E32230332/lib/pages/start_page.dart

424 lines
14 KiB
Dart

import 'package:flutter/material.dart';
import 'login_page.dart';
class StartPage extends StatelessWidget {
const StartPage({super.key});
static const Color primaryColor = Color(0xff4E7C34);
static const Color secondaryColor = Color(0xff6A994E);
static const Color backgroundColor = Color(0xffFFF8E8);
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: backgroundColor,
body: SafeArea(
child: Padding(
padding: const EdgeInsets.symmetric(horizontal: 20, vertical: 18),
child: Column(
children: [
Container(
height: 140,
width: double.infinity,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(30),
image: const DecorationImage(
image: AssetImage("assets/wudhu.png"),
fit: BoxFit.cover,
),
),
child: Padding(
padding: const EdgeInsets.symmetric(horizontal: 18),
child: Row(
children: [
Image.asset("assets/logo.png", width: 50),
const SizedBox(width: 12),
const Expanded(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
"Score_PAI",
style: TextStyle(
fontSize: 25,
fontWeight: FontWeight.bold,
color: StartPage.primaryColor,
),
),
SizedBox(height: 4),
Text(
"Monitoring Nilai Papan Pembelajaran",
style: TextStyle(fontSize: 16),
),
],
),
),
],
),
),
),
const SizedBox(height: 16),
//================ TENTANG =================
Container(
width: double.infinity,
padding: const EdgeInsets.all(12),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(30),
boxShadow: const [
BoxShadow(
color: Colors.black12,
blurRadius: 15,
offset: Offset(0, 6),
),
],
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Image.asset(
"assets/polije.png",
width: 90,
height: 45,
fit: BoxFit.contain,
),
const SizedBox(width: 15),
const Expanded(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
"Tentang Aplikasi",
style: TextStyle(
fontSize: 20,
fontWeight: FontWeight.bold,
color: StartPage.primaryColor,
),
),
SizedBox(height: 10),
],
),
),
],
),
const SizedBox(height: 10),
const Text(
"Score_PAI merupakan aplikasi monitoring nilai dari papan pembelajaran interaktif yang digunakan untuk membantu guru dalam memantau hasil belajar siswa secara real-time. Selain menampilkan hasil nilai, aplikasi ini juga menyediakan fitur untuk mengunduh data nilai dalam bentuk file Excel sehingga memudahkan guru dalam melakukan dokumentasi dan pengolahan nilai.",
textAlign: TextAlign.justify,
style: TextStyle(
fontSize: 12,
height: 1.3,
color: Colors.black87,
),
),
const SizedBox(height: 6),
const Divider(),
const SizedBox(height: 10),
const Text(
"Dibuat Oleh",
style: TextStyle(
fontWeight: FontWeight.bold,
color: primaryColor,
fontSize: 14,
),
),
const SizedBox(height: 8),
const Row(
children: [
Icon(Icons.person, color: primaryColor, size: 18),
SizedBox(width: 8),
Text(
"Nanda Setia Arianti",
style: TextStyle(fontSize: 12),
),
],
),
const SizedBox(height: 6),
const Row(
children: [
Icon(Icons.school, color: primaryColor, size: 18),
SizedBox(width: 8),
Text(
"Teknik Komputer Angkatan 2023",
style: TextStyle(fontSize: 12),
),
],
),
const SizedBox(height: 6),
const Row(
children: [
Icon(
Icons.location_city,
color: primaryColor,
size: 18,
),
SizedBox(width: 8),
Text(
"Politeknik Negeri Jember",
style: TextStyle(fontSize: 12),
),
],
),
const SizedBox(height: 6),
const Row(
children: [
Icon(
Icons.calendar_month,
color: primaryColor,
size: 18,
),
SizedBox(width: 8),
Text("April 2026", style: TextStyle(fontSize: 12)),
],
),
],
),
),
const SizedBox(height: 16),
//================ BUTTON =================
SizedBox(
width: double.infinity,
height: 46,
child: DecoratedBox(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(35),
gradient: const LinearGradient(
colors: [primaryColor, secondaryColor],
),
),
child: ElevatedButton(
onPressed: () {
Navigator.pushReplacement(
context,
MaterialPageRoute(builder: (_) => const LoginPage()),
);
},
style: ElevatedButton.styleFrom(
backgroundColor: Colors.transparent,
shadowColor: Colors.transparent,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(35),
),
),
child: const Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(
"Mulai",
style: TextStyle(
fontSize: 17,
fontWeight: FontWeight.bold,
color: Colors.white,
),
),
SizedBox(width: 10),
Icon(Icons.arrow_forward_rounded, color: Colors.white),
],
),
),
),
),
const SizedBox(height: 6),
//================ SPESIFIKASI =================
Container(
width: double.infinity,
padding: const EdgeInsets.symmetric(
horizontal: 20,
vertical: 14,
),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(30),
boxShadow: const [
BoxShadow(
color: Colors.black12,
blurRadius: 15,
offset: Offset(0, 6),
),
],
),
child: const Column(
children: [
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Icon(Icons.settings, color: primaryColor),
SizedBox(width: 8),
Text(
"Spesifikasi Aplikasi",
style: TextStyle(
fontSize: 16,
fontWeight: FontWeight.bold,
color: primaryColor,
),
),
],
),
SizedBox(height: 10),
Row(
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: [
SpecItem(
icon: Icons.android,
title: "Platform",
value: "Android",
),
SpecItem(
icon: Icons.phone_android,
title: "Versi",
value: "7.0+",
),
SpecItem(
icon: Icons.language,
title: "Bahasa",
value: "Indonesia",
),
SpecItem(
icon: Icons.info,
title: "App",
value: "1.0.0",
iconColor: Color(0xffD6A419),
),
],
),
],
),
),
const SizedBox(height: 8),
],
),
),
),
);
}
}
//================ FEATURE CARD =================
class FeatureCard extends StatelessWidget {
final IconData icon;
final String title;
const FeatureCard({super.key, required this.icon, required this.title});
@override
Widget build(BuildContext context) {
return Container(
width: 72,
height: 72,
decoration: BoxDecoration(
color: const Color(0xffF2F8EC),
borderRadius: BorderRadius.circular(15),
),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Icon(icon, color: StartPage.primaryColor, size: 24),
const SizedBox(height: 5),
Padding(
padding: const EdgeInsets.symmetric(horizontal: 3),
child: Text(
title,
textAlign: TextAlign.center,
style: const TextStyle(fontSize: 9, fontWeight: FontWeight.w600),
),
),
],
),
);
}
}
//================ SPEC ITEM =================
class SpecItem extends StatelessWidget {
final IconData icon;
final String title;
final String value;
final Color iconColor;
const SpecItem({
super.key,
required this.icon,
required this.title,
required this.value,
this.iconColor = StartPage.primaryColor,
});
@override
Widget build(BuildContext context) {
return SizedBox(
width: 70,
child: Column(
children: [
Container(
width: 52,
height: 52,
decoration: BoxDecoration(
color: const Color(0xffF4F8EE),
borderRadius: BorderRadius.circular(15),
),
child: Icon(icon, color: iconColor, size: 28),
),
const SizedBox(height: 10),
Text(
title,
textAlign: TextAlign.center,
style: const TextStyle(fontSize: 11, color: Colors.black54),
),
const SizedBox(height: 4),
Text(
value,
textAlign: TextAlign.center,
style: const TextStyle(fontSize: 12, fontWeight: FontWeight.bold),
),
],
),
);
}
}