uat_larkfinserv_multi 1.0.7 copy "uat_larkfinserv_multi: ^1.0.7" to clipboard
uat_larkfinserv_multi: ^1.0.7 copied to clipboard

A Flutter SDK for integrating Lark FinServ's loan eligibility check functionality into your Flutter applications.

example/lib/main.dart

import 'package:flutter/material.dart';
import 'package:uat_larkfinserv_multi/uat_larkfinserv_multi.dart';

void main() {
  runApp(const MyApp());
}

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

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'LarkFinServ SDK Example',
      theme: ThemeData(
        primarySwatch: Colors.blue,
        useMaterial3: true,
      ),
      home: SDKExampleScreen(context),
    );
  }
}

class SDKExampleScreen extends StatefulWidget {
  const SDKExampleScreen(this.context, {super.key});

  final BuildContext context;

  @override
  State<SDKExampleScreen> createState() => _SDKExampleScreenState();
}

class _SDKExampleScreenState extends State<SDKExampleScreen> {
  final LarkFinServSDK _sdk = LarkFinServSDK();
  bool _isInitialized = false;
  bool _isLoading = false;
  String _statusMessage = 'SDK not initialized';
  EligibilityResult? _eligibilityResult;
  String? _errorMessage;

  // Configuration - Replace with your actual API credentials
  final String _apiKey = 'your_api_key_here';
  final String _apiSecret = 'your_api_secret_here';
  final String _phoneNumber = '+919876543210'; // Optional
  final String _environment = 'sandbox'; // or 'production'

  @override
  void initState() {
    super.initState();
    _initializeSDK();
  }

  Future<void> _initializeSDK() async {
    setState(() {
      _isLoading = true;
      _statusMessage = 'Initializing SDK...';
      _errorMessage = null;
    });

    try {
      final config = PartnerConfig(
        apiKey: _apiKey,
        apiSecret: _apiSecret,
        phoneNumber: _phoneNumber,
        environment: _environment,
        theme: ThemeConfig(
          primaryColor: '#2196F3',
          secondaryColor: '#FFC107',
          fontFamily: 'Roboto',
          name: 'My App',
        ),
      );

      await _sdk.initialize(config);

      // Listen to SDK events
      _sdk.events.listen((event) {
        setState(() {
          switch (event.type) {
            case SDKEventType.ready:
              _statusMessage = 'SDK Ready';
              _isInitialized = true;
              break;
            case SDKEventType.eligibilityResult:
              _eligibilityResult = event.data?['result'] as EligibilityResult?;
              _statusMessage = 'Eligibility check completed';
              break;
            case SDKEventType.error:
              final error = event.data?['error'] as SDKError?;
              _errorMessage = error?.message ?? 'Unknown error occurred';
              _statusMessage = 'Error occurred';
              break;
            case SDKEventType.close:
              _statusMessage = 'SDK closed';
              break;
            case SDKEventType.closeFrame:
              _statusMessage = 'Frame closed';
              break;
            case SDKEventType.initiated:
              _statusMessage = 'Eligibility check initiated';
              break;
          }
        });
      });

      setState(() {
        _isLoading = false;
        _statusMessage = 'SDK initialized successfully';
        _isInitialized = true;
      });
    } catch (e) {
      setState(() {
        _isLoading = false;
        _errorMessage = e.toString();
        _statusMessage = 'Failed to initialize SDK';
      });
    }
  }

  Future<void> _openEligibilityCheck() async {
    if (!_isInitialized) {
      _showSnackBar('Please initialize SDK first');
      return;
    }

    try {
      await _sdk.openEligibilityCheck(context, SDKMode.popup);
    } catch (e) {
      setState(() {
        _errorMessage = e.toString();
      });
      _showSnackBar('Failed to open eligibility check: $e');
    }
  }

  void _showEligibilityWidget() {
    if (!_isInitialized) {
      _showSnackBar('Please initialize SDK first');
      return;
    }

    Navigator.of(context).push(
      MaterialPageRoute(
        builder: (context) => EligibilityCheckScreen(sdk: _sdk),
      ),
    );
  }

  void _showSnackBar(String message) {
    ScaffoldMessenger.of(context).showSnackBar(
      SnackBar(content: Text(message)),
    );
  }

