| // Copyright 2017 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| // ignore_for_file: public_member_api_docs |
| |
| import 'dart:async'; |
| |
| import 'package:flutter/material.dart'; |
| import 'package:flutter/services.dart'; |
| import 'package:local_auth/local_auth.dart'; |
| |
| void main() { |
| runApp(MyApp()); |
| } |
| |
| class MyApp extends StatefulWidget { |
| @override |
| _MyAppState createState() => _MyAppState(); |
| } |
| |
| class _MyAppState extends State<MyApp> { |
| final LocalAuthentication auth = LocalAuthentication(); |
| late bool _canCheckBiometrics; |
| late List<BiometricType> _availableBiometrics; |
| String _authorized = 'Not Authorized'; |
| bool _isAuthenticating = false; |
| |
| Future<void> _checkBiometrics() async { |
| late bool canCheckBiometrics; |
| try { |
| canCheckBiometrics = await auth.canCheckBiometrics; |
| } on PlatformException catch (e) { |
| canCheckBiometrics = false; |
| print(e); |
| } |
| if (!mounted) return; |
| |
| setState(() { |
| _canCheckBiometrics = canCheckBiometrics; |
| }); |
| } |
| |
| Future<void> _getAvailableBiometrics() async { |
| late List<BiometricType> availableBiometrics; |
| try { |
| availableBiometrics = await auth.getAvailableBiometrics(); |
| } on PlatformException catch (e) { |
| availableBiometrics = <BiometricType>[]; |
| print(e); |
| } |
| if (!mounted) return; |
| |
| setState(() { |
| _availableBiometrics = availableBiometrics; |
| }); |
| } |
| |
| Future<void> _authenticate() async { |
| bool authenticated = false; |
| try { |
| setState(() { |
| _isAuthenticating = true; |
| _authorized = 'Authenticating'; |
| }); |
| authenticated = await auth.authenticateWithBiometrics( |
| localizedReason: 'Scan your fingerprint to authenticate', |
| useErrorDialogs: true, |
| stickyAuth: true); |
| setState(() { |
| _isAuthenticating = false; |
| _authorized = 'Authenticating'; |
| }); |
| } on PlatformException catch (e) { |
| print(e); |
| } |
| if (!mounted) return; |
| |
| final String message = authenticated ? 'Authorized' : 'Not Authorized'; |
| setState(() { |
| _authorized = message; |
| }); |
| } |
| |
| void _cancelAuthentication() { |
| auth.stopAuthentication(); |
| } |
| |
| @override |
| Widget build(BuildContext context) { |
| return MaterialApp( |
| home: Scaffold( |
| appBar: AppBar( |
| title: const Text('Plugin example app'), |
| ), |
| body: ConstrainedBox( |
| constraints: const BoxConstraints.expand(), |
| child: Column( |
| mainAxisAlignment: MainAxisAlignment.spaceAround, |
| children: <Widget>[ |
| Text('Can check biometrics: $_canCheckBiometrics\n'), |
| RaisedButton( |
| child: const Text('Check biometrics'), |
| onPressed: _checkBiometrics, |
| ), |
| Text('Available biometrics: $_availableBiometrics\n'), |
| RaisedButton( |
| child: const Text('Get available biometrics'), |
| onPressed: _getAvailableBiometrics, |
| ), |
| Text('Current State: $_authorized\n'), |
| RaisedButton( |
| child: Text(_isAuthenticating ? 'Cancel' : 'Authenticate'), |
| onPressed: |
| _isAuthenticating ? _cancelAuthentication : _authenticate, |
| ) |
| ])), |
| )); |
| } |
| } |