fixing mobile view

This commit is contained in:
='fauz 2025-04-14 15:14:10 +07:00
parent 64e1abb8db
commit 6607ee4906
22 changed files with 288 additions and 235 deletions

View File

@ -8,7 +8,7 @@ plugins {
android { android {
namespace = "com.example.furibase" namespace = "com.example.furibase"
//compileSdk = flutter.compileSdkVersion //compileSdk = flutter.compileSdkVersion
compileSdk = 34 compileSdk = 35
ndkVersion = "27.0.12077973" ndkVersion = "27.0.12077973"
//ndkVersion = flutter.ndkVersion //ndkVersion = flutter.ndkVersion
@ -29,7 +29,7 @@ android {
//minSdk = flutter.minSdkVersion //minSdk = flutter.minSdkVersion
//targetSdk = flutter.targetSdkVersion //targetSdk = flutter.targetSdkVersion
minSdk = 24 // Set to 24 or higher minSdk = 24 // Set to 24 or higher
targetSdk = 34 targetSdk = 35
versionCode = flutter.versionCode versionCode = flutter.versionCode
versionName = flutter.versionName versionName = flutter.versionName
} }

View File

@ -19,7 +19,7 @@ class CardList extends StatelessWidget {
10.0, 10.0,
), // Opsional: membuat gambar lebih rounded ), // Opsional: membuat gambar lebih rounded
child: Image.asset( child: Image.asset(
'images/cepott.png', // Ganti dengan path gambar Anda 'assets/images/cepott.png', // Ganti dengan path gambar Anda
width: 80, // Atur ukuran gambar width: 80, // Atur ukuran gambar
height: 120, height: 120,
fit: BoxFit.cover, fit: BoxFit.cover,

View File

@ -13,6 +13,7 @@ class CollectionContainer extends StatelessWidget {
final Color? textColor; final Color? textColor;
final double? lblSize; final double? lblSize;
final bool? circle; final bool? circle;
final Color? colorContiner;
const CollectionContainer({ const CollectionContainer({
super.key, super.key,
this.label, this.label,
@ -26,6 +27,7 @@ class CollectionContainer extends StatelessWidget {
this.iconw, this.iconw,
this.lblSize, this.lblSize,
this.circle, this.circle,
this.colorContiner,
}); });
@override @override
@ -96,7 +98,7 @@ class CollectionContainer extends StatelessWidget {
width: 20, width: 20,
height: 20, height: 20,
colorFilter: const ColorFilter.mode( colorFilter: const ColorFilter.mode(
Color.fromARGB(255, 118, 3, 3), Color.fromARGB(255, 255, 255, 255),
BlendMode.srcIn, BlendMode.srcIn,
), ),
), ),

View File

@ -14,6 +14,7 @@ class CollectionContainer extends StatelessWidget {
final double? lblSize; final double? lblSize;
final bool? circle; final bool? circle;
final Color? colorContiner; final Color? colorContiner;
final bool? small;
const CollectionContainer({ const CollectionContainer({
Key? key, Key? key,
@ -29,6 +30,7 @@ class CollectionContainer extends StatelessWidget {
this.lblSize, this.lblSize,
this.circle, this.circle,
this.colorContiner, this.colorContiner,
this.small,
}) : super(key: key); }) : super(key: key);
@override @override
@ -55,7 +57,10 @@ class CollectionContainer extends StatelessWidget {
padding: const EdgeInsets.all(8.0), padding: const EdgeInsets.all(8.0),
child: Center( child: Center(
child: Padding( child: Padding(
padding: const EdgeInsets.only(bottom: 30.0), padding:
(small ?? false)
? const EdgeInsets.only(bottom: 5.0)
: const EdgeInsets.only(bottom: 30.0),
child: child:
imageSvg != null && imageSvg!.isNotEmpty imageSvg != null && imageSvg!.isNotEmpty
? Container( ? Container(
@ -72,9 +77,10 @@ class CollectionContainer extends StatelessWidget {
) )
: null, : null,
child: Padding( child: Padding(
padding: const EdgeInsets.all( padding:
8.0, (small ?? false)
), // Tambahkan padding di sini ? const EdgeInsets.all(1.0)
: const EdgeInsets.all(8.0),
child: SvgPicture.asset( child: SvgPicture.asset(
imageSvg!, imageSvg!,
width: iconw ?? 40, width: iconw ?? 40,
@ -102,7 +108,7 @@ class CollectionContainer extends StatelessWidget {
), ),
), ),
Positioned( Positioned(
bottom: 10, bottom: (small ?? false) ? 0 : 10,
left: 0, left: 0,
right: 0, right: 0,
child: Text( child: Text(

View File

@ -22,7 +22,7 @@ class MainMenu extends StatelessWidget {
children: [ children: [
MenuButton( MenuButton(
label: "E-furibuddy", label: "E-furibuddy",
icon: 'icons/furrybuddy.svg', icon: 'assets/icons/furrybuddy.svg',
onPress: onPress:
() => { () => {
Navigator.push( Navigator.push(
@ -33,7 +33,7 @@ class MainMenu extends StatelessWidget {
), ),
MenuButton( MenuButton(
label: "Koleksi", label: "Koleksi",
icon: 'icons/koleksi.svg', icon: 'assets/icons/Koleksi.svg',
onPress: onPress:
() => { () => {
Navigator.push( Navigator.push(
@ -45,7 +45,7 @@ class MainMenu extends StatelessWidget {
SizedBox(width: 120), SizedBox(width: 120),
MenuButton( MenuButton(
label: "Pustaka", label: "Pustaka",
icon: 'icons/Pustaka.svg', icon: 'assets/icons/Pustaka.svg',
onPress: onPress:
() => { () => {
Navigator.push( Navigator.push(
@ -56,7 +56,7 @@ class MainMenu extends StatelessWidget {
), ),
MenuButton( MenuButton(
label: "Saya", label: "Saya",
icon: 'icons/Saya.svg', icon: 'assets/icons/Saya.svg',
onPress: onPress:
() => { () => {
Navigator.push( Navigator.push(

View File

@ -7,25 +7,25 @@ class ScanButton extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Expanded( return Container(
child: Container( width: 96,
decoration: BoxDecoration( height: 96,
shape: BoxShape.circle, decoration: BoxDecoration(
color: const Color.fromARGB(223, 67, 63, 179), shape: BoxShape.circle,
), color: const Color.fromARGB(223, 67, 63, 179),
padding: EdgeInsets.all(10), ),
child: IconButton( padding: EdgeInsets.all(10),
icon: SvgPicture.asset( child: IconButton(
'icons/Scan.svg', icon: SvgPicture.asset(
width: 60, 'assets/icons/Scan.svg',
height: 60, width: 60,
colorFilter: ColorFilter.mode( height: 60,
Color.fromARGB(255, 217, 219, 227), colorFilter: ColorFilter.mode(
BlendMode.srcIn, Color.fromARGB(255, 217, 219, 227),
), BlendMode.srcIn,
), ),
onPressed: () {},
), ),
onPressed: () {},
), ),
); );
} }

View File

@ -24,8 +24,8 @@ class TabMenuButton extends StatelessWidget {
IconButton( IconButton(
icon: SvgPicture.asset( icon: SvgPicture.asset(
icon!, icon!,
width: 28, width: 20,
height: 28, height: 20,
colorFilter: ColorFilter.mode( colorFilter: ColorFilter.mode(
isSelected isSelected
? const Color.fromARGB(255, 106, 24, 207) ? const Color.fromARGB(255, 106, 24, 207)
@ -38,7 +38,7 @@ class TabMenuButton extends StatelessWidget {
GestureDetector( GestureDetector(
onTap: onPress, // Menggunakan satu event handler saja onTap: onPress, // Menggunakan satu event handler saja
child: Container( child: Container(
width: 120, width: 110,
padding: const EdgeInsets.symmetric(vertical: 8, horizontal: 16), padding: const EdgeInsets.symmetric(vertical: 8, horizontal: 16),
decoration: BoxDecoration( decoration: BoxDecoration(
color: color:

View File

@ -1,11 +1,13 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:furibase/components/navbar_container.dart'; import 'package:flutter/services.dart';
import 'package:furibase/providers/character_provider.dart'; import 'package:furibase/providers/character_provider.dart';
import 'package:furibase/screen/Home_screen.dart'; import 'package:furibase/screen/Home_screen.dart';
import 'package:furibase/screen/drraw_screen.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
void main() { void main() {
WidgetsFlutterBinding.ensureInitialized();
SystemChrome.setEnabledSystemUIMode(SystemUiMode.immersiveSticky);
runApp(const MyApp()); runApp(const MyApp());
} }

View File

@ -4,7 +4,6 @@ import 'package:furibase/components/bottom_navbar.dart';
import 'package:furibase/components/buildcard_info.dart'; import 'package:furibase/components/buildcard_info.dart';
import 'package:furibase/components/main_menu.dart'; import 'package:furibase/components/main_menu.dart';
import 'package:furibase/components/scan_button.dart'; import 'package:furibase/components/scan_button.dart';
import 'package:furibase/components/topbar_container.dart';
class HomeScreen extends StatefulWidget { class HomeScreen extends StatefulWidget {
HomeScreen({super.key}); HomeScreen({super.key});
@ -71,11 +70,13 @@ class _HomeScreenState extends State<HomeScreen> {
body: Stack( body: Stack(
children: <Widget>[ children: <Widget>[
Positioned.fill( Positioned.fill(
child: Container( child: RepaintBoundary(
decoration: BoxDecoration( child: Container(
image: DecorationImage( decoration: const BoxDecoration(
image: AssetImage("images/background.jpeg"), image: const DecorationImage(
fit: BoxFit.cover, image: AssetImage("assets/images/background.jpeg"),
fit: BoxFit.cover,
),
), ),
), ),
), ),
@ -107,7 +108,7 @@ class _HomeScreenState extends State<HomeScreen> {
decoration: BoxDecoration( decoration: BoxDecoration(
borderRadius: BorderRadius.circular(10), borderRadius: BorderRadius.circular(10),
image: const DecorationImage( image: const DecorationImage(
image: AssetImage('images/luffy-u.png'), image: AssetImage('assets/images/luffy-u.png'),
fit: BoxFit.cover, fit: BoxFit.cover,
), ),
), ),
@ -220,7 +221,7 @@ class _HomeScreenState extends State<HomeScreen> {
), ),
), ),
SizedBox(height: 10), SizedBox(height: 10),
setHomeImage("images/luffy.png", 300), setHomeImage("assets/images/luffy.png", 300),
// Image.asset("images/luffy.png", width: 300), // Image.asset("images/luffy.png", width: 300),
], ],
), ),

View File

@ -24,50 +24,56 @@ class _CollectionCaraterScreenState extends State<CollectionCaraterScreen> {
children: [ children: [
Text("Favorite", style: TextStyle(color: Colors.black)), Text("Favorite", style: TextStyle(color: Colors.black)),
Divider(height: 20, color: Colors.transparent), Divider(height: 20, color: Colors.transparent),
Row( SingleChildScrollView(
// alignment: WrapAlignment.spaceAround, scrollDirection: Axis.horizontal,
spacing: 10, // Horizontal spacing between the containers child: Row(
// runSpacing: 10, // Vertical spacing between lines // alignment: WrapAlignment.spaceAround,
children: [ spacing: 10, // Horizontal spacing between the containers
CollectionContainer( // runSpacing: 10, // Vertical spacing between lines
label: "Luffy", children: [
imagesrc: 'images/luffy.png', CollectionContainer(
colorContiner: Color.fromRGBO(12, 199, 215, 1), label: "Luffy",
onTapAc: () => {}, imagesrc: 'assets/images/luffy.png',
), colorContiner: Color.fromRGBO(12, 199, 215, 1),
CollectionContainer( onTapAc: () => {},
label: "Oni Chan", ),
imagesrc: 'images/klipartz.png', CollectionContainer(
onTapAc: () => {}, label: "Oni Chan",
), imagesrc: 'assets/images/klipartz.png',
], onTapAc: () => {},
),
],
),
), ),
Divider(height: 20, color: Colors.transparent), Divider(height: 20, color: Colors.transparent),
Text("All", style: TextStyle(color: Colors.black)), Text("All", style: TextStyle(color: Colors.black)),
Divider(height: 20, color: Colors.transparent), Divider(height: 20, color: Colors.transparent),
Row( SingleChildScrollView(
// alignment: WrapAlignment.spaceAround, scrollDirection: Axis.horizontal,
spacing: 10, // Horizontal spacing between the containers child: Row(
// runSpacing: 10, // Vertical spacing between lines // alignment: WrapAlignment.spaceAround,
children: [ spacing: 10, // Horizontal spacing between the containers
CollectionContainer( // runSpacing: 10, // Vertical spacing between lines
label: "Luffy", children: [
imagesrc: 'images/luffy.png', CollectionContainer(
colorContiner: Color.fromRGBO(12, 199, 215, 1), label: "Luffy",
onTapAc: () => {}, imagesrc: 'assets/images/luffy.png',
), colorContiner: Color.fromRGBO(12, 199, 215, 1),
CollectionContainer( onTapAc: () => {},
label: "Oni Chan", ),
imagesrc: 'images/klipartz.png', CollectionContainer(
onTapAc: () => {}, label: "Oni Chan",
), imagesrc: 'assets/images/klipartz.png',
CollectionContainer( onTapAc: () => {},
label: "Cepot", ),
imagesrc: 'images/cepott.png', CollectionContainer(
colorContiner: Color.fromRGBO(237, 207, 100, 1.0), label: "Cepot",
onTapAc: () => {}, imagesrc: 'assets/images/cepott.png',
), colorContiner: Color.fromRGBO(237, 207, 100, 1.0),
], onTapAc: () => {},
),
],
),
), ),
], ],
), ),

View File

@ -29,13 +29,13 @@ class _CollectionFragmentScreenState extends State<CollectionFragmentScreen> {
children: [ children: [
CollectionContainer( CollectionContainer(
label: "Luffy", label: "Luffy",
imagesrc: 'images/ft_luffy.png', imagesrc: 'assets/images/ft_luffy.png',
onTapAc: () => {}, onTapAc: () => {},
colorContiner: ColorHelper.hexToColor("0xE2E5E9"), colorContiner: ColorHelper.hexToColor("0xE2E5E9"),
), ),
CollectionContainer( CollectionContainer(
label: "Oni Chan", label: "Oni Chan",
imagesrc: 'images/ft_cepot.png', imagesrc: 'assets/images/ft_cepot.png',
onTapAc: () => {}, onTapAc: () => {},
colorContiner: ColorHelper.hexToColor("0xE2E5E9"), colorContiner: ColorHelper.hexToColor("0xE2E5E9"),
), ),

View File

@ -11,8 +11,9 @@ class CollectionSkinScreen extends StatefulWidget {
class _CollectionSkinScreenState extends State<CollectionSkinScreen> { class _CollectionSkinScreenState extends State<CollectionSkinScreen> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return SingleChildScrollView( return Container(
scrollDirection: Axis.horizontal, // scrollDirection: Axis.horizontal,
height: MediaQuery.of(context).size.height,
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
@ -21,56 +22,57 @@ class _CollectionSkinScreenState extends State<CollectionSkinScreen> {
padding: EdgeInsets.only(top: 40, left: 20, right: 20, bottom: 20), padding: EdgeInsets.only(top: 40, left: 20, right: 20, bottom: 20),
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
Text("Luffy", style: TextStyle(color: Colors.black)), Text("Luffy", style: TextStyle(color: Colors.black)),
Divider(height: 10), Divider(height: 10),
Row( SingleChildScrollView(
// alignment: WrapAlignment.start, scrollDirection: Axis.horizontal,
spacing: 10, // Horizontal spacing between the containers child: Row(
// runSpacing: 10, // Vertical spacing between lines spacing: 10, // Horizontal spacing between the containers
children: [ children: [
CollectionContainer( CollectionContainer(
label: "Luffy Kimono", label: "Luffy Kimono",
imagesrc: 'images/luffy-kimono.png', imagesrc: 'assets/images/luffy-kimono.png',
colorContiner: Color.fromRGBO(12, 199, 215, 1), colorContiner: Color.fromRGBO(12, 199, 215, 1),
onTapAc: () => {}, onTapAc: () => {},
), ),
CollectionContainer( CollectionContainer(
label: "Luffy (Default)", label: "Luffy (Default)",
imagesrc: 'images/luffy.png', imagesrc: 'assets/images/luffy.png',
colorContiner: Color.fromRGBO(12, 199, 215, 1), colorContiner: Color.fromRGBO(12, 199, 215, 1),
onTapAc: () => {}, onTapAc: () => {},
), ),
CollectionContainer( CollectionContainer(
label: "Luffy King", label: "Luffy King",
imagesrc: 'images/luffy-king.png', imagesrc: 'assets/images/luffy-king.png',
colorContiner: Color.fromRGBO(12, 199, 215, 1), colorContiner: Color.fromRGBO(12, 199, 215, 1),
onTapAc: () => {}, onTapAc: () => {},
), ),
], ],
),
), ),
Divider(height: 20, color: Colors.transparent), Divider(height: 20, color: Colors.transparent),
Text("Others", style: TextStyle(color: Colors.black)), Text("Others", style: TextStyle(color: Colors.black)),
Divider(height: 10), Divider(height: 10),
Row( SingleChildScrollView(
// alignment: WrapAlignment.start, scrollDirection: Axis.horizontal,
spacing: 10, // Horizontal spacing between the containers child: Row(
// runSpacing: 10, // Vertical spacing between lines spacing: 10,
children: [ children: [
CollectionContainer( CollectionContainer(
label: "Oni Chan (Default)", label: "Oni Chan (Default)",
imagesrc: 'images/klipartz.png', imagesrc: 'assets/images/klipartz.png',
onTapAc: () => {}, onTapAc: () => {},
), ),
CollectionContainer( CollectionContainer(
label: "Cepot (Default)", label: "Cepot (Default)",
imagesrc: 'images/cepott.png', imagesrc: 'assets/images/cepott.png',
colorContiner: Color.fromRGBO(237, 207, 100, 1.0), colorContiner: Color.fromRGBO(237, 207, 100, 1.0),
onTapAc: () => {}, onTapAc: () => {},
), ),
], ],
),
), ),
], ],
), ),

View File

@ -36,6 +36,7 @@ class _KoleksiScreenState extends State<KoleksiScreen> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Scaffold( return Scaffold(
extendBody: true,
body: Stack( body: Stack(
children: <Widget>[ children: <Widget>[
Positioned.fill( Positioned.fill(
@ -115,9 +116,9 @@ class _KoleksiScreenState extends State<KoleksiScreen> {
// ), // ),
// ), // ),
Positioned( Positioned(
top: 80, top: 70,
left: 40, left: 10,
right: 40, right: 10,
child: Container( child: Container(
// decoration: const BoxDecoration( // decoration: const BoxDecoration(
// borderRadius: BorderRadius.all(Radius.circular(20)), // borderRadius: BorderRadius.all(Radius.circular(20)),

View File

@ -39,7 +39,7 @@ class _ListDetailScreenState extends State<ListDetailScreen> {
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
Image.asset( Image.asset(
'images/default.png', // Ganti dengan gambar yang sesuai 'assets/images/default.png', // Ganti dengan gambar yang sesuai
width: 100, width: 100,
height: 100, height: 100,
fit: BoxFit.cover, fit: BoxFit.cover,

View File

@ -4,6 +4,7 @@ import 'package:furibase/components/card_list.dart';
import 'package:furibase/components/collection_container%20copy.dart'; import 'package:furibase/components/collection_container%20copy.dart';
import 'package:furibase/components/main_menu.dart'; import 'package:furibase/components/main_menu.dart';
import 'package:furibase/components/topbar_container.dart'; import 'package:furibase/components/topbar_container.dart';
import 'package:furibase/helpers/color_helper.dart';
import 'package:furibase/screen/pustaka/pustaka_detail_screen.dart'; import 'package:furibase/screen/pustaka/pustaka_detail_screen.dart';
class ListEducation extends StatefulWidget { class ListEducation extends StatefulWidget {
@ -43,13 +44,33 @@ class _ListEducationState extends State<ListEducation> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
String _searchQuery = ""; String _searchQuery = "";
final List<Map<String, String>> _collections = [ final List<Map<String, dynamic>> _collections = [
{"label": "Kesehatan", "image": "icons/healthy.svg"}, {
{"label": "Gizi", "image": "icons/Nutrition.svg"}, "label": "Kesehatan",
{"label": "Pendidikan", "image": "icons/Education.svg"}, "image": "assets/icons/healthy.svg",
{"label": "Keselamatan", "image": "icons/Safety.svg"}, "color": "#cdd0ee",
"category": "kesehatan",
},
{
"label": "Gizi",
"image": "assets/icons/Nutrition.svg",
"color": "#e8e29a",
"category": "gizi",
},
{
"label": "Pendidikan",
"image": "assets/icons/Education.svg",
"color": "#efd8c6",
"category": "pendidikan",
},
{
"label": "Keselamatan",
"image": "assets/icons/Safety.svg",
"color": "#cef1da",
"category": "keselamatan",
},
]; ];
List<Map<String, String>> filteredCollections = List<Map<String, dynamic>> filteredCollections =
_collections _collections
.where( .where(
(item) => item["label"]!.toLowerCase().contains( (item) => item["label"]!.toLowerCase().contains(
@ -66,13 +87,13 @@ class _ListEducationState extends State<ListEducation> {
), ),
actions: <Widget>[], actions: <Widget>[],
), ),
backgroundColor: Colors.black26, backgroundColor: const Color.fromARGB(255, 255, 255, 255),
body: Column( body: Column(
children: [ children: [
// Header Section // Header Section
Container( Container(
width: MediaQuery.of(context).size.width, width: MediaQuery.of(context).size.width,
height: 165, height: 150,
decoration: BoxDecoration( decoration: BoxDecoration(
color: const Color.fromARGB(225, 79, 76, 182), color: const Color.fromARGB(225, 79, 76, 182),
borderRadius: BorderRadius.only( borderRadius: BorderRadius.only(
@ -85,7 +106,7 @@ class _ListEducationState extends State<ListEducation> {
Padding( Padding(
padding: const EdgeInsets.symmetric( padding: const EdgeInsets.symmetric(
horizontal: 20, horizontal: 20,
vertical: 20, vertical: 6,
), ),
child: Container( child: Container(
height: 47, height: 47,
@ -141,21 +162,17 @@ class _ListEducationState extends State<ListEducation> {
return CollectionContainer( return CollectionContainer(
label: item["label"]!, label: item["label"]!,
imageSvg: item["image"]!, imageSvg: item["image"]!,
iconw: 60, iconw: 20,
iconh: 60, iconh: 20,
width: 70, width: 70,
height: 70, height: 70,
circle: false,
textColor: Colors.black, textColor: Colors.black,
lblSize: 10, lblSize: 10,
colorContiner: ColorHelper.hexToColor(item["color"]),
onTapAc: onTapAc:
() => { () => {
Navigator.push( searchController.clear(),
context, filterSearch(item["category"]),
MaterialPageRoute(
builder: (context) => ListEducation(),
),
),
}, },
); );
}).toList(), }).toList(),

View File

@ -91,25 +91,25 @@ class _PustakaScreenState extends State<PustakaScreen> {
final List<Map<String, String>> _collections = [ final List<Map<String, String>> _collections = [
{ {
"label": "Luffy", "label": "Luffy",
"image": "images/luffy.png", "image": "assets/images/luffy.png",
"description": "description":
"Karakter utama di One Piece.\nDia adalah bajak laut yang bercita-cita menjadi Raja Bajak Laut.", "Karakter utama di One Piece.\nDia adalah bajak laut yang bercita-cita menjadi Raja Bajak Laut.",
}, },
{ {
"label": "Oni Chan", "label": "Oni Chan",
"image": "images/klipartz.png", "image": "assets/images/klipartz.png",
"description": "description":
"Karakter ikonik dari anime.\nIa dikenal karena sifatnya yang protektif dan penyayang.", "Karakter ikonik dari anime.\nIa dikenal karena sifatnya yang protektif dan penyayang.",
}, },
{ {
"label": "Cepot", "label": "Cepot",
"image": "images/cepott.png", "image": "assets/images/cepott.png",
"description": "description":
"Tokoh wayang golek terkenal.\nCepot dikenal dengan lelucon dan kebijaksanaannya.", "Tokoh wayang golek terkenal.\nCepot dikenal dengan lelucon dan kebijaksanaannya.",
}, },
{ {
"label": "Cepot", "label": "Cepot",
"image": "images/cepott.png", "image": "assets/images/cepott.png",
"description": "description":
"Tokoh wayang golek terkenal.\nCepot dikenal dengan lelucon dan kebijaksanaannya.", "Tokoh wayang golek terkenal.\nCepot dikenal dengan lelucon dan kebijaksanaannya.",
}, },

View File

@ -22,10 +22,26 @@ class _PustakaScreenState extends State<PustakaScreen> {
String _searchQuery = ""; String _searchQuery = "";
final List<Map<String, dynamic>> _collections = [ final List<Map<String, dynamic>> _collections = [
{"label": "Kesehatan", "image": "icons/healthy.svg", "color": "#cdd0ee"}, {
{"label": "Gizi", "image": "icons/Nutrition.svg", "color": "#e8e29a"}, "label": "Kesehatan",
{"label": "Pendidikan", "image": "icons/Education.svg", "color": "#efd8c6"}, "image": "assets/icons/healthy.svg",
{"label": "Keselamatan", "image": "icons/Safety.svg", "color": "#cef1da"}, "color": "#cdd0ee",
},
{
"label": "Gizi",
"image": "assets/icons/Nutrition.svg",
"color": "#e8e29a",
},
{
"label": "Pendidikan",
"image": "assets/icons/Education.svg",
"color": "#efd8c6",
},
{
"label": "Keselamatan",
"image": "assets/icons/Safety.svg",
"color": "#cef1da",
},
]; ];
void _onMenuTapped(int index) { void _onMenuTapped(int index) {
@ -51,7 +67,7 @@ class _PustakaScreenState extends State<PustakaScreen> {
.toList(); .toList();
return Scaffold( return Scaffold(
backgroundColor: const Color.fromARGB(255, 255, 255, 255), // backgroundColor: const Color.fromARGB(255, 255, 255, 255),
body: Stack( body: Stack(
children: [ children: [
//Top Bar //Top Bar
@ -110,7 +126,7 @@ class _PustakaScreenState extends State<PustakaScreen> {
height: 47, height: 47,
decoration: BoxDecoration( decoration: BoxDecoration(
borderRadius: BorderRadius.circular(20), borderRadius: BorderRadius.circular(20),
color: const Color.fromARGB(50, 237, 227, 227), color: const Color.fromARGB(255, 237, 227, 227),
), ),
padding: const EdgeInsets.symmetric(horizontal: 15), padding: const EdgeInsets.symmetric(horizontal: 15),
child: Row( child: Row(
@ -141,16 +157,17 @@ class _PustakaScreenState extends State<PustakaScreen> {
), ),
), ),
// Collection Items // Collection Items
Expanded( Container(
height: 440,
child: Padding( child: Padding(
padding: const EdgeInsets.symmetric( padding: const EdgeInsets.symmetric(
horizontal: 100, horizontal: 58,
vertical: 40, vertical: 60,
), ),
child: GridView.builder( child: GridView.builder(
gridDelegate: gridDelegate:
const SliverGridDelegateWithMaxCrossAxisExtent( const SliverGridDelegateWithMaxCrossAxisExtent(
maxCrossAxisExtent: 140, // Maksimum lebar tiap item maxCrossAxisExtent: 140,
mainAxisSpacing: 20, mainAxisSpacing: 20,
crossAxisSpacing: 20, crossAxisSpacing: 20,
childAspectRatio: 1, // 1:1 rasio (kotak) childAspectRatio: 1, // 1:1 rasio (kotak)
@ -176,52 +193,27 @@ class _PustakaScreenState extends State<PustakaScreen> {
}, },
); );
}, },
// GridView.count(
// crossAxisCount: 2,
// crossAxisSpacing: 20,
// mainAxisSpacing: 20,
// children:
// filteredCollections.map((item) {
// return CollectionContainer(
// label: item["label"]!,
// imageSvg: item["image"]!,
// width: 80,
// height: 80,
// textColor: Colors.black,
// circle: true,
// colorContiner: item["color"]! as Color,
// onTapAc:
// () => {
// Navigator.push(
// context,
// MaterialPageRoute(
// builder: (context) => ListEducation(),
// ),
// ),
// },
// );
// }).toList(),
),
),
),
SizedBox(
child: Padding(
padding: const EdgeInsets.symmetric(
horizontal: 40,
vertical: 1,
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text("List Topic", style: TextStyle(color: Colors.black)),
Divider(color: Colors.transparent),
],
), ),
), ),
), ),
// SizedBox(
// child: Padding(
// padding: const EdgeInsets.symmetric(
// horizontal: 5,
// vertical: 1,
// ),
// child: Column(
// crossAxisAlignment: CrossAxisAlignment.start,
// children: [
// Text("List Topic", style: TextStyle(color: Colors.black)),
// Divider(color: Colors.transparent),
// ],
// ),
// ),
// ),
// Horizontal Scroll List // Horizontal Scroll List
Padding( Padding(
padding: EdgeInsets.symmetric(horizontal: 40, vertical: 10), padding: EdgeInsets.symmetric(horizontal: 5, vertical: 5),
child: SizedBox( child: SizedBox(
width: MediaQuery.of(context).size.width, width: MediaQuery.of(context).size.width,
height: 100, height: 100,
@ -282,7 +274,7 @@ class _PustakaScreenState extends State<PustakaScreen> {
), ),
), ),
// Bottom Navigation // Bottom Navigation
MainMenu(), // MainMenu(),
], ],
), ),
// BG MEnu // BG MEnu

View File

@ -7,7 +7,7 @@ import 'package:furibase/components/scan_button.dart';
import 'package:image_picker/image_picker.dart'; import 'package:image_picker/image_picker.dart';
import 'dart:io'; import 'dart:io';
import 'package:image_picker_web/image_picker_web.dart'; // import 'package:image_picker_web/image_picker_web.dart';
import 'package:flutter/foundation.dart' show kIsWeb; import 'package:flutter/foundation.dart' show kIsWeb;
class AkunSaya extends StatefulWidget { class AkunSaya extends StatefulWidget {
@ -22,16 +22,16 @@ class _AkunSayaState extends State<AkunSaya> {
Future<void> _pickImage(bool isProfile) async { Future<void> _pickImage(bool isProfile) async {
if (kIsWeb) { if (kIsWeb) {
Uint8List? bytesFromPicker = await ImagePickerWeb.getImageAsBytes(); // Uint8List? bytesFromPicker = await ImagePickerWeb.getImageAsBytes();
if (bytesFromPicker != null) { // if (bytesFromPicker != null) {
setState(() { // setState(() {
if (isProfile) { // if (isProfile) {
_profileImage = bytesFromPicker; // _profileImage = bytesFromPicker;
} else { // } else {
_headerImage = bytesFromPicker; // _headerImage = bytesFromPicker;
} // }
}); // });
} // }
} else { } else {
final pickedFile = await _picker.pickImage(source: ImageSource.gallery); final pickedFile = await _picker.pickImage(source: ImageSource.gallery);
if (pickedFile != null) { if (pickedFile != null) {

View File

@ -86,7 +86,7 @@ class _ProfileScreenState extends State<ProfileScreenCopy> {
as ImageProvider as ImageProvider
: FileImage(_headerImage) : FileImage(_headerImage)
as ImageProvider) as ImageProvider)
: AssetImage('images/background.jpeg'), : AssetImage('assets/images/background.jpeg'),
fit: BoxFit.cover, fit: BoxFit.cover,
), ),
), ),

View File

@ -1,7 +1,7 @@
import 'dart:typed_data'; import 'dart:typed_data';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_html/flutter_html.dart'; // import 'package:flutter_html/flutter_html.dart';
import 'package:furibase/components/bottom_navbar.dart'; import 'package:furibase/components/bottom_navbar.dart';
import 'package:furibase/components/main_menu.dart'; import 'package:furibase/components/main_menu.dart';
import 'package:furibase/components/scan_button.dart'; import 'package:furibase/components/scan_button.dart';
@ -10,7 +10,7 @@ import 'package:furibase/screen/saya/akun_saya.dart';
import 'package:image_picker/image_picker.dart'; import 'package:image_picker/image_picker.dart';
import 'dart:io'; import 'dart:io';
import 'package:image_picker_web/image_picker_web.dart'; // import 'package:image_picker_web/image_picker_web.dart';
import 'package:flutter/foundation.dart' show kIsWeb; import 'package:flutter/foundation.dart' show kIsWeb;
class ProfileScreen extends StatefulWidget { class ProfileScreen extends StatefulWidget {
@ -28,16 +28,16 @@ class _ProfileScreenState extends State<ProfileScreen> {
Future<void> _pickImage(bool isProfile) async { Future<void> _pickImage(bool isProfile) async {
if (kIsWeb) { if (kIsWeb) {
Uint8List? bytesFromPicker = await ImagePickerWeb.getImageAsBytes(); // Uint8List? bytesFromPicker = await ImagePickerWeb.getImageAsBytes();
if (bytesFromPicker != null) { // if (bytesFromPicker != null) {
setState(() { // setState(() {
if (isProfile) { // if (isProfile) {
_profileImage = bytesFromPicker; // _profileImage = bytesFromPicker;
} else { // } else {
_headerImage = bytesFromPicker; // _headerImage = bytesFromPicker;
} // }
}); // });
} // }
} else { } else {
final pickedFile = await _picker.pickImage(source: ImageSource.gallery); final pickedFile = await _picker.pickImage(source: ImageSource.gallery);
if (pickedFile != null) { if (pickedFile != null) {

View File

@ -167,7 +167,7 @@ packages:
source: hosted source: hosted
version: "5.0.0" version: "5.0.0"
flutter_plugin_android_lifecycle: flutter_plugin_android_lifecycle:
dependency: transitive dependency: "direct main"
description: description:
name: flutter_plugin_android_lifecycle name: flutter_plugin_android_lifecycle
sha256: "1c2b787f99bdca1f3718543f81d38aa1b124817dfeb9fb196201bea85b6134bf" sha256: "1c2b787f99bdca1f3718543f81d38aa1b124817dfeb9fb196201bea85b6134bf"

View File

@ -43,6 +43,7 @@ dependencies:
flutter_html: ^3.0.0-beta.2 flutter_html: ^3.0.0-beta.2
image_picker_for_web: ^3.0.6 image_picker_for_web: ^3.0.6
image_picker_web: ^4.0.0 image_picker_web: ^4.0.0
flutter_plugin_android_lifecycle: ^2.0.9
# arcore_flutter_plugin: ^0.2.0-alpha # arcore_flutter_plugin: ^0.2.0-alpha
# flutter_unity_widget: ^2022.2.1 # flutter_unity_widget: ^2022.2.1
# arcore_flutter_plugin: # arcore_flutter_plugin:
@ -72,9 +73,32 @@ flutter:
uses-material-design: true uses-material-design: true
# To add assets to your application, add an assets section, like this: # To add assets to your application, add an assets section, like this:
# assets: assets:
# - images/a_dot_burr.jpeg - assets/images/Artboard 15@4x.png
# - images/a_dot_ham.jpeg - assets/images/Artboard 16@4x.png
- assets/images/background.jpeg
- assets/images/cepott.png
- assets/images/ft_cepot.png
- assets/images/ft_luffy.png
- assets/images/klipartz.png
- assets/images/luffy-kimono.png
- assets/images/luffy-king.png
- assets/images/luffy-u.png
- assets/images/luffy.gif
- assets/images/luffy.png
# SVG files
- assets/icons/E-furrybuddy.svg
- assets/icons/E-furrybuddy1.svg
- assets/icons/Education.svg
- assets/icons/furrybuddy.svg
- assets/icons/healthy.svg
- assets/icons/Koleksi.svg
- assets/icons/Nutrition.svg
- assets/icons/Pustaka.svg
- assets/icons/Safety.svg
- assets/icons/Saya.svg
- assets/icons/Scan.svg
# An image asset can refer to one or more resolution-specific "variants", see # An image asset can refer to one or more resolution-specific "variants", see
# https://flutter.dev/to/resolution-aware-images # https://flutter.dev/to/resolution-aware-images