2021-02-02 14:33:23 +00:00
|
|
|
import 'package:flutter/material.dart';
|
|
|
|
import 'package:flutter_translate/flutter_translate.dart';
|
|
|
|
|
|
|
|
import '../../core/enums/viewstate.dart';
|
|
|
|
import '../../core/services/dialog_service.dart';
|
|
|
|
import '../../core/services/navigation_service.dart';
|
|
|
|
import '../../core/viewmodels/login_model.dart';
|
|
|
|
import '../../locator.dart';
|
|
|
|
import '../../ui/views/home_view.dart';
|
|
|
|
import '../../ui/widgets/my_appbar.dart';
|
|
|
|
import '../shared/app_colors.dart';
|
2021-04-05 20:06:54 +00:00
|
|
|
import '../shared/ui_helpers.dart';
|
|
|
|
import '../widgets/login_header_apikey.dart';
|
|
|
|
import '../widgets/login_header_credentials.dart';
|
2021-02-02 14:33:23 +00:00
|
|
|
import 'base_view.dart';
|
|
|
|
|
2021-04-05 20:06:54 +00:00
|
|
|
class LoginView extends StatelessWidget {
|
2021-02-02 14:33:23 +00:00
|
|
|
static const routeName = '/login';
|
|
|
|
|
|
|
|
final NavigationService _navigationService = locator<NavigationService>();
|
|
|
|
final DialogService _dialogService = locator<DialogService>();
|
|
|
|
|
2023-01-04 20:17:54 +00:00
|
|
|
LoginView({super.key});
|
|
|
|
|
2021-02-02 14:33:23 +00:00
|
|
|
@override
|
|
|
|
Widget build(BuildContext context) {
|
|
|
|
final logo = Hero(
|
|
|
|
tag: 'hero',
|
|
|
|
child: CircleAvatar(
|
|
|
|
backgroundColor: Colors.transparent,
|
2021-04-05 20:06:54 +00:00
|
|
|
radius: 36.0,
|
2021-02-02 14:33:23 +00:00
|
|
|
child: Image.asset('assets/logo_caption.png'),
|
|
|
|
),
|
|
|
|
);
|
|
|
|
|
|
|
|
return BaseView<LoginModel>(
|
|
|
|
onModelReady: (model) => model.init(),
|
|
|
|
builder: (context, model, child) => Scaffold(
|
|
|
|
appBar: MyAppBar(title: Text(translate('titles.login'))),
|
2023-01-04 20:17:54 +00:00
|
|
|
body: model.state == ViewState.busy
|
|
|
|
? const Center(child: CircularProgressIndicator())
|
2021-02-02 14:33:23 +00:00
|
|
|
: ListView(
|
|
|
|
shrinkWrap: true,
|
2023-01-04 20:17:54 +00:00
|
|
|
padding: const EdgeInsets.only(left: 10.0, right: 10.0),
|
2021-02-02 14:33:23 +00:00
|
|
|
children: <Widget>[
|
2021-04-05 20:06:54 +00:00
|
|
|
UIHelper.verticalSpaceMedium(),
|
2021-02-02 14:33:23 +00:00
|
|
|
Center(child: logo),
|
2021-04-05 20:06:54 +00:00
|
|
|
UIHelper.verticalSpaceMedium(),
|
2021-02-02 14:33:23 +00:00
|
|
|
Center(
|
|
|
|
child: Wrap(
|
|
|
|
crossAxisAlignment: WrapCrossAlignment.center,
|
|
|
|
alignment: WrapAlignment.center,
|
|
|
|
children: <Widget>[
|
|
|
|
InkWell(
|
2023-01-04 20:17:54 +00:00
|
|
|
child: const Icon(Icons.help),
|
2021-02-02 14:33:23 +00:00
|
|
|
onTap: () {
|
|
|
|
_dialogService.showDialog(
|
2023-01-16 00:44:34 +00:00
|
|
|
title: translate(
|
|
|
|
'login.compatibility_dialog.title'),
|
|
|
|
description: translate(
|
|
|
|
'login.compatibility_dialog.body'));
|
2021-02-02 14:33:23 +00:00
|
|
|
},
|
2021-04-05 20:06:54 +00:00
|
|
|
),
|
|
|
|
InkWell(
|
2023-01-16 00:44:34 +00:00
|
|
|
child: Icon(
|
|
|
|
model.useCredentialsLogin
|
|
|
|
? Icons.person_outline
|
|
|
|
: Icons.vpn_key,
|
|
|
|
color: blueColor),
|
2021-04-05 20:06:54 +00:00
|
|
|
onTap: () {
|
|
|
|
model.toggleLoginMethod();
|
|
|
|
},
|
2021-02-02 14:33:23 +00:00
|
|
|
)
|
|
|
|
])),
|
2021-04-05 20:06:54 +00:00
|
|
|
UIHelper.verticalSpaceMedium(),
|
|
|
|
model.useCredentialsLogin
|
|
|
|
? LoginCredentialsHeaders(
|
|
|
|
validationMessage: model.errorMessage,
|
|
|
|
uriController: model.uriController,
|
|
|
|
usernameController: model.userNameController,
|
|
|
|
passwordController: model.passwordController,
|
|
|
|
)
|
|
|
|
: LoginApiKeyHeaders(
|
|
|
|
validationMessage: model.errorMessage,
|
|
|
|
uriController: model.uriController,
|
|
|
|
apiKeyController: model.apiKeyController),
|
|
|
|
UIHelper.verticalSpaceMedium(),
|
2022-12-16 21:53:59 +00:00
|
|
|
ElevatedButton.icon(
|
2023-01-04 20:17:54 +00:00
|
|
|
icon: const Icon(Icons.login, color: blueColor),
|
2022-12-16 21:53:59 +00:00
|
|
|
label: Text(translate('login.button')),
|
2021-02-02 14:33:23 +00:00
|
|
|
onPressed: () async {
|
2021-04-05 20:06:54 +00:00
|
|
|
var loginSuccess = await model.login();
|
2021-02-02 14:33:23 +00:00
|
|
|
if (loginSuccess) {
|
2023-01-16 00:44:34 +00:00
|
|
|
_navigationService
|
|
|
|
.navigateAndReplaceTo(HomeView.routeName);
|
2021-02-02 14:33:23 +00:00
|
|
|
}
|
|
|
|
},
|
|
|
|
)
|
|
|
|
],
|
|
|
|
),
|
|
|
|
),
|
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|