sync transactions with pocketbase

This commit is contained in:
davmar
2026-09-09 22:24:16 +02:00
parent c6d1fdb19e
commit 96627a830e
9 changed files with 1104 additions and 324 deletions
+14 -1
View File
@@ -9,6 +9,7 @@ import 'package:provider/provider.dart';
import 'providers/auth_provider.dart';
import 'providers/bank_provider.dart';
import 'providers/sync_provider.dart';
import 'providers/theme_provider.dart';
import 'providers/tx_meta_provider.dart';
import 'screens/splash_screen.dart';
@@ -17,6 +18,7 @@ import 'utils/app_config.dart';
import 'utils/app_theme.dart';
import 'utils/constants.dart';
import 'widgets/skip_build_when_covered.dart';
import 'widgets/sync_feedback_listener.dart';
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
@@ -45,12 +47,16 @@ class MyApp extends StatefulWidget {
class _MyAppState extends State<MyApp> {
late final BankController _bank;
late final TxMetaController _meta;
late final SyncController _sync;
late final AppLinks _appLinks;
StreamSubscription<Uri>? _linkSub;
@override
void initState() {
super.initState();
_meta = TxMetaController(widget.storage);
_sync = SyncController(auth: widget.auth, meta: _meta);
_bank = BankController(storage: widget.storage)..refresh();
_appLinks = AppLinks();
_listenForBankRedirects();
@@ -79,6 +85,7 @@ class _MyAppState extends State<MyApp> {
@override
void dispose() {
_linkSub?.cancel();
_sync.dispose();
_bank.dispose();
super.dispose();
}
@@ -89,7 +96,8 @@ class _MyAppState extends State<MyApp> {
providers: [
ChangeNotifierProvider<AuthController>.value(value: widget.auth),
ChangeNotifierProvider(create: (_) => ThemeController(widget.storage)),
ChangeNotifierProvider(create: (_) => TxMetaController(widget.storage)),
ChangeNotifierProvider<TxMetaController>.value(value: _meta),
ChangeNotifierProvider<SyncController>.value(value: _sync),
ChangeNotifierProvider<BankController>.value(value: _bank),
],
child: const _MaterialRoot(),
@@ -111,6 +119,11 @@ class _MaterialRoot extends StatelessWidget {
darkTheme: AppTheme.dark(),
themeMode: themeMode,
navigatorObservers: [appRouteObserver],
builder: (context, child) {
return SyncFeedbackListener(
child: child ?? const SizedBox.shrink(),
);
},
home: const SplashScreen(),
);
}