  @override
  void dispose() {
    _sdk.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('LarkFinServ SDK Example'),
        backgroundColor: Colors.blue,
        foregroundColor: Colors.white,
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.stretch,
          children: [
            // Status Card
            Card(
              child: Padding(
                padding: const EdgeInsets.all(16.0),
                child: Column(
                  crossAxisAlignment: CrossAxisAlignment.start,
                  children: [
                    Text(
                      'SDK Status',
                      style: Theme.of(context).textTheme.titleLarge,
                    ),
                    const SizedBox(height: 8),
                    Text(
                      _statusMessage,
                      style: TextStyle(
                        color: _isInitialized ? Colors.green : Colors.orange,
                        fontWeight: FontWeight.bold,
                      ),
                    ),
                    if (_isLoading)
                      const Padding(
                        padding: EdgeInsets.only(top: 8.0),
                        child: LinearProgressIndicator(),
                      ),
                    if (_errorMessage != null) ...[
                      const SizedBox(height: 8),
                      Text(
                        'Error: $_errorMessage',
                        style: const TextStyle(color: Colors.red),
                      ),
                    ],
                  ],
                ),
              ),
            ),

            const SizedBox(height: 16),

            // Action Buttons
            ElevatedButton.icon(
              onPressed: _isInitialized ? _openEligibilityCheck : null,
              icon: const Icon(Icons.open_in_browser),
              label: const Text('Open Eligibility Check (Popup)'),
            ),

            const SizedBox(height: 8),

            ElevatedButton.icon(
              onPressed: _isInitialized ? _showEligibilityWidget : null,
              icon: const Icon(Icons.web),
              label: const Text('Show Eligibility Widget (Inline)'),
            ),

            const SizedBox(height: 8),

            ElevatedButton.icon(
              onPressed: _initializeSDK,
              icon: const Icon(Icons.refresh),
              label: const Text('Reinitialize SDK'),
            ),

            const SizedBox(height: 16),

            // Eligibility Result
            if (_eligibilityResult != null) ...[
              Card(
                child: Padding(
                  padding: const EdgeInsets.all(16.0),
                  child: Column(
                    crossAxisAlignment: CrossAxisAlignment.start,
                    children: [
                      Text(
                        'Eligibility Result',
                        style: Theme.of(context).textTheme.titleLarge,
                      ),
                      const SizedBox(height: 8),
                      Text('Eligible: ${_eligibilityResult!.eligible}'),
                      if (_eligibilityResult!.amount != null)
                        Text('Amount: ₹${_eligibilityResult!.amount!.toStringAsFixed(2)}'),
                      if (_eligibilityResult!.interestRate != null)
                        Text('Interest Rate: ${_eligibilityResult!.interestRate!.toStringAsFixed(2)}%'),
                      if (_eligibilityResult!.reasons != null && _eligibilityResult!.reasons!.isNotEmpty)
                        Text('Reasons: ${_eligibilityResult!.reasons!.join(', ')}'),
                    ],
                  ),
                ),
              ),
            ],

            const Spacer(),

            // Configuration Info
            Card(
              color: Colors.grey[100],
              child: Padding(
                padding: const EdgeInsets.all(16.0),
                child: Column(
                  crossAxisAlignment: CrossAxisAlignment.start,
                  children: [
                    Text(
                      'Configuration',
                      style: Theme.of(context).textTheme.titleMedium,
                    ),
                    const SizedBox(height: 8),
                    Text('API Key: ${_apiKey.substring(0, 8)}...'),
                    Text('Environment: $_environment'),
                    Text('Phone: $_phoneNumber'),
                    const SizedBox(height: 8),
                    const Text(
                      'Note: Replace the API credentials with your actual values from LarkFinServ.',
                      style: TextStyle(fontSize: 12, fontStyle: FontStyle.italic),
                    ),
                  ],
                ),
              ),
            ),
          ],
        ),
      ),
    );
  }
}

class EligibilityCheckScreen extends StatefulWidget {
  final LarkFinServSDK sdk;

  const EligibilityCheckScreen({
    super.key,
    required this.sdk,
  });

  @override
  State<EligibilityCheckScreen> createState() => _EligibilityCheckScreenState();
}

class _EligibilityCheckScreenState extends State<EligibilityCheckScreen> {
  EligibilityResult? _result;
  String? _error;

  @override
  void initState() {
    super.initState();
    widget.sdk.events.listen((event) {
      setState(() {
        switch (event.type) {
          case SDKEventType.eligibilityResult:
            _result = event.data?['result'] as EligibilityResult?;
            break;
          case SDKEventType.error:
            final error = event.data?['error'] as SDKError?;
            _error = error?.message ?? 'Unknown error';
            break;
          case SDKEventType.close:
          case SDKEventType.closeFrame:
            Navigator.of(context).pop();
            break;
          case SDKEventType.ready:
            break;
          case SDKEventType.initiated:
            break;
        }
      });
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Eligibility Check'),
        backgroundColor: Colors.blue,
        foregroundColor: Colors.white,
      ),
      body: Column(
        children: [
          if (_error != null)
            Container(
              width: double.infinity,
              padding: const EdgeInsets.all(16),
              color: Colors.red[100],
              child: Text(
                'Error: $_error',
                style: const TextStyle(color: Colors.red),
              ),
            ),
          if (_result != null)
            Container(
              width: double.infinity,
              padding: const EdgeInsets.all(16),
              color: Colors.green[100],
              child: Column(
                crossAxisAlignment: CrossAxisAlignment.start,
                children: [
                  Text(
                    'Eligibility Result',
                    style: Theme.of(context).textTheme.titleLarge,
                  ),
                  const SizedBox(height: 8),
                  Text('Eligible: ${_result!.eligible}'),
                  if (_result!.amount != null)
                    Text('Amount: ₹${_result!.amount!.toStringAsFixed(2)}'),
                  if (_result!.interestRate != null)
                    Text('Interest Rate: ${_result!.interestRate!.toStringAsFixed(2)}%'),
                ],
              ),
            ),
          Expanded(
            child: EligibilityCheckWidget(
              sdk: widget.sdk,
              onEvent: (event) {
                // Handle events if needed
              },
            ),
          ),
        ],
      ),
    );
  }
}
0
likes
130
points
14
downloads

Documentation

API reference

Publisher

unverified uploader

Weekly Downloads

A Flutter SDK for integrating Lark FinServ's loan eligibility check functionality into your Flutter applications.

Homepage
Repository (GitHub)
View/report issues

License

MIT (license)

Dependencies

flutter, flutter_inappwebview, http, permission_handler, shared_preferences

More

Packages that depend on uat_larkfinserv_multi