Commit ec2a72b9 authored by Dio Maulana's avatar Dio Maulana

home page dan variant page

parent 21f22719
......@@ -244,10 +244,11 @@ double heightTombol = 0.06; // untuk dikalikan di height media query
//** core warna */
// const Color backgroundColor = Colors.white;
const Color backgroundColor = Color(0xffE5E5E5);
const Color backgroundColor = Color(0xffF4F4F4);
const textColorTabel = Color(0xff333333);
const textColorBlack = Color(0xff000000);
const textColorRed = Color(0xffE73636);
const textColorPlaceHolder = Color(0xffA89C9C);
const textGrey = Color(0xffE0E0E0);
const textGreyDeskripsi = Color(0xffBDBDBD);
const backgroundColorBottomSheet = Color(0xffE5E5E5);
......@@ -420,6 +421,10 @@ const heigthButtonBottom = 0.08;
const positionedBottom = 0.01;
//** padding bottom untuk button stack */
//** padding left right page */
const double paddingLeftRight = 20;
//** padding left right page */
//** Max widht screen */
bool useResponsive = isResponsive;
const double maxWidthScreens = 500;
......@@ -471,6 +476,9 @@ const double pencilSize = 0.02;
const String backIcon = '\uf060';
const double backIconSize = 0.03;
const String arrowBack = '\uf060';
const double arrowBackSize = 17;
const String shopingBag = '\uf290';
const double shopingBagSize = 0.03;
......
import 'dart:ui';
import 'package:byod/helper/helper.dart';
import 'package:flutter/material.dart';
......@@ -26,6 +24,15 @@ Text defaultText(
);
}
TextStyle appBarNameVariant({font = 17, Color color = textColorBlack}) {
return TextStyle(
fontFamily: 'Mulish',
fontSize: font,
fontWeight: FontWeight.w700,
color: color,
);
}
TextStyle tableNameStyle({font = 20, Color color = textColorTabel}) {
return TextStyle(
fontFamily: (fontFamily == '') ? null : fontFamily,
......@@ -58,7 +65,7 @@ TextStyle menuNameGridFav(
return TextStyle(
fontFamily: 'Roboto',
fontSize: font,
fontWeight: FontWeight.w500,
fontWeight: FontWeight.w600,
color: color,
);
}
......@@ -118,7 +125,7 @@ TextStyle subCategoryStyle({
return TextStyle(
fontFamily: 'Roboto',
fontSize: font,
fontWeight: FontWeight.w500,
fontWeight: FontWeight.w600,
color: color,
);
}
......@@ -142,7 +149,7 @@ TextStyle menuNameStyle({
return TextStyle(
fontFamily: 'Roboto',
fontSize: font,
fontWeight: FontWeight.w500,
fontWeight: FontWeight.w600,
color: color,
);
}
......@@ -272,6 +279,19 @@ Text fontAwesome(BuildContext context, String unicode, double fontSize,
);
}
Text fontAwesomeNew(String unicode, double fontSize,
{Color? color, isBold = true}) {
return Text(
unicode,
style: TextStyle(
fontFamily: 'FontAwesome',
fontSize: fontSize,
color: color,
fontWeight: (isBold) ? FontWeight.w600 : FontWeight.w400,
),
);
}
Text fontAwesomeCart(BuildContext context, String unicode, double fontSize,
{Color? color, isBold = true}) {
// double widthScreens = responsiveWidthScreen(context);
......@@ -533,6 +553,20 @@ TextStyle textStyleAddButton(
);
}
TextStyle variantStyleText(
{Color? textColor,
TextDecoration? decoration,
font = 20,
FontWeight? fontWeight}) {
return TextStyle(
fontFamily: (fontFamily == '') ? null : fontFamily,
fontSize: font,
fontWeight: (fontWeight == null) ? FontWeight.w600 : fontWeight,
color: (textColor == null) ? null : textColorBlack,
decoration: (decoration == null) ? null : decoration,
);
}
TextStyle textStyleRefresh(context) {
return TextStyle(
fontFamily: (fontFamily == '') ? null : fontFamily,
......
class CategoryList {
final String name;
final String id;
final double offset;
CategoryList({
required this.name,
required this.id,
required this.offset,
});
factory CategoryList.createCategoryList(Map<String, dynamic> json) {
return CategoryList(
id: json['id'],
name: json['name'],
offset: json['offset'] ?? 0,
);
}
}
......@@ -49,8 +49,10 @@ class _CategoryListHomeState extends State<CategoryListHome> {
.read<MenuSelectedBar>()
.selectedBarMenu(i, widget.categoryList[i].id);
widget.scrollController.animateTo(
(widget.favList.isNotEmpty) ? 371 : 0,
duration: Duration(milliseconds: animatedTime),
(widget.favList.isNotEmpty)
? 371
: 0, // 371 sudah dihituing pixelnya untuk awal banget dari menu item
duration: const Duration(milliseconds: 500),
curve: Curves.fastOutSlowIn,
);
},
......@@ -78,7 +80,7 @@ class _CategoryListHomeState extends State<CategoryListHome> {
key: const Key('underline'),
margin: const EdgeInsets.only(top: 27),
width: 30,
height: 2,
height: 1,
color: buttonColor)
: const SizedBox(
key: Key('underline'),
......
......@@ -357,9 +357,8 @@ class FavGridMenu extends StatelessWidget {
child: Container(
width: 22,
height: 22,
child: Image(
color: buttonColor,
image: const AssetImage('assets/icons/minus.png'),
child: const Image(
image: AssetImage('assets/icons/minus-blue.png'),
),
),
),
......
......@@ -63,7 +63,7 @@ class _FavoriteListState extends State<FavoriteList> {
key: const Key('underline'),
margin: const EdgeInsets.only(top: 2),
width: 30,
height: 2,
height: 1,
color: buttonColor)
: const SizedBox(
key: Key('underline'),
......
......@@ -15,6 +15,7 @@ import '../../models/order_details.dart';
import '../../models/order_variants.dart';
import 'bottom_sheet_menu.dart';
import 'bottom_sheet_variant.dart';
import 'variant_cat_new.dart';
class MenuListUtama extends StatelessWidget {
const MenuListUtama({
......@@ -242,27 +243,37 @@ class MenuListUtama extends StatelessWidget {
1,
[],
); // check pada bloc untuk mengethui list arraynya
// Navigator.push(
// context,
// MaterialPageRoute(
// builder: (_) => VariantCat(
// namaMenu: menuUtama.name,
// variantCategories:
// menuUtama.variantCat,
// initPrice: amountParseToInt(
// menuUtama.price),
// idItem: menuUtama.id,
// imageUrl:
// menuUtama.imageUrlThumbnail,
// listCurrentOrder: list,
// orderDetail: OrderDetail(
// allIdVariant: '',
// totalItem: 0,
// totalHarga: 0,
// note: '',
// orderVariant: [],
// ),
// )));
Navigator.push(
context,
MaterialPageRoute(
builder: (_) => VariantCat(
namaMenu: menuUtama.name,
variantCategories:
menuUtama.variantCat,
initPrice: amountParseToInt(
menuUtama.price),
idItem: menuUtama.id,
imageUrl:
menuUtama.imageUrlThumbnail,
listCurrentOrder: list,
orderDetail: OrderDetail(
allIdVariant: '',
totalItem: 0,
totalHarga: 0,
note: '',
orderVariant: [],
),
)));
context,
MaterialPageRoute(
builder: (_) => VariantCatNew(
initPrice:
amountParseToInt(menuUtama.price),
variantCategories: menuUtama.variantCat,
),
),
);
} else {
showModalBottomSheet(
backgroundColor: Colors.white.withOpacity(0),
......@@ -417,7 +428,7 @@ class MenuListUtama extends StatelessWidget {
child: Image(
color: buttonColor,
image: const AssetImage(
'assets/icons/minus.png'),
'assets/icons/minus-blue.png'),
),
),
),
......
This diff is collapsed.
This diff is collapsed.
// ignore_for_file: sized_box_for_whitespace
import 'package:byod/bloc/order_variant_temporary.dart';
import 'package:byod/bloc/order_variant_value.dart';
import 'package:byod/helper/widget/style.dart';
import 'package:byod/models/order_details.dart';
import 'package:byod/models/order_variants.dart';
import 'package:byod/models/variants.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import '../../helper/helper.dart';
// ignore: must_be_immutable
class VariantNew extends StatefulWidget {
List<Variants> variants;
String captioncategories;
int type;
int initPrice;
String idCategory;
OrderDetail orderDetail;
VariantNew(
{Key? key,
required this.variants,
required this.captioncategories,
required this.type,
required this.initPrice,
required this.idCategory,
required this.orderDetail})
: super(key: key);
@override
State<VariantNew> createState() => _VariantNewState();
}
class _VariantNewState extends State<VariantNew> {
String variantMenu = '';
List<dynamic> variantRadio = [];
List<String> optionalVariant = [];
@override
Widget build(BuildContext context) {
double widthScreen = responsiveWidthScreen(context);
double currentScreen = MediaQuery.of(context).size.width;
double maxWidthScreen = getMaxWidthScreen(context, useResponsive);
// if (variantRadio.isNotEmpty) {
// print(variantRadio[0]);
// }
FocusScopeNode currentFocus = FocusScope.of(context);
return BlocBuilder<OrderVariantValueBloc, List<OrderVariant>>(
builder: (context, orderVariants) {
return ListView.builder(
physics:
const NeverScrollableScrollPhysics(), // to disable GridView's scrolling
shrinkWrap: true,
itemCount: widget.variants.length,
itemBuilder: ((context, i) {
var priceVariant = amountParseToInt(widget.variants[i].price);
return BlocBuilder<OrderVariantTemporaryBloc, List<dynamic>>(
builder: (context, listOrders) {
var listOrder = listOrders[0];
var itemId = listOrder[0];
var satuanPrice = listOrder[1];
var initialValue = listOrder[2];
return variantList(
widthScreen,
i,
context,
priceVariant,
itemId,
satuanPrice,
initialValue,
orderVariants,
maxWidthScreen,
currentFocus);
// return variantList(widthScreen, i, context, priceVariant,
// itemId, satuanPrice, initialValue, orderVariants);
},
);
}));
},
);
}
Container variantList(
double widthScreen,
int i,
BuildContext context,
int priceVariant,
itemId,
satuanPrice,
initialValue,
List<OrderVariant> orderVariants,
double maxWidthScreen,
FocusScopeNode currentFocus,
) {
return Container(
width: (widthScreen > maxWidthScreen) ? maxWidthScreen : widthScreen,
child: Column(
children: [
Row(
children: [
Container(
width: 160,
child: defaultText(
context,
widget.variants[i].name,
maxLines: 2,
overFlow: TextOverflow.ellipsis,
style: variantStyleText(
fontWeight: FontWeight.w300,
font: 12,
),
),
),
Expanded(
// width: 170,
// color: Colors.blue,
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Container(
child: defaultText(
context,
(priceVariant > 0)
? formatNumber().format(priceVariant)
: "Free",
style: variantStyleText(
fontWeight: FontWeight.w300,
font: 12,
),
)),
(widget.type == typeMandatory)
? radioButton(
i,
itemId,
satuanPrice,
initialValue,
variantRadio,
priceVariant,
widget.idCategory,
orderVariants,
currentFocus,
)
: (widget.type == typeOptional)
? checkBoxButton(
i,
itemId,
satuanPrice,
initialValue,
variantRadio,
priceVariant,
widget.idCategory,
orderVariants,
currentFocus,
)
: const SizedBox()
],
),
),
],
)
],
),
);
}
Checkbox checkBoxButton(
int i,
String itemId,
int satuanHarga,
int initialValue,
List<dynamic> variantRadio,
int priceVariant,
String idCategory,
List<OrderVariant> orderVariants,
FocusScopeNode currentFocus,
) {
return Checkbox(
activeColor: buttonColor,
value: (optionalVariant.contains(widget.variants[i].id) == true)
? true
: false,
onChanged: (value) {
if (!currentFocus.hasPrimaryFocus) {
currentFocus.unfocus();
}
(value == true)
? optionalVariant.add(widget.variants[i].id)
: optionalVariant.remove(widget.variants[i].id);
context.read<OrderVariantValueBloc>().setOrderVariant(
idCategory,
widget.variants[i].id,
widget.variants[i].name,
priceVariant,
typeOptional,
orderVariants,
widget.captioncategories,
forChecBox: value);
setState(() {});
});
}
Radio<String> radioButton(
int i,
String itemId,
int satuanHarga,
int initialValue,
List<dynamic> variantRadio,
int priceVariant,
String idCategory,
List<OrderVariant> orderVariants,
FocusScopeNode currentFocus) {
return Radio(
value: widget.variants[i].id,
groupValue: variantMenu,
hoverColor: buttonColor,
activeColor: buttonColor,
onChanged: (newValue) {
if (!currentFocus.hasPrimaryFocus) {
currentFocus.unfocus();
}
// buat list untuk radio button
variantMenu = newValue.toString();
context.read<OrderVariantValueBloc>().setOrderVariant(
idCategory,
variantMenu.toString(),
widget.variants[i].name,
priceVariant,
typeMandatory,
orderVariants,
widget.captioncategories,
);
setState(() {});
});
}
}
......@@ -62,7 +62,7 @@ flutter:
- asset: assets/fonts/roboto/Roboto-Regular.ttf
- family: OpenSans
fonts:
- asset: assets/fonts/roboto/Roboto-Regular.ttf
- asset: assets/fonts/open_sans/OpenSans-Regular.ttf
- family: RobotoFlex
fonts:
- asset: assets/fonts/roboto_flex/RobotoFlex-Regular.ttf
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment