Infelizmente eu não consegui habilitar a biometria. Já revisei todo o codigo, habilitei a autorização no AndroidManifest, a opção aparece mas quando clico estoura a seguinte exceção:
/flutter (30406): [ERROR:flutter/lib/ui/ui_dart_state.cc(199)] Unhandled Exception: PlatformException(NotAvailable, Required security features not enabled, null, null)
E/flutter (30406): #0 StandardMethodCodec.decodeEnvelope
package:flutter/…/services/message_codecs.dart:597
E/flutter (30406): #1 MethodChannel._invokeMethod
package:flutter/…/services/platform_channel.dart:158
E/flutter (30406): <asynchronous suspension>
E/flutter (30406): #2 LocalAuthentication.authenticate
package:local_auth/local_auth.dart:124
E/flutter (30406): <asynchronous suspension>
E/flutter (30406): #3 Biometria._autenticarCliente
package:bytebank/components/biometria.dart:35
E/flutter (30406): <asynchronous suspension>
E/flutter (30406): #4 Biometria._telaAutenticacao.<anonymous closure>
package:bytebank/components/biometria.dart:56
E/flutter (30406): <asynchronous suspension>
E/flutter (30406):
Minha classe registrar biometria está assim:
import 'package:bytebank/models/cliente.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:local_auth/local_auth.dart';
import 'package:provider/provider.dart';
class Biometria extends StatelessWidget {
final LocalAuthentication _authenticatorLocal = LocalAuthentication();
@override
Widget build(BuildContext context) {
return FutureBuilder(
future: _biometriaDisponivel(),
builder: (context, snapshot) {
if (snapshot.data == true) {
return _telaAutenticacao(context);
}
return Container();
},
);
}
Future<bool> _biometriaDisponivel() async {
try {
final isAvailable = await _authenticatorLocal.canCheckBiometrics;
final isDeviceSupported = await _authenticatorLocal.isDeviceSupported();
return isAvailable;
} on PlatformException catch (erro) {
print(erro);
}
}
Future<void> _autenticarCliente(context) async {
bool autenticado = false;
autenticado = await _authenticatorLocal.authenticate(
biometricOnly: true,
stickyAuth: true,
localizedReason: 'Favor autenticar no app :D',
useErrorDialogs: true);
Provider.of<Cliente>(context).biometria = autenticado;
}
Widget _telaAutenticacao(context) {
return Padding(
padding: EdgeInsets.only(top: 15, bottom: 15),
child: Column(
children: [
Text(
'Detectamos que vc tem sensor biométrico em seu smartphone. Deseja cadastrar o acesso biométrico?',
style: TextStyle(fontWeight: FontWeight.bold),
),
SizedBox(
height: 20,
),
RaisedButton(
onPressed: () async => await _autenticarCliente(context),
child: Text('Habilitar biometria'),
),
],
),
);
}
}