force update added,

main_design2.1
Sikander Saleem 10 months ago
parent 5ce3018b6e
commit a053ac4a6d

@ -1,12 +1,15 @@
class URLs {
URLs._();
// static const host1 = "https://atomsm.hmg.com"; // production url
static const host1 = "https://atomsmdev.hmg.com"; // local UAT url
static const String appReleaseBuildNumber = "14";
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/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;
@ -19,6 +22,7 @@ class URLs {
// API Routes
static get login => "$_baseUrl/MobileAuth/Login"; // 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 register => "$_baseUrl/handle/create/user"; // post
static get updateProfile => "$_baseUrl/update/user/profile"; // post

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

@ -204,4 +204,19 @@ class SettingProvider extends ChangeNotifier {
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/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/update_available_screen.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/single_device_picker.dart';
@ -263,6 +264,7 @@ class MyApp extends StatelessWidget {
SwipeSuccessView.routeName: (_) => const SwipeSuccessView(),
SwipeHistoryView.routeName: (_) => SwipeHistoryView(),
SwipeView.routeName: (_) => const SwipeView(),
UpdateAvailableScreen.routeName: (_) => UpdateAvailableScreen(),
///todo deleted
//old.LandPage.id: (_) => const old.LandPage(),

@ -7,6 +7,8 @@ import 'package:flutter/material.dart';
import 'package:local_auth/local_auth.dart';
import 'package:provider/provider.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/settings/setting_provider.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/usSafeDevice_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';
@ -58,26 +61,44 @@ class _SplashPageState extends State<SplashPage> {
loading = true;
});
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);
}
String osType;
if (Platform.isIOS) {
osType = "IOS";
} else {
if (await FirebaseNotificationManger.isGoogleServicesAvailable()) {
osType = "GOOGLE";
} else {
osType = "HUAWEI";
}
}
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 {
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(
width: MediaQuery.of(context).size.width / 1.1,
child: FlareActor(
"assets/rives/atoms_splash.flr",
fit: BoxFit.contain,
animation: "splash",
callback: (animation) async {
bool isSafe = await checkDeviceSafety();
print('is safe is ${isSafe}');
if (!isSafe) {
Navigator.pushNamedAndRemoveUntil(context, UnsafeDeviceScreen.routeName, (_) => false);
} else {
if (_settingProvider.isLoaded && (_settingProvider.user != null)) {
checkTokenValidity(_settingProvider.user.token);
child: Hero(
tag: "logo",
child: FlareActor(
"assets/rives/atoms_splash.flr",
fit: BoxFit.contain,
animation: "splash",
callback: (animation) async {
bool isSafe = await checkDeviceSafety();
print('is safe is ${isSafe}');
if (!isSafe) {
Navigator.pushNamedAndRemoveUntil(context, UnsafeDeviceScreen.routeName, (_) => false);
} 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)) {
// _userProvider.user = _settingProvider.user;
// Navigator.of(context).pushNamedAndRemoveUntil(LandPage.routeName, (routes) => true);
// // if(isnotificationCame)
// // Navigator.of(context).push(MaterialPageRoute(
// // builder: (_) => ServiceRequestDetailsPage(
// // serviceRequest: ServiceRequest(id: "72348"),
// // )));
// /// The below line for the new design
// // Navigator.of(context).pushNamedAndRemoveUntil(LandPage.routeName, (routes) => true);
// }
},
// if (_settingProvider.isLoaded && (_settingProvider.user?.isLiveToken ?? false)) {
// _userProvider.user = _settingProvider.user;
// Navigator.of(context).pushNamedAndRemoveUntil(LandPage.routeName, (routes) => true);
// // if(isnotificationCame)
// // Navigator.of(context).push(MaterialPageRoute(
// // builder: (_) => ServiceRequestDetailsPage(
// // serviceRequest: ServiceRequest(id: "72348"),
// // )));
// /// The below line for the new design
// // Navigator.of(context).pushNamedAndRemoveUntil(LandPage.routeName, (routes) => true);
// }
},
),
),
).center,
],

@ -90,7 +90,7 @@ class _SwipeViewState extends State<SwipeView> {
child: ClipOval(
child: snapshot.profileImage != null
? Image.file(snapshot.profileImage)
: (snapshot.user.profilePhotoName?.isNotEmpty ?? false)
: (snapshot.user?.profilePhotoName?.isNotEmpty ?? false)
? Image.network(snapshot.user.profilePhotoName)
: 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