60 lines
1.4 KiB
Dart
60 lines
1.4 KiB
Dart
/// Shared UI helpers for bank connect actions.
|
|
library;
|
|
|
|
import 'package:flutter/material.dart';
|
|
|
|
import '../providers/bank_provider.dart';
|
|
import '../screens/bank_auth_screen.dart';
|
|
|
|
Future<void> runConnectBank(BuildContext context, BankController bank) async {
|
|
final start = await bank.beginConnect();
|
|
if (!context.mounted) return;
|
|
|
|
if (start == null) {
|
|
ScaffoldMessenger.of(context).showSnackBar(
|
|
SnackBar(content: Text(bank.error ?? 'Could not start bank connect')),
|
|
);
|
|
return;
|
|
}
|
|
|
|
final result = await Navigator.of(context).push<BankAuthResult>(
|
|
MaterialPageRoute(
|
|
builder: (_) => BankAuthScreen(
|
|
authUrl: start.authUrl,
|
|
pendingState: start.state,
|
|
),
|
|
),
|
|
);
|
|
|
|
if (!context.mounted) return;
|
|
if (result == null) return;
|
|
|
|
if (result.error != null && result.error!.isNotEmpty) {
|
|
ScaffoldMessenger.of(context).showSnackBar(
|
|
SnackBar(content: Text('Bank auth failed: ${result.error}')),
|
|
);
|
|
return;
|
|
}
|
|
|
|
if (!result.hasCode) {
|
|
ScaffoldMessenger.of(context).showSnackBar(
|
|
const SnackBar(content: Text('Bank redirect missing code')),
|
|
);
|
|
return;
|
|
}
|
|
|
|
final linked = await bank.completeWithCode(
|
|
code: result.code!,
|
|
state: result.state,
|
|
);
|
|
if (!context.mounted) return;
|
|
|
|
ScaffoldMessenger.of(context).showSnackBar(
|
|
SnackBar(
|
|
content: Text(
|
|
linked ? 'Bank linked' : (bank.error ?? 'Could not complete connect'),
|
|
),
|
|
),
|
|
);
|
|
}
|