Commit 203de10f authored by Dio Maulana's avatar Dio Maulana

all fixed

parent 5cde9512
{
"base_url": "https://neo-agr.ravku.com/",
"path_base": "/tour-agency/",
"brand": "AGR",
"title": "Tour & Travel Agency"
}
\ No newline at end of file
...@@ -3,13 +3,13 @@ flutter_native_splash: ...@@ -3,13 +3,13 @@ flutter_native_splash:
image: assets/images/logo_green.png image: assets/images/logo_green.png
# branding: assets/images/excelso_logo_green.png # branding: assets/images/excelso_logo_green.png
color_dark: "#ffffff" color_dark: "#ffffff"
image_dark: assets/images/logo_white.png image_dark: assets/images/logo_green.png
# branding_dark: assets/images/excelso_logo_green.png # branding_dark: assets/images/excelso_logo_green.png
android_12: android_12:
image: assets/images/logo_green.png image: assets/images/logo_green.png
icon_background_color: "#ffffff" icon_background_color: "#ffffff"
image_dark: assets/images/logo_white.png image_dark: assets/images/logo_green.png
icon_background_color_dark: "#ffffff" icon_background_color_dark: "#ffffff"
web: true web: true
...@@ -7,6 +7,7 @@ import 'package:tour_travel_agr/main.dart'; ...@@ -7,6 +7,7 @@ import 'package:tour_travel_agr/main.dart';
import 'package:tour_travel_agr/models/profile_model.dart'; import 'package:tour_travel_agr/models/profile_model.dart';
import 'package:tour_travel_agr/models/reimburse_model.dart'; import 'package:tour_travel_agr/models/reimburse_model.dart';
import 'package:tour_travel_agr/models/transaction_model.dart'; import 'package:tour_travel_agr/models/transaction_model.dart';
import 'package:tour_travel_agr/resource/constanta_string.dart';
import 'package:tour_travel_agr/resource/routes.dart'; import 'package:tour_travel_agr/resource/routes.dart';
import 'package:tour_travel_agr/resource/strings.dart'; import 'package:tour_travel_agr/resource/strings.dart';
...@@ -93,11 +94,8 @@ class Api { ...@@ -93,11 +94,8 @@ class Api {
static Future<ApiResponse> forgotPassword(String phone) async { static Future<ApiResponse> forgotPassword(String phone) async {
String apiUrl = "$baseUrl${endPoint}forgot_password"; String apiUrl = "$baseUrl${endPoint}forgot_password";
String baseUrlToReset = ''; String baseUrlToReset = '';
baseUrlToReset += "${Uri.base.scheme}://${Uri.base.host}"; baseUrlToReset +=
if (Uri.base.port != 80) { "${Uri.base.scheme}://${Uri.base.host}$basePath${Routes.resetPasswordRoute}/";
baseUrlToReset += ":${Uri.base.port}";
}
baseUrlToReset += "${Routes.resetPasswordRoute}/";
try { try {
Map<String, dynamic> data = { Map<String, dynamic> data = {
"mobile_phone": phone, "mobile_phone": phone,
......
import 'package:tour_travel_agr/models/profile_model.dart';
class ProfileArguments { class ProfileArguments {
ProfileModel profile; void Function(bool)? profileUpdated;
ProfileArguments({required this.profile}); ProfileArguments({
this.profileUpdated,
});
} }
...@@ -13,6 +13,8 @@ String brandCode = 'AGR'; ...@@ -13,6 +13,8 @@ String brandCode = 'AGR';
String baseUrl = "https://neo-agr.ravku.com/"; String baseUrl = "https://neo-agr.ravku.com/";
String endPoint = "agency/api/"; String endPoint = "agency/api/";
String basePath = "/tour-agency";
String initialRoute = Routes.splashRoute; String initialRoute = Routes.splashRoute;
void main() { void main() {
WidgetsFlutterBinding.ensureInitialized(); WidgetsFlutterBinding.ensureInitialized();
......
...@@ -16,7 +16,7 @@ class ProfileModel { ...@@ -16,7 +16,7 @@ class ProfileModel {
fullName: json['full_name'], fullName: json['full_name'],
mobilePhone: json['mobile_phone'], mobilePhone: json['mobile_phone'],
nik: json['nik'], nik: json['nik'],
avatarUrl: json['image_profile_url'] ?? "", avatarUrl: json['profile_image_url'] ?? "",
); );
} }
} }
// ignore_for_file: sized_box_for_whitespace // ignore_for_file: sized_box_for_whitespace
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:shimmer/shimmer.dart';
import 'package:tour_travel_agr/api/all_api.dart';
import 'package:tour_travel_agr/helper/argument_route/profile_arguments.dart';
import 'package:tour_travel_agr/helper/function/session_check.dart';
import 'package:tour_travel_agr/helper/modal_dialog.dart';
import 'package:tour_travel_agr/helper/prefs.dart'; import 'package:tour_travel_agr/helper/prefs.dart';
import 'package:tour_travel_agr/helper/widget_responsive.dart'; import 'package:tour_travel_agr/helper/widget_responsive.dart';
import 'package:tour_travel_agr/models/profile_model.dart';
import 'package:tour_travel_agr/resource/assets.dart'; import 'package:tour_travel_agr/resource/assets.dart';
import 'package:tour_travel_agr/resource/colors.dart'; import 'package:tour_travel_agr/resource/colors.dart';
import 'package:tour_travel_agr/resource/font.dart'; import 'package:tour_travel_agr/resource/font.dart';
import 'package:tour_travel_agr/resource/routes.dart'; import 'package:tour_travel_agr/resource/routes.dart';
import 'package:tour_travel_agr/resource/size.dart'; import 'package:tour_travel_agr/resource/size.dart';
import 'package:tour_travel_agr/resource/strings.dart';
import 'package:tour_travel_agr/resource/style.dart'; import 'package:tour_travel_agr/resource/style.dart';
class HomeView extends StatelessWidget { class HomeView extends StatelessWidget {
...@@ -25,11 +32,73 @@ class HomeView extends StatelessWidget { ...@@ -25,11 +32,73 @@ class HomeView extends StatelessWidget {
} }
} }
class BodyWIdget extends StatelessWidget { class BodyWIdget extends StatefulWidget {
const BodyWIdget({ const BodyWIdget({
Key? key, Key? key,
}) : super(key: key); }) : super(key: key);
@override
State<BodyWIdget> createState() => _BodyWIdgetState();
}
class _BodyWIdgetState extends State<BodyWIdget> {
ProfileModel? profile;
@override
void initState() {
checkSession().then((isLogin) {
if (isLogin) {
getProfileUser();
} else {
Navigator.pushNamedAndRemoveUntil(
context,
Routes.loginRoute,
(route) => false,
);
}
});
super.initState();
}
@override
void dispose() {
super.dispose();
}
void getProfileUser() async {
Api.getProfile().then((apiResponse) {
if (apiResponse.error) {
if (apiResponse.data["code"] == "WRONG_SESSION_ID") {
modalDialogGlobal(
context: context,
title: "Session Expired",
contentBody: Strings.sessionExpired,
buttonText: "OK",
tapButton: () {
removeSessionId();
Navigator.pushNamedAndRemoveUntil(
context,
Routes.loginRoute,
(route) => false,
);
},
);
} else {
Navigator.pushNamedAndRemoveUntil(
context,
Routes.loginRoute,
(route) => false,
);
}
} else {
setState(() {
profile = apiResponse.data as ProfileModel;
});
}
});
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Container( return Container(
...@@ -61,14 +130,24 @@ class BodyWIdget extends StatelessWidget { ...@@ -61,14 +130,24 @@ class BodyWIdget extends StatelessWidget {
SizedBox( SizedBox(
height: AppMargin.m4, height: AppMargin.m4,
), ),
Text( (profile != null)
"Dio Maulana", ? Text(
style: getBoldStyle( profile!.fullName,
color: Colors.black, style: getBoldStyle(
fontFamily: FontConstants.mulish, color: Colors.black,
fontSize: 18, fontFamily: FontConstants.mulish,
), fontSize: 18,
), ),
)
: Shimmer.fromColors(
baseColor: ColorManager.baseColorShimmer,
highlightColor: ColorManager.highlightColorShimmer,
child: Container(
width: 50,
height: 10,
color: ColorManager.primary,
),
),
], ],
), ),
), ),
...@@ -148,6 +227,14 @@ class BodyWIdget extends StatelessWidget { ...@@ -148,6 +227,14 @@ class BodyWIdget extends StatelessWidget {
Navigator.pushNamed( Navigator.pushNamed(
context, context,
Routes.profileRoute, Routes.profileRoute,
arguments: ProfileArguments(
profileUpdated: ((isUpdated) {
setState(() {
profile = null;
});
getProfileUser();
}),
),
); );
}, },
child: CardSectionHome( child: CardSectionHome(
......
...@@ -109,13 +109,21 @@ class _EditProfileViewState extends State<EditProfileView> { ...@@ -109,13 +109,21 @@ class _EditProfileViewState extends State<EditProfileView> {
color: const Color.fromARGB(255, 235, 232, 232), color: const Color.fromARGB(255, 235, 232, 232),
), ),
child: (byteImage == null) child: (byteImage == null)
? Image( ? (widget.profile.avatarUrl == "")
width: 52, ? Image(
height: 52, width: 52,
image: AssetImage( height: 52,
Assets.editProfileSample, image: AssetImage(
), Assets.editProfileSample,
) ),
)
: ClipRRect(
borderRadius: BorderRadius.circular(100),
child: Image.network(
widget.profile.avatarUrl,
fit: BoxFit.fill,
),
)
: ClipRRect( : ClipRRect(
borderRadius: BorderRadius.circular(100), borderRadius: BorderRadius.circular(100),
child: Image.memory( child: Image.memory(
......
...@@ -20,14 +20,19 @@ import 'package:tour_travel_agr/resource/style.dart'; ...@@ -20,14 +20,19 @@ import 'package:tour_travel_agr/resource/style.dart';
class ProfileView extends StatelessWidget { class ProfileView extends StatelessWidget {
const ProfileView({ const ProfileView({
super.key, super.key,
this.profileUpdated,
}); });
final void Function(bool)? profileUpdated;
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Scaffold( return Scaffold(
backgroundColor: ColorManager.backgroundColor, backgroundColor: ColorManager.backgroundColor,
body: ScreenResponsive( body: ScreenResponsive(
widget: const BodyWidget(), widget: BodyWidget(
profileUpdated: profileUpdated,
),
widthScreen: MediaQuery.of(context).size.width, widthScreen: MediaQuery.of(context).size.width,
), ),
); );
...@@ -37,7 +42,9 @@ class ProfileView extends StatelessWidget { ...@@ -37,7 +42,9 @@ class ProfileView extends StatelessWidget {
class BodyWidget extends StatefulWidget { class BodyWidget extends StatefulWidget {
const BodyWidget({ const BodyWidget({
Key? key, Key? key,
this.profileUpdated,
}) : super(key: key); }) : super(key: key);
final void Function(bool)? profileUpdated;
@override @override
State<BodyWidget> createState() => _BodyWidgetState(); State<BodyWidget> createState() => _BodyWidgetState();
...@@ -178,6 +185,7 @@ class _BodyWidgetState extends State<BodyWidget> { ...@@ -178,6 +185,7 @@ class _BodyWidgetState extends State<BodyWidget> {
onSuccessUpdate: ((isSuccess) { onSuccessUpdate: ((isSuccess) {
if (isSuccess) { if (isSuccess) {
setState(() { setState(() {
widget.profileUpdated!(isSuccess);
profile == null; profile == null;
}); });
getProfileUser(); getProfileUser();
......
...@@ -2,6 +2,7 @@ import 'package:flutter/material.dart'; ...@@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:tour_travel_agr/helper/argument_route/edit_profile_arguments.dart'; import 'package:tour_travel_agr/helper/argument_route/edit_profile_arguments.dart';
import 'package:tour_travel_agr/helper/argument_route/error_arguments.dart'; import 'package:tour_travel_agr/helper/argument_route/error_arguments.dart';
import 'package:tour_travel_agr/helper/argument_route/profile_arguments.dart';
import 'package:tour_travel_agr/helper/argument_route/verification_otp.dart'; import 'package:tour_travel_agr/helper/argument_route/verification_otp.dart';
import 'package:tour_travel_agr/main.dart'; import 'package:tour_travel_agr/main.dart';
import 'package:tour_travel_agr/page/error.dart'; import 'package:tour_travel_agr/page/error.dart';
...@@ -88,8 +89,14 @@ class RouteGenerator { ...@@ -88,8 +89,14 @@ class RouteGenerator {
} else if (routeSettings.name == Routes.homeRoute) { } else if (routeSettings.name == Routes.homeRoute) {
return pageRouteCustom(const HomeView(), nameRoute: Routes.homeRoute); return pageRouteCustom(const HomeView(), nameRoute: Routes.homeRoute);
} else if (routeSettings.name == Routes.profileRoute) { } else if (routeSettings.name == Routes.profileRoute) {
return pageRouteCustom(const ProfileView(), ProfileArguments args = routeSettings.arguments as ProfileArguments;
nameRoute: Routes.profileRoute); return pageRouteCustom(
ProfileView(
profileUpdated: args.profileUpdated,
),
nameRoute: Routes.profileRoute,
routeSettings: routeSettings,
);
} else if (routeSettings.name == Routes.changePasswordRoute) { } else if (routeSettings.name == Routes.changePasswordRoute) {
return pageRouteCustom(const ChangePasswordView(), return pageRouteCustom(const ChangePasswordView(),
nameRoute: Routes.changePasswordRoute); nameRoute: Routes.changePasswordRoute);
...@@ -178,6 +185,18 @@ class RouteGenerator { ...@@ -178,6 +185,18 @@ class RouteGenerator {
settings: RouteSettings(name: nameRoute.replaceFirst("/", "")), settings: RouteSettings(name: nameRoute.replaceFirst("/", "")),
); );
} }
if (nameRoute == Routes.profileRoute) {
ProfileArguments args = routeSettings!.arguments as ProfileArguments;
return PageRouteBuilder(
pageBuilder: (context, a, b) => ProfileView(
profileUpdated: args.profileUpdated,
),
transitionDuration: Duration.zero,
reverseTransitionDuration: Duration.zero,
settings: RouteSettings(name: nameRoute.replaceFirst("/", "")),
);
}
return PageRouteBuilder( return PageRouteBuilder(
pageBuilder: (context, a, b) => target, pageBuilder: (context, a, b) => target,
transitionDuration: Duration.zero, transitionDuration: Duration.zero,
......
...@@ -14,25 +14,28 @@ ...@@ -14,25 +14,28 @@
This is a placeholder for base href that will be replaced by the value of This is a placeholder for base href that will be replaced by the value of
the `--base-href` argument provided to `flutter build`. the `--base-href` argument provided to `flutter build`.
--> -->
<base href="$FLUTTER_BASE_HREF" /> <base href="/tour-agency/" />
<meta charset="UTF-8" /> <meta charset="UTF-8" />
<meta content="IE=Edge" http-equiv="X-UA-Compatible" /> <meta content="IE=Edge" http-equiv="X-UA-Compatible" />
<meta <meta
name="description" name="description"
content="Ravintola Tour & Travel Agency For Agrinesia." content="Ravintola Tour &amp; Travel Agency For Agrinesia."
/> />
<!-- iOS meta tags & icons --> <!-- iOS meta tags & icons -->
<meta name="apple-mobile-web-app-capable" content="yes" /> <meta name="apple-mobile-web-app-capable" content="yes" />
<meta name="apple-mobile-web-app-status-bar-style" content="black" /> <meta name="apple-mobile-web-app-status-bar-style" content="black" />
<meta name="apple-mobile-web-app-title" content="Tour & Travel Agency" /> <meta
name="apple-mobile-web-app-title"
content="Tour &amp; Travel Agency"
/>
<link rel="apple-touch-icon" href="icons/Icon-192.png" /> <link rel="apple-touch-icon" href="icons/Icon-192.png" />
<!-- Favicon --> <!-- Favicon -->
<link rel="icon" type="image/png" href="agr_icon.png" /> <link rel="icon" type="image/png" href="agr_icon.png" />
<title>Tour & Travel Agency</title> <title>Tour &amp; Travel Agency</title>
<link rel="manifest" href="manifest.json" /> <link rel="manifest" href="manifest.json" />
<script> <script>
...@@ -46,6 +49,7 @@ ...@@ -46,6 +49,7 @@
content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"
name="viewport" name="viewport"
/> />
<style id="splash-screen-style"> <style id="splash-screen-style">
html { html {
height: 100%; height: 100%;
...@@ -141,12 +145,19 @@ ...@@ -141,12 +145,19 @@
" "
media="(prefers-color-scheme: dark)" media="(prefers-color-scheme: dark)"
/> />
<img <h3 class="center" aria-hidden="true">
class="center" <img
aria-hidden="true" class="center"
src="splash/img/light-1x.png" aria-hidden="true"
alt="" src="splash/img/light-4x.png"
/> alt=""
/>
<br />
<br />
<br />
<br />
Please wait...
</h3>
</picture> </picture>
<script> <script>
......
web/splash/img/dark-1x.png

2.2 KB | W: | H:

web/splash/img/dark-1x.png

1.22 KB | W: | H:

web/splash/img/dark-1x.png
web/splash/img/dark-1x.png
web/splash/img/dark-1x.png
web/splash/img/dark-1x.png
  • 2-up
  • Swipe
  • Onion skin
web/splash/img/dark-2x.png

6.89 KB | W: | H:

web/splash/img/dark-2x.png

3.55 KB | W: | H:

web/splash/img/dark-2x.png
web/splash/img/dark-2x.png
web/splash/img/dark-2x.png
web/splash/img/dark-2x.png
  • 2-up
  • Swipe
  • Onion skin
web/splash/img/dark-3x.png

13.1 KB | W: | H:

web/splash/img/dark-3x.png

6.57 KB | W: | H:

web/splash/img/dark-3x.png
web/splash/img/dark-3x.png
web/splash/img/dark-3x.png
web/splash/img/dark-3x.png
  • 2-up
  • Swipe
  • Onion skin
web/splash/img/dark-4x.png

15.3 KB | W: | H:

web/splash/img/dark-4x.png

8.87 KB | W: | H:

web/splash/img/dark-4x.png
web/splash/img/dark-4x.png
web/splash/img/dark-4x.png
web/splash/img/dark-4x.png
  • 2-up
  • Swipe
  • Onion skin
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