Commit 2cf5375a authored by DatHV's avatar DatHV
Browse files

update navigation padding

parent b3c72190
import 'package:flutter/foundation.dart';
class Constants {
static String get commonError => "Hệ thống không thể xử lý yêu cầu hiện tại. Vui lòng thử lại sau hoặc liên hệ hotline 1900599863 để được trợ giúp.";
......@@ -6,7 +7,10 @@ class Constants {
static var phoneNumberCount = 10;
static const timeoutSeconds = 30;
static const appStoreId = '1495923300';
static const double webTopPadding = 24.0;
static double get extendTopPaddingNavigation {
print('extendTopPaddingNavigation: $kIsWeb');
return kIsWeb ? 24.0 : 0.0;
}
}
class ErrorCodes {
......
......@@ -85,7 +85,6 @@ class PushNotification {
'body': body,
};
return screen;
// TODO handel title + body
}
// ===== Helpers =====
......
......@@ -191,7 +191,7 @@ extension RestfulAPIClientAllRequest on RestfulAPIClient {
"owner_id": ownerId,
"otp": otp,
"next_event_name": nextEventName,
"ttdne": 180, // TODO
"ttdne": 180,
"ttl": Constants.otpTtl, "resend_after_second": Constants.otpTtl,
};
return requestNormal(
......
import 'dart:math';
import 'package:flutter/material.dart';
import 'package:mypoint_flutter_app/core/utils/extensions/num_extension.dart';
import '../../app/config/constants.dart';
import '../../shared/widgets/base_view/base_screen.dart';
import '../../shared/widgets/base_view/basic_state.dart';
import '../../core/theme/base_color.dart';
......@@ -98,7 +99,7 @@ class _AffiliateBrandDetailScreenState extends BaseState<AffiliateBrandDetailScr
],
),
),
SafeArea(child: Padding(padding: const EdgeInsets.only(left: 12), child: CustomBackButton())),
SafeArea(child: Padding(padding: EdgeInsets.only(left: 12, top: Constants.extendTopPaddingNavigation), child: CustomBackButton())),
],
);
}),
......
......@@ -32,8 +32,8 @@ class _Campaign7DayScreenState extends BaseState<Campaign7DayScreen> with BasicS
super.initState();
String? campaignId;
final args = Get.arguments;
if (args is String) {
campaignId = args;
if (args is Map) {
campaignId = args['id'];
}
if (campaignId.orEmpty.isEmpty) {
WidgetsBinding.instance.addPostFrameCallback((_) {
......
import 'package:flutter/material.dart';
import '../../../app/config/constants.dart';
class Campaign7dayTopButtons extends StatelessWidget {
final VoidCallback? onBack;
final VoidCallback? onInfo;
......@@ -16,7 +18,7 @@ class Campaign7dayTopButtons extends StatelessWidget {
Widget build(BuildContext context) {
return SafeArea(
child: Padding(
padding: const EdgeInsets.symmetric(horizontal: 16.0, vertical: 8),
padding: EdgeInsets.only(left: 16, right: 16, bottom: 8, top: 8 + Constants.extendTopPaddingNavigation),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
......
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:mypoint_flutter_app/shared/widgets/alert/data_alert_model.dart';
import '../../shared/widgets/back_button.dart';
import '../../shared/widgets/base_view/base_screen.dart';
import '../../shared/widgets/base_view/basic_state.dart';
import '../../shared/preferences/data_preference.dart';
import '../../core/theme/base_color.dart';
import '../../shared/router_gage.dart';
import '../../shared/widgets/back_button.dart';
import '../../shared/widgets/custom_navigation_bar.dart';
import '../../shared/widgets/support_button.dart';
import '../login/login_viewmodel.dart';
import 'change_pass_viewmodel.dart';
......@@ -49,12 +50,11 @@ class _ChangePassScreenState extends BaseState<ChangePassScreen> with BasicState
onTap: hideKeyboard,
child: Scaffold(
resizeToAvoidBottomInset: false,
appBar: AppBar(
automaticallyImplyLeading: false,
backgroundColor: Colors.white,
centerTitle: true,
leading: CustomBackButton(),
actions: [SupportButton()],
appBar: CustomNavigationBar(
title: '',
backgroundImage: '',
leftButtons: [CustomBackButton()],
rightButtons: [SupportButton()],
),
backgroundColor: Colors.white,
body: SafeArea(
......@@ -95,10 +95,7 @@ class _ChangePassScreenState extends BaseState<ChangePassScreen> with BasicState
style: const TextStyle(fontSize: 14, color: BaseColor.second500),
children: [
const TextSpan(text: "Nhập mật khẩu đăng nhập cho tài khoản "),
TextSpan(
text: _phone,
style: const TextStyle(fontWeight: FontWeight.w500, color: BaseColor.primary500),
),
TextSpan(text: _phone, style: const TextStyle(fontWeight: FontWeight.w500, color: BaseColor.primary500)),
],
),
);
......@@ -165,21 +162,23 @@ class _ChangePassScreenState extends BaseState<ChangePassScreen> with BasicState
title: "Quên mật khẩu",
description: "Bạn cần đăng xuất khỏi tài khoản này để đặt lại mật khẩu. Bạn chắc chứ?.",
localHeaderImage: "assets/images/ic_pipi_03.png",
buttons: [AlertButton(
text: "Đồng ý",
onPressed: () async {
await DataPreference.instance.clearLoginToken();
await _safeBackToLogin();
},
bgColor: BaseColor.primary500,
textColor: Colors.white,
),
buttons: [
AlertButton(
text: "Đồng ý",
onPressed: () async {
await DataPreference.instance.clearLoginToken();
await _safeBackToLogin();
},
bgColor: BaseColor.primary500,
textColor: Colors.white,
),
AlertButton(
text: "Huỷ",
onPressed: () => Get.back(),
bgColor: Colors.white,
textColor: BaseColor.second500,
),],
),
],
);
showAlert(data: dataAlert);
},
......@@ -205,8 +204,8 @@ class _ChangePassScreenState extends BaseState<ChangePassScreen> with BasicState
break;
case LoginState.error:
case LoginState.idle:
enabled = false;
color = BaseColor.second400;
enabled = false;
color = BaseColor.second400;
break;
}
......
......@@ -3,6 +3,7 @@ import 'package:flutter/services.dart';
import 'package:get/get.dart';
import 'package:mypoint_flutter_app/features/create_pass/signup_create_password_repository.dart';
import 'package:mypoint_flutter_app/shared/widgets/back_button.dart';
import '../../app/config/constants.dart';
import '../../core/theme/base_color.dart';
import 'create_pass_viewmodel.dart';
......@@ -16,19 +17,16 @@ class CreatePasswordScreen extends StatelessWidget {
final vm = Get.put(CreatePasswordViewModel(repository));
final isNewPassObscure = true.obs;
final isConfirmPassObscure = true.obs;
final topExpand = MediaQuery.of(context).padding.top + 8 + Constants.extendTopPaddingNavigation;
return Scaffold(
appBar: AppBar(
centerTitle: true,
leading: CustomBackButton(),
),
body: SafeArea(
child: Stack(
children: [
GestureDetector(
onTap: () => FocusScope.of(context).unfocus(),
child: SingleChildScrollView(
padding: const EdgeInsets.all(16),
padding: EdgeInsets.only(left: 16, right: 16, top: 16 + topExpand + 36), //all(16),
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
......@@ -72,6 +70,7 @@ class CreatePasswordScreen extends StatelessWidget {
),
SizedBox.expand(),
Positioned(left: 0, right: 0, bottom: 16, child: _buildContinueButton(vm)),
Positioned(top: topExpand, left: 8, child: CustomBackButton()),
],
),
),
......
import 'package:flutter/material.dart';
import 'faqs_model.dart';
class FAQDetailScreen extends StatelessWidget {
final PageItemModel faqItem;
const FAQDetailScreen({super.key, required this.faqItem});
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(faqItem.title ?? "", style: const TextStyle(fontWeight: FontWeight.bold)),
backgroundColor: Colors.white,
foregroundColor: Colors.black,
elevation: 0,
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Text(
faqItem.chapeau ?? "",
style: const TextStyle(fontSize: 16, color: Colors.black87),
),
),
);
}
}
......@@ -51,47 +51,52 @@ class BrandGridWidget extends StatelessWidget {
return LayoutBuilder(
builder: (context, constraints) {
final double imageWidth = constraints.maxWidth / 3;
return Container(
padding: const EdgeInsets.all(4),
color: index % 2 != 0 ? Colors.red.shade50 : Colors.white,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
ClipRRect(
borderRadius: BorderRadius.circular(8),
child: SizedBox(
width: imageWidth,
height: imageWidth,
child: loadNetworkImage(
url: brand.logo ?? "",
fit: BoxFit.contain,
placeholderAsset: "assets/images/bg_default_11.png",
return GestureDetector(
onTap: () {
onTap?.call(brand);
},
child: Container(
padding: const EdgeInsets.all(4),
color: index % 2 != 0 ? Colors.red.shade50 : Colors.white,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
ClipRRect(
borderRadius: BorderRadius.circular(8),
child: SizedBox(
width: imageWidth,
height: imageWidth,
child: loadNetworkImage(
url: brand.logo ?? "",
fit: BoxFit.contain,
placeholderAsset: "assets/images/bg_default_11.png",
),
),
),
),
const SizedBox(height: 4),
Text(
textAlign: TextAlign.center,
brand.brandName ?? "",
maxLines: 2,
overflow: TextOverflow.ellipsis,
style: const TextStyle(fontWeight: FontWeight.w600, fontSize: 14),
),
const SizedBox(height: 4),
RichText(
textAlign: TextAlign.center,
text: TextSpan(
style: const TextStyle(fontSize: 12),
children: [
const TextSpan(text: "Hoàn đến: ", style: TextStyle(color: Colors.grey)),
TextSpan(
text: brand.pointAccumulationRate ?? '',
style: const TextStyle(color: Colors.orange, fontWeight: FontWeight.bold),
),
],
const SizedBox(height: 4),
Text(
textAlign: TextAlign.center,
brand.brandName ?? "",
maxLines: 2,
overflow: TextOverflow.ellipsis,
style: const TextStyle(fontWeight: FontWeight.w600, fontSize: 14),
),
const SizedBox(height: 4),
RichText(
textAlign: TextAlign.center,
text: TextSpan(
style: const TextStyle(fontSize: 12),
children: [
const TextSpan(text: "Hoàn đến: ", style: TextStyle(color: Colors.grey)),
TextSpan(
text: brand.pointAccumulationRate ?? '',
style: const TextStyle(color: Colors.orange, fontWeight: FontWeight.bold),
),
],
),
),
),
],
],
),
),
);
},
......
......@@ -148,7 +148,9 @@ class _HomeScreenState extends BaseState<HomeScreen> with PopupOnInit, BasicStat
return BrandGridWidget(
brands: _viewModel.brands,
sectionConfig: _viewModel.getMainSectionConfigModel(HeaderSectionType.brand),
onTap: (_) {},
onTap: (data) {
Get.toNamed(affiliateBrandDetailScreen, arguments: {"brandId": data.brandId});
},
);
case HeaderSectionType.pointPartner:
if (_viewModel.affiliates.isEmpty) return null;
......
......@@ -5,6 +5,7 @@ import 'package:get/get.dart';
import 'package:mypoint_flutter_app/app/routing/directional_action_type.dart';
import 'package:mypoint_flutter_app/core/theme/base_color.dart';
import 'package:mypoint_flutter_app/shared/navigation/directional_screen.dart';
import '../../../app/config/constants.dart';
import '../../../shared/widgets/alert/custom_alert_dialog.dart';
import '../../../shared/widgets/alert/data_alert_model.dart';
import '../../../shared/widgets/base_view/base_screen.dart';
......@@ -87,7 +88,7 @@ class _CampaignInviteReferralInfoScreenState extends BaseState<CampaignInviteRef
return Scaffold(
backgroundColor: Colors.grey.shade100,
appBar: PreferredSize(
preferredSize: const Size.fromHeight(kToolbarHeight),
preferredSize: Size.fromHeight(kToolbarHeight + Constants.extendTopPaddingNavigation),
child: Obx(() {
final title = _viewModel.campaignDetail.value?.name ?? 'Chi tiết chiến dịch';
return CustomNavigationBar(title: title);
......
......@@ -7,6 +7,7 @@ import 'package:share_plus/share_plus.dart';
import 'package:url_launcher/url_launcher.dart';
import '../../../features/invite_friend_campaign/popup_invite_friend_code.dart';
import '../../../shared/widgets/custom_toast_message.dart';
import '../../app/config/constants.dart';
import '../../shared/widgets/base_view/base_screen.dart';
import '../../shared/widgets/base_view/basic_state.dart';
import '../../core/theme/base_color.dart';
......@@ -54,7 +55,7 @@ class _InviteFriendCampaignScreenState extends BaseState<InviteFriendCampaignScr
Widget createBody() {
return Scaffold(
appBar: PreferredSize(
preferredSize: const Size.fromHeight(kToolbarHeight),
preferredSize: Size.fromHeight(kToolbarHeight + Constants.extendTopPaddingNavigation),
child: Obx(() {
final title = viewModel.inviteFriendDetail.value?.name ?? 'Mời bạn bè';
return CustomNavigationBar(title: title);
......
......@@ -7,6 +7,7 @@ import '../../core/theme/base_color.dart';
import '../../shared/widgets/alert/custom_alert_dialog.dart';
import '../../shared/widgets/alert/data_alert_model.dart';
import '../../shared/widgets/back_button.dart';
import '../../shared/widgets/custom_navigation_bar.dart';
import '../../shared/widgets/support_button.dart';
import 'login_viewmodel.dart';
......@@ -127,12 +128,11 @@ class _LoginScreenState extends BaseState<LoginScreen> with BasicState {
onTap: hideKeyboard,
child: Scaffold(
resizeToAvoidBottomInset: false,
appBar: AppBar(
automaticallyImplyLeading: false,
backgroundColor: Colors.white,
centerTitle: true,
leading: CustomBackButton(),
actions: [SupportButton()],
appBar: CustomNavigationBar(
title: '',
backgroundImage: '',
leftButtons: [CustomBackButton()],
rightButtons: [SupportButton()],
),
backgroundColor: Colors.white,
body: SafeArea(
......
......@@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
import 'package:flutter_widget_from_html_core/flutter_widget_from_html_core.dart';
import 'package:get/get.dart';
import 'package:mypoint_flutter_app/shared/widgets/image_loader.dart';
import '../../app/config/constants.dart';
import '../../shared/widgets/base_view/base_screen.dart';
import '../../shared/widgets/base_view/basic_state.dart';
import '../../shared/router_gage.dart';
......@@ -157,7 +158,7 @@ class _MembershipScreenState extends BaseState<MembershipScreen> with BasicState
}
Widget _buildTopBar() {
final top = MediaQuery.of(context).padding.top + 8;
final top = MediaQuery.of(context).padding.top + 8 + Constants.extendTopPaddingNavigation;
return Positioned(
top: top,
left: 0,
......
......@@ -5,6 +5,7 @@ import '../../shared/widgets/base_view/base_screen.dart';
import '../../shared/widgets/base_view/basic_state.dart';
import '../../core/theme/base_color.dart';
import '../../shared/widgets/back_button.dart';
import '../../shared/widgets/custom_navigation_bar.dart';
import '../../shared/widgets/support_button.dart';
import 'otp_viewmodel.dart';
......@@ -36,12 +37,11 @@ class _OtpScreenState extends BaseState<OtpScreen> with BasicState {
Widget createBody() {
final otpVM = Get.put(OtpViewModel(widget.repository));
return Scaffold(
appBar: AppBar(
centerTitle: true,
leading: CustomBackButton(),
actions: [
SupportButton(),
],
appBar: CustomNavigationBar(
title: '',
backgroundImage: '',
leftButtons: [CustomBackButton()],
rightButtons: [SupportButton()],
),
body: SafeArea(
child: GestureDetector(
......
import 'package:flutter/material.dart';
import 'package:flutter_widget_from_html_core/flutter_widget_from_html_core.dart';
import 'package:get/get.dart';
import 'package:mypoint_flutter_app/app/config/constants.dart';
import 'package:mypoint_flutter_app/shared/widgets/custom_empty_widget.dart';
import 'package:share_plus/share_plus.dart';
import '../../shared/widgets/base_view/base_screen.dart';
......@@ -56,10 +57,11 @@ class _CampaignDetailScreenState extends BaseState<CampaignDetailScreen> with Ba
return Stack(
children: [
Center(child: EmptyWidget(isLoading: _viewModel.isLoading.value)),
Positioned(top: MediaQuery
.of(context)
.padding
.top + 8, left: 8, child: CustomBackButton()),
Positioned(
top: MediaQuery.of(context).padding.top + 8 + Constants.extendTopPaddingNavigation,
left: 8,
child: CustomBackButton(),
),
],
);
}
......@@ -116,7 +118,7 @@ class _CampaignDetailScreenState extends BaseState<CampaignDetailScreen> with Ba
),
if (showShareButton)
Positioned(
top: MediaQuery.of(context).padding.top + 8,
top: MediaQuery.of(context).padding.top + 8 + Constants.extendTopPaddingNavigation,
right: 12,
child: SizedBox(
width: 32,
......@@ -127,9 +129,7 @@ class _CampaignDetailScreenState extends BaseState<CampaignDetailScreen> with Ba
child: IconButton(
onPressed: () {
final content = pageDetail.shareContent ?? "";
SharePlus.instance.share(
ShareParams(text: content, title: "Chia sẻ từ MyPoint"),
);
SharePlus.instance.share(ShareParams(text: content, title: "Chia sẻ từ MyPoint"));
_viewModel.submitShareContent();
},
icon: const Icon(Icons.share, size: 16),
......@@ -137,7 +137,7 @@ class _CampaignDetailScreenState extends BaseState<CampaignDetailScreen> with Ba
),
),
),
Positioned(top: MediaQuery.of(context).padding.top + 8, left: 8, child: CustomBackButton()),
Positioned(top: MediaQuery.of(context).padding.top + 8 + Constants.extendTopPaddingNavigation, left: 8, child: CustomBackButton()),
if (buttonOn == "1") _bottomButton(pageDetail),
],
);
......
......@@ -77,7 +77,7 @@ class _PersonalScreenState extends BaseState<PersonalScreen> with BasicState, Po
final name = DataPreference.instance.displayName;
final level = DataPreference.instance.rankName ?? "Hạng Đồng";
final email = DataPreference.instance.profile?.workerSite?.email ?? "";
final topWebPadding = kIsWeb ? Constants.webTopPadding : 0.0;
final topWebPadding = Constants.extendTopPaddingNavigation;
return Container(
height: width * 163 / 375 + topWebPadding,
decoration: BoxDecoration(image: DecorationImage(image: NetworkImage(data.background ?? ""), fit: BoxFit.cover)),
......@@ -341,9 +341,9 @@ class _PersonalScreenState extends BaseState<PersonalScreen> with BasicState, Po
await LogoutService.logout();
if (kIsWeb) {
await DataPreference.instance.clearData();
Get.offAllNamed(onboardingScreen);
// if (kIsWeb) {
// await DataPreference.instance.clearData();
// Get.offAllNamed(onboardingScreen);
// final closed = await webCloseApp({
// 'message': 'User logged out successfully',
// 'timestamp': DateTime.now().millisecondsSinceEpoch,
......@@ -351,8 +351,8 @@ class _PersonalScreenState extends BaseState<PersonalScreen> with BasicState, Po
// if (!closed) {
// Get.offAllNamed(onboardingScreen);
// }
return;
}
// return;
// }
if (phone.isNotEmpty) {
await DataPreference.instance.clearLoginToken();
......
......@@ -20,7 +20,7 @@ Future<void> showPopupManagerScreen(
required PopupManagerModel modelPopup,
VoidCallback? onDismissed,
}) async {
int timeCountDown = int.tryParse(modelPopup.timeCountDown ?? '1000000') ?? 1000000;
int timeCountDown = int.tryParse(modelPopup.timeCountDown ?? '10') ?? 10;
final popupId = modelPopup.id ?? '';
final requestId = modelPopup.requestId ?? '';
logPopupShowing(popupId: popupId, requestId: requestId);
......
import 'package:flutter/material.dart';
import '../../app/config/constants.dart';
import '../../shared/widgets/back_button.dart';
class QuizCampaignHeader extends StatelessWidget {
......@@ -19,7 +20,7 @@ class QuizCampaignHeader extends StatelessWidget {
return Stack(
children: [
Container(
padding: EdgeInsets.only(top: topSpace, left: 16, right: 16),
padding: EdgeInsets.only(top: topSpace + Constants.extendTopPaddingNavigation, left: 16, right: 16),
color: const Color(0xFFFFF1F3),
child: Column(
children: [
......
Supports Markdown
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