129 lines
4.5 KiB
Dart
129 lines
4.5 KiB
Dart
import 'package:flutter_redux/flutter_redux.dart';
|
||
import 'package:flutter/material.dart';
|
||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||
import 'package:material_design_icons_flutter/material_design_icons_flutter.dart';
|
||
import 'package:satu/core/redux/actions/user_actions.dart';
|
||
import 'package:satu/core/redux/state/user_state.dart';
|
||
import 'package:satu/core/redux/store.dart';
|
||
import 'package:satu/core/services/dialog_service.dart';
|
||
import 'package:satu/core/services/navigator_service.dart';
|
||
import 'package:satu/core/utils/locator.dart';
|
||
import 'package:satu/routes/route_names.dart';
|
||
import 'package:satu/shared/ui_helpers.dart';
|
||
import 'package:satu/widgets/buttons/busy_button.dart';
|
||
import 'package:satu/widgets/fields/input_field.dart';
|
||
import 'package:satu/widgets/ui/logo.dart';
|
||
|
||
class LoginView extends StatefulWidget {
|
||
@override
|
||
_LoginViewState createState() => _LoginViewState();
|
||
}
|
||
|
||
class _LoginViewState extends State<LoginView> {
|
||
late TextEditingController emailController;
|
||
|
||
late TextEditingController passwordController;
|
||
|
||
final FocusNode passwordNode = new FocusNode();
|
||
|
||
final DialogService _dialogService = locator<DialogService>();
|
||
|
||
@override
|
||
void initState() {
|
||
super.initState();
|
||
emailController = TextEditingController(text: 'test11@gmail.com');
|
||
passwordController = TextEditingController(text: 'qwe123');
|
||
}
|
||
|
||
@override
|
||
void dispose() {
|
||
emailController.dispose();
|
||
passwordController.dispose();
|
||
passwordNode.dispose();
|
||
super.dispose();
|
||
}
|
||
|
||
@override
|
||
Widget build(BuildContext context) {
|
||
return StoreConnector<AppState, UserState>(
|
||
converter: (store) => store.state.userState!,
|
||
builder: (context, vm) {
|
||
return Scaffold(body: LayoutBuilder(
|
||
builder: (context, constraints) {
|
||
return SingleChildScrollView(
|
||
child: ConstrainedBox(
|
||
constraints: BoxConstraints(minHeight: constraints.maxHeight),
|
||
child: Column(
|
||
mainAxisSize: MainAxisSize.max,
|
||
mainAxisAlignment: MainAxisAlignment.center,
|
||
crossAxisAlignment: CrossAxisAlignment.center,
|
||
children: <Widget>[
|
||
const LogoSatu(),
|
||
InputField(
|
||
placeholder: 'Введите почту',
|
||
controller: emailController,
|
||
textInputType: TextInputType.emailAddress,
|
||
nextFocusNode: passwordNode,
|
||
),
|
||
verticalSpaceSmall,
|
||
InputField(
|
||
placeholder: 'Введите пароль',
|
||
password: true,
|
||
controller: passwordController,
|
||
fieldFocusNode: passwordNode,
|
||
enterPressed: _pressBtnEnter,
|
||
textInputAction: TextInputAction.done,
|
||
),
|
||
verticalSpaceMedium,
|
||
Padding(
|
||
padding: EdgeInsets.only(
|
||
left: 45.sp, right: 45.sp, top: 30.sp),
|
||
child: BusyButton(
|
||
title: 'ВОЙТИ',
|
||
busy: vm.isLoading!,
|
||
onPressed: _pressBtnEnter,
|
||
),
|
||
),
|
||
verticalSpaceLarge,
|
||
IconButton(
|
||
icon: const Icon(MdiIcons.qrcodeScan),
|
||
iconSize: ScreenUtil().setSp(40.0),
|
||
tooltip: 'Scan',
|
||
onPressed: scan,
|
||
)
|
||
],
|
||
),
|
||
),
|
||
);
|
||
},
|
||
));
|
||
});
|
||
}
|
||
|
||
Future<void> _pressBtnEnter() async {
|
||
Redux.store!
|
||
.dispatch(authenticate(emailController.text, passwordController.text));
|
||
}
|
||
|
||
Future<void> scan() async {
|
||
final NavigatorService _nav = locator<NavigatorService>();
|
||
final dynamic result = await _nav.push(addByBarcodeViewRoute);
|
||
if (result != null) {
|
||
if (result.length == 60) {
|
||
Redux.store?.dispatch(authenticateByToken(result as String));
|
||
} else {
|
||
_dialogService.showDialog(description: 'Не верный формат QR кода');
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
class LoginModel {
|
||
LoginModel(
|
||
{required this.authType, required this.login, required this.password});
|
||
|
||
final String authType;
|
||
final String login;
|
||
final String password;
|
||
}
|