force update added,

main_design2.1
Sikander Saleem 1 year ago
parent 5ce3018b6e
commit a053ac4a6d

@ -1,12 +1,15 @@
class URLs { class URLs {
URLs._(); URLs._();
// static const host1 = "https://atomsm.hmg.com"; // production url static const String appReleaseBuildNumber = "14";
static const host1 = "https://atomsmdev.hmg.com"; // local UAT url
static const host1 = "https://atomsm.hmg.com"; // production url
// static const host1 = "https://atomsmdev.hmg.com"; // local UAT url
// static String _baseUrl = "$_host/mobile"; // static String _baseUrl = "$_host/mobile";
// static String _baseUrl = "$_host/mobile"; // static String _baseUrl = "$_host/mobile";
static String _baseUrl = "$_host/v3/mobile"; // new V3 apis static String _baseUrl = "$_host/v2/mobile"; // new V2 apis
// static String _baseUrl = "$_host/v3/mobile"; // new V3 apis
static String _host = host1; static String _host = host1;
@ -19,6 +22,7 @@ class URLs {
// API Routes // API Routes
static get login => "$_baseUrl/MobileAuth/Login"; // web login static get login => "$_baseUrl/MobileAuth/Login"; // web login
static get checkLoginValidation => "$_baseUrl/Account/Authenticate"; // web login static get checkLoginValidation => "$_baseUrl/Account/Authenticate"; // web login
static get checkAppVersion => "$_baseUrl/Account/CheckAppVersion"; // web login
// static get login => "$_baseUrl/MobileAuth/LoginIntegration"; // mobile login // static get login => "$_baseUrl/MobileAuth/LoginIntegration"; // mobile login
static get register => "$_baseUrl/handle/create/user"; // post static get register => "$_baseUrl/handle/create/user"; // post
static get updateProfile => "$_baseUrl/update/user/profile"; // post static get updateProfile => "$_baseUrl/update/user/profile"; // post

@ -232,6 +232,7 @@ class UserProvider extends ChangeNotifier {
"userId": userId, "userId": userId,
"dateFrom": dateFrom.toIso8601String(), "dateFrom": dateFrom.toIso8601String(),
"dateTo": dateTo.toIso8601String(), "dateTo": dateTo.toIso8601String(),
"IsSucces":true,
}; };
try { try {
response = await ApiManager.instance.post(URLs.getSwipeTransactionHistoryUrl, body: body); response = await ApiManager.instance.post(URLs.getSwipeTransactionHistoryUrl, body: body);

@ -204,4 +204,19 @@ class SettingProvider extends ChangeNotifier {
return isValid; return isValid;
} }
} }
Future<bool> checkAppUpdate(String buildNumber, String osType) async {
Response response;
bool isValid = false;
try {
Map<String, dynamic> body = {"buildNumber": buildNumber, "osType": osType};
response = await ApiManager.instance.post(URLs.checkAppVersion, body: body);
if (response.statusCode >= 200 && response.statusCode < 300) {
isValid = (jsonDecode(response.body)["data"]);
}
return isValid;
} catch (error) {
return isValid;
}
}
} }

