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

Pipwave eKYC SDK provides a predesigned graphical user interface (GUI) for user to undergo the electronic know your customer (eKYC) process.

example/lib/main.dart

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

void main() {
  WidgetsFlutterBinding.ensureInitialized();

  runApp(
    const MaterialApp(
      home: _MainApp(),
    ),
  );
}

class _MainApp extends StatefulWidget {
  const _MainApp();

  @override
  State<_MainApp> createState() => _MainAppState();
}

class _MainAppState extends State<_MainApp> {
  final _accessTokenTextEditingController = TextEditingController();
  final _logs = <String>[];

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

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(),
      body: Padding(
        padding: const EdgeInsets.all(24),
        child: Column(
          mainAxisSize: MainAxisSize.min,
          crossAxisAlignment: CrossAxisAlignment.stretch,
          children: [
            Text(
              'Welcome to the pipwave demo.',
              style: Theme.of(context)
                  .textTheme
                  .headlineMedium
                  ?.copyWith(fontWeight: FontWeight.w600),
              textAlign: TextAlign.center,
            ),
            const SizedBox(height: 16),
            Text(
              'Please enter your ekyc access token below to continue.',
              style: Theme.of(context)
                  .textTheme
                  .titleMedium
                  ?.copyWith(fontWeight: FontWeight.w600),
              textAlign: TextAlign.center,
            ),
            const SizedBox(height: 16),
            TextField(
              autofocus: true,
              controller: _accessTokenTextEditingController,
              decoration: const InputDecoration(
                labelText: 'Access token',
                hintText: 'Enter your access token',
                border: OutlineInputBorder(),
              ),
              onChanged: (_) => setState(() {}),
            ),
            const SizedBox(height: 32),
            ElevatedButton(
              onPressed:
                  _isButtonEnabled ? () => _launchEkycSdk(context) : null,
              child: const Text('Continue'),
            ),
            if (_logs.isNotEmpty) ...[
              const SizedBox(height: 32),
              Text(
                'Logs',
                style: Theme.of(context)
                    .textTheme
                    .headlineSmall
                    ?.copyWith(fontWeight: FontWeight.w600),
              ),
              const SizedBox(height: 16),
              Expanded(
                child: ListView.separated(
                  itemBuilder: (context, index) {
                    return Text(_logs[index]);
                  },
                  separatorBuilder: (_, __) => const Divider(),
                  itemCount: _logs.length,
                ),
              ),
            ],
          ],
        ),
      ),
    );
  }

  String get _accessTokenText => _accessTokenTextEditingController.text.trim();

  bool get _isButtonEnabled => _accessTokenText.isNotEmpty;

  Future<void> _launchEkycSdk(BuildContext contex) async {
    final accessToken = _accessTokenText.replaceAll('\n', '');

    await FlutterPipwaveEkyc.instance.launch(
      context,
      accessToken: accessToken,
      onSuccess: () => _addLog('eKYC success'),
      onError: (error) => _addLog(error.toString()),
    );
  }

  void _addLog(String log) {
    if (!mounted) {
      return;
    }

    // ignore: parameter_assignments
    log = '${DateTime.now()}: $log';
    setState(() => _logs.add(log));
  }
}