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:
image: assets/images/logo_green.png
# branding: assets/images/excelso_logo_green.png
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
android_12:
image: assets/images/logo_green.png
icon_background_color: "#ffffff"
image_dark: assets/images/logo_white.png
image_dark: assets/images/logo_green.png
icon_background_color_dark: "#ffffff"
web: true
......@@ -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/reimburse_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/strings.dart';
......@@ -93,11 +94,8 @@ class Api {
static Future<ApiResponse> forgotPassword(String phone) async {
String apiUrl = "$baseUrl${endPoint}forgot_password";
String baseUrlToReset = '';
baseUrlToReset += "${Uri.base.scheme}://${Uri.base.host}";
if (Uri.base.port != 80) {
baseUrlToReset += ":${Uri.base.port}";
}
baseUrlToReset += "${Routes.resetPasswordRoute}/";
baseUrlToReset +=
"${Uri.base.scheme}://${Uri.base.host}$basePath${Routes.resetPasswordRoute}/";
try {
Map<String, dynamic> data = {
"mobile_phone": phone,
......
import 'package:tour_travel_agr/models/profile_model.dart';
class ProfileArguments {
ProfileModel profile;
void Function(bool)? profileUpdated;
ProfileArguments({required this.profile});
ProfileArguments({
this.profileUpdated,
});
}
......@@ -13,6 +13,8 @@ String brandCode = 'AGR';
String baseUrl = "https://neo-agr.ravku.com/";
String endPoint = "agency/api/";
String basePath = "/tour-agency";
String initialRoute = Routes.splashRoute;
void main() {
WidgetsFlutterBinding.ensureInitialized();
......
......@@ -16,7 +16,7 @@ class ProfileModel {
fullName: json['full_name'],
mobilePhone: json['mobile_phone'],
nik: json['nik'],
avatarUrl: json['image_profile_url'] ?? "",
avatarUrl: json['profile_image_url'] ?? "",
);
}
}
// ignore_for_file: sized_box_for_whitespace
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/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/colors.dart';
import 'package:tour_travel_agr/resource/font.dart';
import 'package:tour_travel_agr/resource/routes.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';
class HomeView extends StatelessWidget {
......@@ -25,11 +32,73 @@ class HomeView extends StatelessWidget {
}
}
class BodyWIdget extends StatelessWidget {
class BodyWIdget extends StatefulWidget {
const BodyWIdget({
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
Widget build(BuildContext context) {
return Container(
......@@ -61,14 +130,24 @@ class BodyWIdget extends StatelessWidget {
SizedBox(
height: AppMargin.m4,
),
Text(
"Dio Maulana",
style: getBoldStyle(
color: Colors.black,
fontFamily: FontConstants.mulish,
fontSize: 18,
),
),
(profile != null)
? Text(
profile!.fullName,
style: getBoldStyle(
color: Colors.black,
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 {
Navigator.pushNamed(
context,
Routes.profileRoute,
arguments: ProfileArguments(
profileUpdated: ((isUpdated) {
setState(() {
profile = null;
});
getProfileUser();
}),
),
);
},
child: CardSectionHome(
......
......@@ -109,13 +109,21 @@ class _EditProfileViewState extends State<EditProfileView> {
color: const Color.fromARGB(255, 235, 232, 232),
),
child: (byteImage == null)
? Image(
width: 52,
height: 52,
image: AssetImage(
Assets.editProfileSample,
),
)
? (widget.profile.avatarUrl == "")
? Image(
width: 52,
height: 52,
image: AssetImage(
Assets.editProfileSample,
),
)
: ClipRRect(
borderRadius: BorderRadius.circular(100),
child: Image.network(
widget.profile.avatarUrl,
fit: BoxFit.fill,
),
)
: ClipRRect(
borderRadius: BorderRadius.circular(100),
child: Image.memory(
......
......@@ -20,14 +20,19 @@ import 'package:tour_travel_agr/resource/style.dart';
class ProfileView extends StatelessWidget {
const ProfileView({
super.key,
this.profileUpdated,
});
final void Function(bool)? profileUpdated;
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: ColorManager.backgroundColor,
body: ScreenResponsive(
widget: const BodyWidget(),
widget: BodyWidget(
profileUpdated: profileUpdated,
),
widthScreen: MediaQuery.of(context).size.width,
),
);
......@@ -37,7 +42,9 @@ class ProfileView extends StatelessWidget {
class BodyWidget extends StatefulWidget {
const BodyWidget({
Key? key,
this.profileUpdated,
}) : super(key: key);
final void Function(bool)? profileUpdated;
@override
State<BodyWidget> createState() => _BodyWidgetState();
......@@ -178,6 +185,7 @@ class _BodyWidgetState extends State<BodyWidget> {
onSuccessUpdate: ((isSuccess) {
if (isSuccess) {
setState(() {
widget.profileUpdated!(isSuccess);
profile == null;
});
getProfileUser();
......
......@@ -2,6 +2,7 @@ import 'package:flutter/material.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/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/main.dart';
import 'package:tour_travel_agr/page/error.dart';
......@@ -88,8 +89,14 @@ class RouteGenerator {
} else if (routeSettings.name == Routes.homeRoute) {
return pageRouteCustom(const HomeView(), nameRoute: Routes.homeRoute);
} else if (routeSettings.name == Routes.profileRoute) {
return pageRouteCustom(const ProfileView(),
nameRoute: Routes.profileRoute);
ProfileArguments args = routeSettings.arguments as ProfileArguments;
return pageRouteCustom(
ProfileView(
profileUpdated: args.profileUpdated,
),
nameRoute: Routes.profileRoute,
routeSettings: routeSettings,
);
} else if (routeSettings.name == Routes.changePasswordRoute) {
return pageRouteCustom(const ChangePasswordView(),
nameRoute: Routes.changePasswordRoute);
......@@ -178,6 +185,18 @@ class RouteGenerator {
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(
pageBuilder: (context, a, b) => target,
transitionDuration: Duration.zero,
......
......@@ -14,25 +14,28 @@
This is a placeholder for base href that will be replaced by the value of
the `--base-href` argument provided to `flutter build`.
-->
<base href="$FLUTTER_BASE_HREF" />
<base href="/tour-agency/" />
<meta charset="UTF-8" />
<meta content="IE=Edge" http-equiv="X-UA-Compatible" />
<meta
name="description"
content="Ravintola Tour & Travel Agency For Agrinesia."
content="Ravintola Tour &amp; Travel Agency For Agrinesia."
/>
<!-- iOS meta tags & icons -->
<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-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" />
<!-- Favicon -->
<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" />
<script>
......@@ -46,6 +49,7 @@
content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"
name="viewport"
/>
<style id="splash-screen-style">
html {
height: 100%;
......@@ -141,12 +145,19 @@
"
media="(prefers-color-scheme: dark)"
/>
<img
class="center"
aria-hidden="true"
src="splash/img/light-1x.png"
alt=""
/>
<h3 class="center" aria-hidden="true">
<img
class="center"
aria-hidden="true"
src="splash/img/light-4x.png"
alt=""
/>
<br />
<br />
<br />
<br />
Please wait...
</h3>
</picture>
<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