@ -100,6 +100,7 @@ import 'package:test_sa/views/pages/user/requests/requests_page.dart';
import 'package:test_sa/views/pages/user/requests/update_service_request_page.dart'; import 'package:test_sa/views/pages/user/requests/update_service_request_page.dart';
import 'package:test_sa/views/pages/user/requests/work_order/work_order_details_page.dart'; import 'package:test_sa/views/pages/user/requests/work_order/work_order_details_page.dart';
import 'package:test_sa/views/pages/user/requests/work_order/work_orders_list_page.dart'; import 'package:test_sa/views/pages/user/requests/work_order/work_orders_list_page.dart';
import 'package:test_sa/views/update_available_screen.dart';
import 'package:test_sa/views/widgets/departments/single_department_picker.dart'; import 'package:test_sa/views/widgets/departments/single_department_picker.dart';
import 'package:test_sa/views/widgets/equipment/asset_detail_page.dart'; import 'package:test_sa/views/widgets/equipment/asset_detail_page.dart';
import 'package:test_sa/views/widgets/equipment/single_device_picker.dart'; import 'package:test_sa/views/widgets/equipment/single_device_picker.dart';
@ -263,6 +264,7 @@ class MyApp extends StatelessWidget {
SwipeSuccessView.routeName: (_) => const SwipeSuccessView(), SwipeSuccessView.routeName: (_) => const SwipeSuccessView(),
SwipeHistoryView.routeName: (_) => SwipeHistoryView(), SwipeHistoryView.routeName: (_) => SwipeHistoryView(),
SwipeView.routeName: (_) => const SwipeView(), SwipeView.routeName: (_) => const SwipeView(),
UpdateAvailableScreen.routeName: (_) => UpdateAvailableScreen(),
///todo deleted ///todo deleted
//old.LandPage.id: (_) => const old.LandPage(), //old.LandPage.id: (_) => const old.LandPage(),

@ -7,6 +7,8 @@ import 'package:flutter/material.dart';
import 'package:local_auth/local_auth.dart'; import 'package:local_auth/local_auth.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:safe_device/safe_device.dart'; import 'package:safe_device/safe_device.dart';
import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/controllers/notification/firebase_notification_manger.dart';
import 'package:test_sa/controllers/providers/api/user_provider.dart'; import 'package:test_sa/controllers/providers/api/user_provider.dart';
import 'package:test_sa/controllers/providers/settings/setting_provider.dart'; import 'package:test_sa/controllers/providers/settings/setting_provider.dart';
import 'package:test_sa/extensions/widget_extensions.dart'; import 'package:test_sa/extensions/widget_extensions.dart';
@ -14,6 +16,7 @@ import 'package:test_sa/new_views/pages/land_page/land_page.dart';
import 'package:test_sa/new_views/pages/login_page.dart'; import 'package:test_sa/new_views/pages/login_page.dart';
import 'package:test_sa/new_views/pages/usSafeDevice_view.dart'; import 'package:test_sa/new_views/pages/usSafeDevice_view.dart';
import 'package:test_sa/new_views/swipe_module/swipe_view.dart'; import 'package:test_sa/new_views/swipe_module/swipe_view.dart';
import 'package:test_sa/views/update_available_screen.dart';
import '../../models/size_config.dart'; import '../../models/size_config.dart';
@ -58,26 +61,44 @@ class _SplashPageState extends State<SplashPage> {
loading = true; loading = true;
}); });
bool isValid = await _settingProvider.checkUserTokenValidation(token); String osType;
setState(() { if (Platform.isIOS) {
loading = false; osType = "IOS";
}); } else {
if (isValid && _settingProvider.isLocalAuthEnable) { if (await FirebaseNotificationManger.isGoogleServicesAvailable()) {
bool isSuccess = await checkDualAuthentication(); osType = "GOOGLE";
if (isSuccess) { } else {
_userProvider.user = _settingProvider.user; osType = "HUAWEI";
}
if(_userProvider.user.onlySwipe){ }
Navigator.of(context).pushNamedAndRemoveUntil(SwipeView.routeName, (routes) => true);
}else{
Navigator.of(context).pushNamedAndRemoveUntil(LandPage.routeName, (routes) => true);
}
bool isAppUpdateAvailable = await _settingProvider.checkAppUpdate(URLs.appReleaseBuildNumber, osType);
if (isAppUpdateAvailable) {
setState(() {
loading = false;
});
Navigator.of(context).pushNamedAndRemoveUntil(UpdateAvailableScreen.routeName, (routes) => true);
} else {
bool isValid = await _settingProvider.checkUserTokenValidation(token);
setState(() {
loading = false;
});
if (isValid && _settingProvider.isLocalAuthEnable) {
bool isSuccess = await checkDualAuthentication();
if (isSuccess) {
_userProvider.user = _settingProvider.user;
if (_userProvider.user.onlySwipe) {
Navigator.of(context).pushNamedAndRemoveUntil(SwipeView.routeName, (routes) => true);
} else {
Navigator.of(context).pushNamedAndRemoveUntil(LandPage.routeName, (routes) => true);
}
} else {
Navigator.of(context).pushNamedAndRemoveUntil(LoginPage.routeName, (routes) => true);
}
} else { } else {
Navigator.of(context).pushNamedAndRemoveUntil(LoginPage.routeName, (routes) => true); Navigator.of(context).pushNamedAndRemoveUntil(LoginPage.routeName, (routes) => true);
} }
} else {
Navigator.of(context).pushNamedAndRemoveUntil(LoginPage.routeName, (routes) => true);
} }
} }
@ -110,35 +131,38 @@ class _SplashPageState extends State<SplashPage> {
)), )),
SizedBox( SizedBox(
width: MediaQuery.of(context).size.width / 1.1, width: MediaQuery.of(context).size.width / 1.1,
child: FlareActor( child: Hero(
"assets/rives/atoms_splash.flr", tag: "logo",
fit: BoxFit.contain, child: FlareActor(
animation: "splash", "assets/rives/atoms_splash.flr",
callback: (animation) async { fit: BoxFit.contain,
bool isSafe = await checkDeviceSafety(); animation: "splash",
print('is safe is ${isSafe}'); callback: (animation) async {
if (!isSafe) { bool isSafe = await checkDeviceSafety();
Navigator.pushNamedAndRemoveUntil(context, UnsafeDeviceScreen.routeName, (_) => false); print('is safe is ${isSafe}');
} else { if (!isSafe) {
if (_settingProvider.isLoaded && (_settingProvider.user != null)) { Navigator.pushNamedAndRemoveUntil(context, UnsafeDeviceScreen.routeName, (_) => false);
checkTokenValidity(_settingProvider.user.token);
} else { } else {
Navigator.of(context).pushNamedAndRemoveUntil(LoginPage.routeName, (routes) => true); if (_settingProvider.isLoaded && (_settingProvider.user != null)) {
checkTokenValidity(_settingProvider.user.token);
} else {
Navigator.of(context).pushNamedAndRemoveUntil(LoginPage.routeName, (routes) => true);
}
} }
}
// if (_settingProvider.isLoaded && (_settingProvider.user?.isLiveToken ?? false)) {
// if (_settingProvider.isLoaded && (_settingProvider.user?.isLiveToken ?? false)) { // _userProvider.user = _settingProvider.user;
// _userProvider.user = _settingProvider.user; // Navigator.of(context).pushNamedAndRemoveUntil(LandPage.routeName, (routes) => true);
// Navigator.of(context).pushNamedAndRemoveUntil(LandPage.routeName, (routes) => true); // // if(isnotificationCame)
// // if(isnotificationCame) // // Navigator.of(context).push(MaterialPageRoute(
// // Navigator.of(context).push(MaterialPageRoute( // // builder: (_) => ServiceRequestDetailsPage(
// // builder: (_) => ServiceRequestDetailsPage( // // serviceRequest: ServiceRequest(id: "72348"),
// // serviceRequest: ServiceRequest(id: "72348"), // // )));
// // ))); // /// The below line for the new design
// /// The below line for the new design // // Navigator.of(context).pushNamedAndRemoveUntil(LandPage.routeName, (routes) => true);
// // Navigator.of(context).pushNamedAndRemoveUntil(LandPage.routeName, (routes) => true); // }
// } },
}, ),
), ),
).center, ).center,
], ],

