login reAuth
parent
02db5d8a9b
commit
9b2b0a805d
|
|
@ -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(
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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)));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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 {
|
||||||
|
|
|
||||||
|
|
@ -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});
|
||||||
|
}
|
||||||
|
|
@ -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();
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue