reclaim_sdk 2.0.0 copy "reclaim_sdk: ^2.0.0" to clipboard
reclaim_sdk: ^2.0.0 copied to clipboard

Reclaim SDK provides a way to let your users import data from other websites into your app in a secure, privacy preserving manner using zero knowledge proofs right in your Flutter Application.

example/lib/main.dart

import 'package:flutter/material.dart';
import 'package:reclaim_sdk/reclaim.dart';
import 'package:reclaim_sdk/utils/interfaces.dart';
import 'package:reclaim_sdk/utils/types.dart';
import 'package:url_launcher/url_launcher.dart';
import 'package:flutter_dotenv/flutter_dotenv.dart';

Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await dotenv.load(fileName: ".env");
  runApp(MaterialApp(home: ReclaimExample()));
}

class ReclaimExample extends StatefulWidget {
  @override
  _ReclaimExampleState createState() => _ReclaimExampleState();
}

class _ReclaimExampleState extends State<ReclaimExample> {
  String _status = '';
  String _proofData = '';

  // Reclaim SDK Methods:
  // 1. ReclaimProofRequest.init('appId', 'appSecret', 'providerId') - Initialize a new proof request
  // 2. reclaimProofRequest.addContext('contextId', 'contextMessage') - Add context to the proof request
  // 3. reclaimProofRequest.setRedirectUrl('redirectUrl') - Set the redirect URL
  // 4. reclaimProofRequest.setAppCallbackUrl('appCallbackUrl') - Set the app callback URL
  // 5. reclaimProofRequest.setParams({'paramId1': 'paramValue1', 'paramId2': 'paramValue2'}) - Set the parameters for the proof request
  // 6. reclaimProofRequest.toJsonString() - Convert the request to a JSON string
  // 7. ReclaimProofRequest.fromJsonString('jsonString') - Create a request from a JSON string
  // 8. reclaimProofRequest.getRequestUrl() - Generate the request URL
  // 9. reclaimProofRequest.getSessionStatus() - Get the session status
  // 10. reclaimProofRequest.startSession() - Start the verification session

  Future<void> startReclaimSession() async {
    try {
      print('Starting Reclaim session');
      final reclaimProofRequest = await _initializeProofRequest();
      final requestUrl = await _generateRequestUrl(reclaimProofRequest);
      await _launchUrl(requestUrl);
      await _startVerificationSession(reclaimProofRequest);
    } catch (error) {
      _handleError('Error starting Reclaim session', error);
    }
  }

  Future<ReclaimProofRequest> _initializeProofRequest() async {
    print('Initializing proof request');
    final appId = dotenv.env['APP_ID'];
    final appSecret = dotenv.env['APP_SECRET'];
    final providerId = dotenv.env['PROVIDER_ID'];

    if (appId == null || appSecret == null || providerId == null) {
      throw Exception('Environment variables are not set properly');
    }

    final reclaimProofRequest = await ReclaimProofRequest.init(appId, appSecret,
        providerId, ProofRequestOptions(log: true, acceptAiProviders: false));

    // reclaimProofRequest.addContext('0x00000000000', 'Example context message');
    // reclaimProofRequest.setRedirectUrl('https://dev.reclaimprotocol.org/');

    print('Proof JSON object: ${reclaimProofRequest.toJsonString()}');
    return reclaimProofRequest;
  }

  Future<String> _generateRequestUrl(ReclaimProofRequest request) async {
    final requestUrl = await request.getRequestUrl();
    print('Request URL: $requestUrl');
    return requestUrl;
  }

  Future<void> _launchUrl(String url) async {
    if (await canLaunchUrl(Uri.parse(url))) {
      final launched = await launchUrl(
        Uri.parse(url),
        mode: LaunchMode.externalApplication,
      );
      if (launched) {
        setState(() => _status = 'Session started. Waiting for proof...');
      } else {
        throw 'Could not launch $url';
      }
    } else {
      throw 'Could not launch $url';
    }
  }

  Future<void> _startVerificationSession(ReclaimProofRequest request) async {
    await request.startSession(
      onSuccess: _handleProofSuccess,
      onError: _handleProofError,
    );
  }

  void _handleProofSuccess(Proof proof) {
    print('Proof received: $proof');
    setState(() {
      _status = 'Proof received!';
      _proofData =
          'Extracted data: ${proof.claimData.context}\n\nFull proof: ${proof.toString()}';
    });
  }

  void _handleProofError(Exception error) {
    _handleError('Error in proof generation', error);
  }

  void _handleError(String message, dynamic error) {
    print('$message: $error');
    setState(() => _status = '$message: ${error.toString()}');
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text('Reclaim SDK Demo')),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          crossAxisAlignment: CrossAxisAlignment.stretch,
          children: [
            ElevatedButton(
              onPressed: startReclaimSession,
              child: const Text('Start Reclaim Session'),
            ),
            const SizedBox(height: 20),
            Text(_status, style: const TextStyle(fontWeight: FontWeight.bold)),
            const SizedBox(height: 20),
            if (_proofData.isNotEmpty)
              Expanded(
                child: SingleChildScrollView(
                  child: Text(_proofData),
                ),
              ),
          ],
        ),
      ),
    );
  }
}
3
likes
0
points
3
downloads

Publisher

verified publisherdev.reclaimprotocol.org

Weekly Downloads

Reclaim SDK provides a way to let your users import data from other websites into your app in a secure, privacy preserving manner using zero knowledge proofs right in your Flutter Application.

Homepage
Repository

License

unknown (license)

Dependencies

eth_sig_util, flutter, http, logger, uni_links, url_launcher, uuid, web3dart

More

Packages that depend on reclaim_sdk