Add 'Gunakan Sidik Jari' retry button on login (shown when biometric enabled+available). Loads biometric flags at init.

This commit is contained in:
cania
2026-08-13 10:08:12 +02:00
parent 3d9883d3e4
commit 300c22d481

View File

@@ -21,6 +21,8 @@ class _AuthScreenState extends State<AuthScreen> {
bool _busy = false;
String? _error;
String? _bioMsg;
bool _biometricAvailable = false;
bool _biometricEnabled = false;
@override
void initState() {
@@ -32,10 +34,16 @@ class _AuthScreenState extends State<AuthScreen> {
Future<void> _initMode() async {
final registered = await widget.auth.isRegistered();
if (!mounted) return;
setState(() => _isLogin = registered);
final avail = await widget.auth.canUseBiometrics();
final enabled = await widget.auth.isBiometricEnabled();
setState(() {
_isLogin = registered;
_biometricAvailable = avail;
_biometricEnabled = enabled;
});
// If already registered and biometric is enabled, prompt fingerprint
// automatically (unless a valid session already skips to dashboard).
if (registered && await widget.auth.isBiometricEnabled()) {
if (registered && enabled) {
final timeout = await widget.auth.getTimeoutMinutes();
final valid = await widget.auth.hasValidSession(timeout);
if (!valid) {
@@ -154,10 +162,26 @@ class _AuthScreenState extends State<AuthScreen> {
const SizedBox(height: 12),
_busy
? const CircularProgressIndicator()
: ElevatedButton(
: Column(
children: [
ElevatedButton(
onPressed: _submit,
child: Text(_isLogin ? 'Masuk' : 'Daftar'),
),
// Biometric retry button (only when enabled + registered)
if (_isLogin &&
_biometricAvailable &&
_biometricEnabled)
TextButton.icon(
onPressed: () {
setState(() => _bioMsg = null);
_promptBiometricOnOpen();
},
icon: const Icon(Icons.fingerprint),
label: const Text('Gunakan Sidik Jari'),
),
],
),
],
),
),