splashpay_sdk 1.1.0 copy "splashpay_sdk: ^1.1.0" to clipboard
splashpay_sdk: ^1.1.0 copied to clipboard

A standalone Flutter/Dart SDK for integrating the SplashPay Tanzania REST API. Supports Mobile Money payments, status checks, cancellations, and webhook helpers.

example/lib/main.dart

import 'package:flutter/material.dart';
import 'package:flutter_dotenv/flutter_dotenv.dart';
import 'package:splashpay_sdk/splashpay_sdk.dart';

Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await dotenv.load(fileName: '.env.example');
  await dotenv.load(
    fileName: '.env',
    mergeWith: dotenv.env,
    isOptional: true,
  );
  runApp(const SplashPayDemoApp());
}

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

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'SplashPay SDK Demo',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.teal),
        useMaterial3: true,
      ),
      home: const SplashPayDemoPage(),
    );
  }
}

class SplashPayDemoPage extends StatefulWidget {
  const SplashPayDemoPage({super.key});

  @override
  State<SplashPayDemoPage> createState() => _SplashPayDemoPageState();
}

class _SplashPayDemoPageState extends State<SplashPayDemoPage> {
  late final TextEditingController _apiKeyController;
  late final TextEditingController _apiSecretController;
  final _amountController = TextEditingController(text: '50000');
  final _phoneController = TextEditingController(text: '255712345678');
  final _referenceController = TextEditingController(text: 'TEST-001');
  final _customerNameController = TextEditingController(text: 'John Doe');
  final _customerEmailController = TextEditingController(text: 'john@example.com');

  bool _loading = false;
  String? _resultText;
  late final SplashPayEnvironment _environment;

  @override
  void initState() {
    super.initState();
    _apiKeyController = TextEditingController(
      text: dotenv.env['SPLASHPAY_API_KEY'] ?? '',
    );
    _apiSecretController = TextEditingController(
      text: dotenv.env['SPLASHPAY_API_SECRET'] ?? '',
    );
    _environment = _parseEnvironment(dotenv.env['SPLASHPAY_ENVIRONMENT']);
  }

  SplashPayEnvironment _parseEnvironment(String? value) {
    switch (value?.toLowerCase()) {
      case 'production':
      case 'live':
        return SplashPayEnvironment.production;
      case 'sandbox':
      case 'test':
      default:
        return SplashPayEnvironment.sandbox;
    }
  }

  @override
  void dispose() {
    _apiKeyController.dispose();
    _apiSecretController.dispose();
    _amountController.dispose();
    _phoneController.dispose();
    _referenceController.dispose();
    _customerNameController.dispose();
    _customerEmailController.dispose();
    super.dispose();
  }

  Future<void> _payWithSplashPay() async {
    final apiKey = _apiKeyController.text.trim();
    final apiSecret = _apiSecretController.text.trim();

    if (apiKey.isEmpty || apiSecret.isEmpty) {
      setState(() {
        _resultText =
            'Please enter API Key and API Secret (or set them in .env).';
      });
      return;
    }

    setState(() {
      _loading = true;
      _resultText = null;
    });

    try {
      final splashPay = SplashPay(
        apiKey: apiKey,
        apiSecret: apiSecret,
        environment: _environment,
      );

      final amount = num.tryParse(_amountController.text.trim()) ?? 0;

      final result = await splashPay.mobileMoney(
        amount: amount,
        phone: _phoneController.text.trim(),
        reference: _referenceController.text.trim(),
        customerName: _customerNameController.text.trim(),
        customerEmail: _customerEmailController.text.trim(),
      );

      setState(() {
        _resultText = '''
Status: ${result.paymentStatus.value}
Transaction ID: ${result.transactionId ?? '-'}
Reference: ${result.reference ?? '-'}
Message: ${result.message ?? '-'}
Code: ${result.code ?? '-'}
''';
      });
    } on SplashPayException catch (e) {
      setState(() {
        _resultText = 'Error: ${e.message}\nCode: ${e.code ?? '-'}';
      });
    } catch (e) {
      setState(() {
        _resultText = 'Unexpected error: $e';
      });
    } finally {
      setState(() {
        _loading = false;
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('SplashPay SDK Demo'),
      ),
      body: SingleChildScrollView(
        padding: const EdgeInsets.all(16),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.stretch,
          children: [
            const Text(
              'SplashPay SDK Demo',
              style: TextStyle(fontSize: 20, fontWeight: FontWeight.bold),
            ),
            const SizedBox(height: 8),
            Text(
              'Credentials loaded from .env (${_environment.name})',
              style: Theme.of(context).textTheme.bodySmall,
            ),
            const SizedBox(height: 16),
            TextField(
              controller: _apiKeyController,
              decoration: const InputDecoration(
                labelText: 'API Key',
                hintText: 'YOUR_API_KEY',
              ),
            ),
            const SizedBox(height: 12),
            TextField(
              controller: _apiSecretController,
              decoration: const InputDecoration(
                labelText: 'API Secret',
                hintText: 'YOUR_API_SECRET',
              ),
              obscureText: true,
            ),
            const SizedBox(height: 12),
            TextField(
              controller: _amountController,
              decoration: const InputDecoration(labelText: 'Amount'),
              keyboardType: TextInputType.number,
            ),
            const SizedBox(height: 12),
            TextField(
              controller: _phoneController,
              decoration: const InputDecoration(labelText: 'Phone'),
            ),
            const SizedBox(height: 12),
            TextField(
              controller: _referenceController,
              decoration: const InputDecoration(labelText: 'Reference'),
            ),
            const SizedBox(height: 12),
            TextField(
              controller: _customerNameController,
              decoration: const InputDecoration(labelText: 'Customer Name'),
            ),
            const SizedBox(height: 12),
            TextField(
              controller: _customerEmailController,
              decoration: const InputDecoration(labelText: 'Customer Email'),
              keyboardType: TextInputType.emailAddress,
            ),
            const SizedBox(height: 24),
            FilledButton(
              onPressed: _loading ? null : _payWithSplashPay,
              child: _loading
                  ? const SizedBox(
                      height: 20,
                      width: 20,
                      child: CircularProgressIndicator(strokeWidth: 2),
                    )
                  : const Text('PAY WITH SPLASHPAY'),
            ),
            const SizedBox(height: 24),
            const Text(
              'Result:',
              style: TextStyle(fontWeight: FontWeight.bold),
            ),
            const SizedBox(height: 8),
            Text(_resultText ?? 'No result yet.'),
          ],
        ),
      ),
    );
  }
}
0
likes
140
points
109
downloads

Documentation

Documentation
API reference

Publisher

verified publisherdukanitech.com

Weekly Downloads

A standalone Flutter/Dart SDK for integrating the SplashPay Tanzania REST API. Supports Mobile Money payments, status checks, cancellations, and webhook helpers.

Homepage
Repository (GitHub)
View/report issues

Topics

#payment #splashpay #mobile-money #tanzania #sdk

License

MIT (license)

Dependencies

crypto, dio, meta

More

Packages that depend on splashpay_sdk