login reAuth

4.4
Serik.Uvaissov 2020-07-08 16:16:07 +06:00
parent 02db5d8a9b
commit 9b2b0a805d
7 changed files with 117 additions and 44 deletions

View File

@ -12,9 +12,10 @@ import 'package:flutter/material.dart';
Route<dynamic> generateRoute(RouteSettings settings) { Route<dynamic> generateRoute(RouteSettings settings) {
switch (settings.name) { switch (settings.name) {
case LoginViewRoute: case LoginViewRoute:
LoginModel model = settings.arguments as LoginModel;
return _getPageRoute( return _getPageRoute(
routeName: settings.name, routeName: settings.name,
viewToShow: LoginView(), viewToShow: LoginView(loginModel: model,),
); );
case HomeViewRoute: case HomeViewRoute:
return _getPageRoute( return _getPageRoute(

View File

@ -2,6 +2,9 @@ import 'dart:convert';
import 'dart:io'; import 'dart:io';
import 'package:aman_kassa_flutter/core/base/base_service.dart'; import 'package:aman_kassa_flutter/core/base/base_service.dart';
import 'package:aman_kassa_flutter/redux/state/user_state.dart';
import 'package:aman_kassa_flutter/redux/store.dart';
import 'package:aman_kassa_flutter/views/login/login_view.dart';
import 'package:device_info/device_info.dart'; import 'package:device_info/device_info.dart';
import 'package:aman_kassa_flutter/core/models/message.dart'; import 'package:aman_kassa_flutter/core/models/message.dart';
import 'package:aman_kassa_flutter/core/models/response.dart'; import 'package:aman_kassa_flutter/core/models/response.dart';
@ -156,9 +159,15 @@ class ApiService extends BaseService {
String body = await response.stream.bytesToString(); String body = await response.stream.bytesToString();
if(statusCheck) { //Проверка на авторизованный запрос, необязательный параметр if(statusCheck) { //Проверка на авторизованный запрос, необязательный параметр
Response check = Response.fromJsonDynamic(json.decode(body)); Response check = Response.fromJsonDynamic(json.decode(body));
if (!check.operation && check.status == 401) { if (!check.operation && ( [401,402,403,412].contains(check.status) ) ) {
_dialogService.showDialog(description: 'Необходимо пройти повторную авторизацию');
_navigatorService.replace(LoginViewRoute); var future = new Future.delayed(const Duration(milliseconds: 1000), (){
_dialogService.showDialog(description: 'Необходимо пройти повторную авторизацию');
UserState state = Redux.store.state.userState;
_navigatorService.replace(LoginViewRoute, arguments: LoginModel(authType: state.authenticateType, login: state.login, password: state.password ));
});
} }
} }
return body; return body;

View File

@ -10,10 +10,10 @@ class NavigatorService extends BaseService {
.pushNamed(routeName, arguments: arguments); .pushNamed(routeName, arguments: arguments);
} }
Future<dynamic> replace(String routeName) { Future<dynamic> replace(String routeName, {dynamic arguments}) {
log.i('routeName: $routeName'); log.i('routeName: $routeName');
return navigatorKey.currentState return navigatorKey.currentState
.pushNamedAndRemoveUntil(routeName, (Route<dynamic> route) => false); .pushNamedAndRemoveUntil(routeName, (Route<dynamic> route) => false, arguments: arguments);
} }

View File

@ -11,6 +11,7 @@ import 'package:aman_kassa_flutter/core/services/dialog_service.dart';
import 'package:aman_kassa_flutter/core/services/navigator_service.dart'; import 'package:aman_kassa_flutter/core/services/navigator_service.dart';
import 'package:aman_kassa_flutter/redux/constants/auth_type_const.dart'; import 'package:aman_kassa_flutter/redux/constants/auth_type_const.dart';
import 'package:aman_kassa_flutter/redux/state/user_state.dart'; import 'package:aman_kassa_flutter/redux/state/user_state.dart';
import 'package:aman_kassa_flutter/views/login/login_view.dart';
import 'package:redux/redux.dart'; import 'package:redux/redux.dart';
import 'package:meta/meta.dart'; import 'package:meta/meta.dart';
import 'package:redux_thunk/redux_thunk.dart'; import 'package:redux_thunk/redux_thunk.dart';
@ -54,7 +55,7 @@ Future<void> checkUserAction(Store<AppState> store) async {
); );
if (!isAuthenticated) { if (!isAuthenticated) {
_navigation.replace(LoginViewRoute); _navigation.replace(LoginViewRoute, arguments: LoginModel());
} else { } else {
_navigation.replace(HomeViewRoute); _navigation.replace(HomeViewRoute);
} }
@ -75,7 +76,7 @@ Future<void> logoutAction(Store<AppState> store) async {
), ),
), ),
); );
_navigation.replace(LoginViewRoute); _navigation.replace(LoginViewRoute, arguments: LoginModel());
} catch (error) { } catch (error) {
store.dispatch(SetUserStateAction(UserState(isLoading: false))); store.dispatch(SetUserStateAction(UserState(isLoading: false)));
} }