@ -90,7 +90,7 @@ class _SwipeViewState extends State<SwipeView> {
child: ClipOval( child: ClipOval(
child: snapshot.profileImage != null child: snapshot.profileImage != null
? Image.file(snapshot.profileImage) ? Image.file(snapshot.profileImage)
: (snapshot.user.profilePhotoName?.isNotEmpty ?? false) : (snapshot.user?.profilePhotoName?.isNotEmpty ?? false)
? Image.network(snapshot.user.profilePhotoName) ? Image.network(snapshot.user.profilePhotoName)
: const Icon(Icons.person, size: 24, color: Colors.white), : const Icon(Icons.person, size: 24, color: Colors.white),
), ),

@ -0,0 +1,54 @@
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/extensions/int_extensions.dart';
import 'package:test_sa/extensions/text_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/new_views/app_style/app_color.dart';
import 'package:test_sa/new_views/common_widgets/app_filled_button.dart';
import 'package:url_launcher/url_launcher.dart';
class UpdateAvailableScreen extends StatelessWidget {
static const String routeName = "/UpdateAvailableScreen";
UpdateAvailableScreen({Key key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Scaffold(
body: Column(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.center,
children: [
Hero(tag: "logo", child: "logo".toSvgAsset(height: 64)),
48.height,
Text(
"Update Available",
style: AppTextStyles.heading4.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral50),
),
24.height,
Text(
"A new update is available on store.\nUpdate now to enjoy the latest features, improvements, and bug fixes for a smoother experience! ",
textAlign: TextAlign.center,
style: AppTextStyles.heading6.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20),
),
24.height,
AppFilledButton(
label: context.translation.update,
maxWidth: true,
onPressed: () {
if (Platform.isAndroid || Platform.isIOS) {
final appId = Platform.isAndroid ? 'com.hmg.atoms' : '6446684161';
final url = Uri.parse(Platform.isAndroid ? "market://details?id=$appId" : "https://apps.apple.com/app/id$appId");
launchUrl(
url,
mode: LaunchMode.externalApplication,
);
}
}),
],
).paddingAll(24),
);
}
}
Loading…
Cancel
Save