spare_link 0.1.0-beta.3 copy "spare_link: ^0.1.0-beta.3" to clipboard
spare_link: ^0.1.0-beta.3 copied to clipboard

Flutter SDK for Spare's redirect-based open-banking payment flows. Provides bank selection, consent orchestration, crash-safe session recovery, and sandbox/production support for KSA, UAE, and BAH.

example/lib/main.dart

// ignore_for_file: avoid_print
import 'package:flutter/material.dart';
import 'package:spare_link/spare_link.dart';

void main() => runApp(const ExampleApp());

class ExampleApp extends StatelessWidget {
  const ExampleApp({super.key});

  @override
  Widget build(BuildContext context) {
    return const MaterialApp(home: HomePage());
  }
}

/// Demonstrates the instance-based SpareLink API:
///   1. [SpareLink.start]          — launch the payment flow
///   2. [SpareLink.handleRedirect] — forward deep-link return URIs
///   3. [SpareLink.resumeIfNeeded] — recover a session after a crash/cold start
class HomePage extends StatefulWidget {
  const HomePage({super.key});

  @override
  State<HomePage> createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> with WidgetsBindingObserver {
  late final SpareLink _spareLink;

  @override
  void initState() {
    super.initState();
    _spareLink = SpareLink(
      environment: PaymentEnvironment.sandbox,
      tenant: SpareApiTenant.uae,
    );
    _spareLink.events.listen((event) => print('event: $event'));
    WidgetsBinding.instance.addObserver(this);
    WidgetsBinding.instance.addPostFrameCallback((_) async {
      final recovery = await _spareLink.resumeIfNeeded();
      switch (recovery) {
        case SessionRecovered(:final result):
          print('recovered: ${result.status.name}');
        case NoRecoveryNeeded(:final reason):
          print('no recovery: $reason');
      }
    });
  }

  @override
  void dispose() {
    WidgetsBinding.instance.removeObserver(this);
    _spareLink.dispose();
    super.dispose();
  }

  @override
  Future<bool> didPushRouteInformation(
    RouteInformation routeInformation,
  ) async {
    final uri = routeInformation.uri;
    if (uri.scheme == 'yourapp') {
      if (await _spareLink.handleRedirect(uri)) return true;
    }
    return super.didPushRouteInformation(routeInformation);
  }

  Future<void> _startPayment() async {
    final session = await _spareLink.start(
      navigator: Navigator.of(context),
      linkToken: 'your-session-token',
    );
    print('session.linkToken=${session.linkToken}');
    final result = await session.result;
    print('result: ${result.status.name}');
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text('spare_link example')),
      body: Center(
        child: FilledButton(
          onPressed: _startPayment,
          child: const Text('Start Payment'),
        ),
      ),
    );
  }
}
1
likes
0
points
132
downloads

Publisher

unverified uploader

Weekly Downloads

Flutter SDK for Spare's redirect-based open-banking payment flows. Provides bank selection, consent orchestration, crash-safe session recovery, and sandbox/production support for KSA, UAE, and BAH.

Homepage
Repository (GitHub)
View/report issues

Topics

#payments #open-banking #fintech #sdk

License

unknown (license)

Dependencies

device_info_plus, flutter, http, logging, shared_preferences, url_launcher, uuid

More

Packages that depend on spare_link