View File

@ -65,57 +65,77 @@ class _AdditionalTabState extends State<AdditionalTab> {
setState(() { setState(() {
closeSmenaBusy = true; closeSmenaBusy = true;
}); });
await Redux.store.dispatch(closeSmena); try {
setState(() { await Redux.store.dispatch(closeSmena);
closeSmenaBusy = false; } catch (e) {
}); print(e);
} finally {
setState(() {
closeSmenaBusy = false;
});
}
} }
void _openSmena() async { void _openSmena() async {
setState(() { setState(() {
openSmenaBusy = true; openSmenaBusy = true;
}); });
await Redux.store.dispatch(openSmena); try {
setState(() { await Redux.store.dispatch(openSmena);
openSmenaBusy = false; } catch (e) {
}); print(e);
} finally {
setState(() {
openSmenaBusy = false;
});
}
} }
void _xReport() async { void _xReport() async {
setState(() { setState(() {
xReportBusy = true; xReportBusy = true;
}); });
User user = Redux.store.state.userState.user; try {
Response response = await _api.xReport(user.token); User user = Redux.store.state.userState.user;
if (response.operation) { Response response = await _api.xReport(user.token);
_navigator.push(ImageShowRoute, if (response.operation) {
arguments: _navigator.push(ImageShowRoute,
ImageShowModel(data: response.body['check'], title: 'X Отчет')); arguments:
String url = response?.body['link']; ImageShowModel(data: response.body['check'], title: 'X Отчет'));
_dataService.insertVoucher( String url = response?.body['link'];
user: user, _dataService.insertVoucher(
name: 'X Отчет', user: user,
base64Data: response.body['check'], name: 'X Отчет',
type: VoucherTypeReport, base64Data: response.body['check'],
url: url); type: VoucherTypeReport,
} else { url: url);
_dialog.showDialog(description: response.body['message']); } else {
_dialog.showDialog(description: response.body['message']);
}
} catch (e) {
print(e);
} finally {
setState(() {
xReportBusy = false;
});
} }
setState(() {
xReportBusy = false;
});
} }
void _updateCatalog() async { void _updateCatalog() async {
setState(() { setState(() {
updateCatalog = true; updateCatalog = true;
}); });
Dialogs.showLoadingDialog(context, _keyLoader); try {
await _dataService.getDataFromServer(Redux.store.state.userState.user); Dialogs.showLoadingDialog(context, _keyLoader);
Navigator.of(_keyLoader.currentContext, rootNavigator: true).pop(); await _dataService.getDataFromServer(Redux.store.state.userState.user);
setState(() { Navigator.of(_keyLoader.currentContext, rootNavigator: true).pop();
updateCatalog = false; } catch (e) {
}); print(e);
} finally {
setState(() {
updateCatalog = false;
});
}
} }
void _deposit() async { void _deposit() async {

View File

@ -4,6 +4,7 @@ import 'package:aman_kassa_flutter/core/locator.dart';
import 'package:aman_kassa_flutter/core/services/ApiService.dart'; import 'package:aman_kassa_flutter/core/services/ApiService.dart';
import 'package:aman_kassa_flutter/core/services/dialog_service.dart'; import 'package:aman_kassa_flutter/core/services/dialog_service.dart';
import 'package:aman_kassa_flutter/redux/actions/user_actions.dart'; import 'package:aman_kassa_flutter/redux/actions/user_actions.dart';
import 'package:aman_kassa_flutter/redux/constants/auth_type_const.dart';
import 'package:aman_kassa_flutter/redux/state/user_state.dart'; import 'package:aman_kassa_flutter/redux/state/user_state.dart';
import 'package:aman_kassa_flutter/redux/store.dart'; import 'package:aman_kassa_flutter/redux/store.dart';
import 'package:aman_kassa_flutter/shared/app_colors.dart'; import 'package:aman_kassa_flutter/shared/app_colors.dart';
@ -19,15 +20,47 @@ import 'package:flutter_redux/flutter_redux.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:material_design_icons_flutter/material_design_icons_flutter.dart'; import 'package:material_design_icons_flutter/material_design_icons_flutter.dart';
class LoginView extends StatelessWidget { class LoginView extends StatefulWidget {
final emailController = TextEditingController(); final LoginModel loginModel;
final passwordController = TextEditingController(); LoginView({this.loginModel});
@override
_LoginViewState createState() => _LoginViewState();
}
class _LoginViewState extends State<LoginView> {
TextEditingController emailController ;
TextEditingController passwordController;
final FocusNode passwordNode = new FocusNode(); final FocusNode passwordNode = new FocusNode();
final GlobalKey<ScaffoldState> _scaffoldKey = new GlobalKey<ScaffoldState>(); final GlobalKey<ScaffoldState> _scaffoldKey = new GlobalKey<ScaffoldState>();
final DialogService _dialogService = locator<DialogService>(); final DialogService _dialogService = locator<DialogService>();
final ApiService _apiService = locator<ApiService>(); final ApiService _apiService = locator<ApiService>();
@override
void initState() {
super.initState();
if(widget.loginModel!=null && widget.loginModel.authType == AuthenticateTypeLogin) {
emailController = TextEditingController(text: widget.loginModel.login);
passwordController = TextEditingController(text: widget.loginModel.password);
} else {
emailController = TextEditingController();
passwordController = TextEditingController();
}
}
@override
void dispose() {
emailController.dispose();
passwordController.dispose();
super.dispose();
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return StoreConnector<AppState, UserState>( return StoreConnector<AppState, UserState>(
@ -147,3 +180,10 @@ class LoginView extends StatelessWidget {
} }
} }
} }
class LoginModel {
final String authType;
final String login;
final String password;
LoginModel({this.authType, this.login, this.password});
}

View File

@ -207,9 +207,11 @@ class _PaymentViewState extends State<PaymentView> {
_navigatorService.pop(); _navigatorService.pop();
_navigatorService.push(ImageShowRoute, _navigatorService.push(ImageShowRoute,
arguments: ImageShowModel(data:check, title: message, url: url )); arguments: ImageShowModel(data:check, title: message, url: url ));
} else if (!response.operation && response.status != 500) { } else if (!response.operation && ![401,402,403,412,500].contains(response.status)) {
Navigator.of(_keyLoader.currentContext, rootNavigator: true).pop(); Navigator.of(_keyLoader.currentContext, rootNavigator: true).pop();
_dialogService.showDialog(description: response.body['message']); _dialogService.showDialog(description: response.body['message']);
} else {
Navigator.of(_keyLoader.currentContext, rootNavigator: true).pop();
} }
} else { } else {
Navigator.of(_keyLoader.currentContext, rootNavigator: true).pop(); Navigator.of(_keyLoader.currentContext, rootNavigator: true).pop();