when session ended, show dialog to login.

main_design2.0
Sikander Saleem 2 years ago
parent ae783f0d21
commit cbafa20df8

@ -1,10 +1,18 @@
import 'dart:convert'; import 'dart:convert';
import 'dart:io';
import 'package:flutter/cupertino.dart';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:fluttertoast/fluttertoast.dart'; import 'package:fluttertoast/fluttertoast.dart';
import 'package:http/http.dart' as http; import 'package:http/http.dart' as http;
import 'package:http/http.dart'; import 'package:http/http.dart';
import 'package:provider/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/main.dart';
import 'package:test_sa/models/user.dart'; import 'package:test_sa/models/user.dart';
import 'package:test_sa/new_views/pages/login_page.dart';
class ApiManager { class ApiManager {
ApiManager._(); ApiManager._();
@ -24,19 +32,22 @@ class ApiManager {
enableToastMessage = true, enableToastMessage = true,
}) async { }) async {
headers ??= {}; headers ??= {};
headers.addAll(_headers); headers.addAll(_headers);
Uri _url = Uri.parse(url); Uri _url = Uri.parse(url);
// print(_url);
// print(headers);
http.Response response = await http.get(_url, headers: headers); http.Response response = await http.get(_url, headers: headers);
if (jsonDecode(response.body) is Map<String, dynamic>) {
final message = jsonDecode(response.body)["message"]; try {
if (message != null && message.toString().isNotEmpty && enableToastMessage) { if (response.statusCode == 401) {
Fluttertoast.showToast(msg: message ?? "", toastLength: Toast.LENGTH_LONG); showLoginDialog();
} else {
if (jsonDecode(response.body) is Map<String, dynamic>) {
final message = jsonDecode(response.body)["message"];
if (message != null && message.toString().isNotEmpty) {
Fluttertoast.showToast(msg: message ?? "", toastLength: Toast.LENGTH_LONG);
}
}
} }
} } catch (ex) {}
return response; return response;
} }
@ -63,15 +74,18 @@ class ApiManager {
http.StreamedResponse _streamedResponse = await request.send(); http.StreamedResponse _streamedResponse = await request.send();
http.Response response = await http.Response.fromStream(_streamedResponse); http.Response response = await http.Response.fromStream(_streamedResponse);
// print(response.statusCode); try {
// log(response.body); if (response.statusCode == 401) {
showLoginDialog();
if (jsonDecode(response.body) is Map<String, dynamic>) { } else {
final message = jsonDecode(response.body)["message"]; if (jsonDecode(response.body) is Map<String, dynamic>) {
if (message != null && message.toString().isNotEmpty) { final message = jsonDecode(response.body)["message"];
Fluttertoast.showToast(msg: message ?? "", toastLength: Toast.LENGTH_LONG); if (message != null && message.toString().isNotEmpty) {
Fluttertoast.showToast(msg: message ?? "", toastLength: Toast.LENGTH_LONG);
}
}
} }
} } catch (ex) {}
return response; return response;
} }
@ -95,14 +109,18 @@ class ApiManager {
http.StreamedResponse streamedResponse = await request.send(); http.StreamedResponse streamedResponse = await request.send();
http.Response response = await http.Response.fromStream(streamedResponse); http.Response response = await http.Response.fromStream(streamedResponse);
// print(response.statusCode); try {
// log(response.body); if (response.statusCode == 401) {
if (jsonDecode(response.body) is Map<String, dynamic>) { showLoginDialog();
final message = jsonDecode(response.body)["message"]; } else {
if (message != null && message.toString().isNotEmpty) { if (jsonDecode(response.body) is Map<String, dynamic>) {
Fluttertoast.showToast(msg: message ?? "", toastLength: Toast.LENGTH_LONG); final message = jsonDecode(response.body)["message"];
if (message != null && message.toString().isNotEmpty) {
Fluttertoast.showToast(msg: message ?? "", toastLength: Toast.LENGTH_LONG);
}
}
} }
} } catch (ex) {}
return response; return response;
} }
@ -136,14 +154,59 @@ class ApiManager {
// print(request.files); // print(request.files);
http.StreamedResponse streamedResponse = await request.send(); http.StreamedResponse streamedResponse = await request.send();
http.Response response = await http.Response.fromStream(streamedResponse); http.Response response = await http.Response.fromStream(streamedResponse);
// print(response.statusCode); try {
// log(response.body); if (response.statusCode == 401) {
if (jsonDecode(response.body) is Map<String, dynamic>) { showLoginDialog();
final message = jsonDecode(response.body)["message"]; } else {
if (message != null && message.toString().isNotEmpty) { if (jsonDecode(response.body) is Map<String, dynamic>) {
Fluttertoast.showToast(msg: message ?? "", toastLength: Toast.LENGTH_LONG); final message = jsonDecode(response.body)["message"];
if (message != null && message.toString().isNotEmpty) {
Fluttertoast.showToast(msg: message ?? "", toastLength: Toast.LENGTH_LONG);
}
}
} }
} } catch (ex) {}
return response; return response;
} }
void showLoginDialog() {
showDialog(
context: navigatorKey.currentContext,
barrierDismissible: false,
builder: (_) => Platform.isIOS
? CupertinoAlertDialog(
title: Text('Session Expired'),
content: Text('Login session is expired,\nPlease login.'),
//actionsAlignment: MainAxisAlignment.center,
actions: [
CupertinoButton(
child: Text("Login"),
onPressed: () {
logout(navigatorKey.currentContext);
},
)
],
)
: AlertDialog(
title: Text('Session Expired'),
content: Text('Login session is expired,\nPlease login.'),
actionsAlignment: MainAxisAlignment.center,
contentPadding: EdgeInsets.only(left: 24.0, top: 20.0, right: 24.0, bottom: 16.0),
actions: [
FilledButton(
child: Text("Login"),
onPressed: () {
logout(navigatorKey.currentContext);
},
)
],
));
}
void logout(context) async {
await Provider.of<SettingProvider>(context, listen: false).resetSettings();
Provider.of<UserProvider>(context, listen: false).reset();
Navigator.pop(context);
Navigator.of(context).pushNamedAndRemoveUntil(LoginPage.routeName, (routes) => true);
}
} }

@ -125,6 +125,8 @@ void main() async {
runApp(ChangeNotifierProvider(create: (_) => SettingProvider(), child: const MyApp())); runApp(ChangeNotifierProvider(create: (_) => SettingProvider(), child: const MyApp()));
} }
final navigatorKey = GlobalKey<NavigatorState>();
class MyApp extends StatelessWidget { class MyApp extends StatelessWidget {
const MyApp({Key key}) : super(key: key); const MyApp({Key key}) : super(key: key);
@ -221,6 +223,7 @@ class MyApp extends StatelessWidget {
supportedLocales: AppLocalizations.supportedLocales, supportedLocales: AppLocalizations.supportedLocales,
locale: Locale(settingProvider.language ?? 'en'), locale: Locale(settingProvider.language ?? 'en'),
initialRoute: SplashPage.routeName, initialRoute: SplashPage.routeName,
navigatorKey: navigatorKey,
routes: { routes: {
SplashPage.routeName: (_) => const SplashPage(), SplashPage.routeName: (_) => const SplashPage(),
LoginPage.routeName: (_) => const LoginPage(), LoginPage.routeName: (_) => const LoginPage(),

Loading…
Cancel
Save