Authentcation

This commit is contained in:
Hillel Coren 2018-09-14 12:11:19 -07:00
parent ee0d9ee256
commit 8ff6f7656c
3 changed files with 22 additions and 8 deletions

View File

@ -166,7 +166,7 @@ class InvoiceNinjaAppState extends State<InvoiceNinjaApp> {
children: <Widget>[ children: <Widget>[
Icon( Icon(
FontAwesomeIcons.lock, FontAwesomeIcons.lock,
size: 26.0, size: 24.0,
color: Colors.grey[400], color: Colors.grey[400],
), ),
SizedBox( SizedBox(

View File

@ -9,6 +9,7 @@ import 'package:invoiceninja_flutter/ui/app/app_builder.dart';
import 'package:invoiceninja_flutter/utils/completers.dart'; import 'package:invoiceninja_flutter/utils/completers.dart';
import 'package:invoiceninja_flutter/utils/localization.dart'; import 'package:invoiceninja_flutter/utils/localization.dart';
import 'package:invoiceninja_flutter/utils/platforms.dart'; import 'package:invoiceninja_flutter/utils/platforms.dart';
import 'package:local_auth/local_auth.dart';
import 'package:redux/redux.dart'; import 'package:redux/redux.dart';
import 'package:invoiceninja_flutter/ui/auth/login_vm.dart'; import 'package:invoiceninja_flutter/ui/auth/login_vm.dart';
import 'package:invoiceninja_flutter/ui/settings/settings_list.dart'; import 'package:invoiceninja_flutter/ui/settings/settings_list.dart';
@ -101,15 +102,27 @@ class SettingsListVM {
store.dispatch(UserSettingsChanged(enableDarkMode: value)); store.dispatch(UserSettingsChanged(enableDarkMode: value));
AppBuilder.of(context).rebuild(); AppBuilder.of(context).rebuild();
}, },
onRequireAuthenticationChanged: onRequireAuthenticationChanged: (BuildContext context, bool value) async {
(BuildContext context, bool value) async { bool authenticated = false;
final SharedPreferences prefs = await SharedPreferences.getInstance(); try {
prefs.setBool(kSharedPrefRequireAuthentication, value); authenticated = await LocalAuthentication()
store.dispatch(UserSettingsChanged(requireAuthentication: value)); .authenticateWithBiometrics(
localizedReason: 'Please authenticate to change the setting',
useErrorDialogs: true,
stickyAuth: false);
} catch (e) {
print(e);
}
if (authenticated) {
final SharedPreferences prefs = await SharedPreferences.getInstance();
prefs.setBool(kSharedPrefRequireAuthentication, value);
store.dispatch(UserSettingsChanged(requireAuthentication: value));
} else {
}
}, },
enableDarkMode: store.state.uiState.enableDarkMode, enableDarkMode: store.state.uiState.enableDarkMode,
requireAuthentication: requireAuthentication: store.state.uiState.requireAuthentication,
store.state.uiState.requireAuthentication,
); );
} }
} }

View File

@ -14,6 +14,7 @@ class AppLocalization {
static final Map<String, Map<String, String>> _localizedValues = { static final Map<String, Map<String, String>> _localizedValues = {
'en': { 'en': {
'locked': 'Locked', 'locked': 'Locked',
'authenticate': 'Authenticate', 'authenticate': 'Authenticate',
'please_authenticate': 'Please authenticate', 'please_authenticate': 'Please authenticate',