Visita pub.dev para obtener más información sobre nuestro plugin de Flutter:

pub version

Una vez que haya configurado su proyecto correctamente, haya requerido los permisos necesarios, entonces solo tendrá que importar el paquete con:

import 'package:ironchip_lbfraud_plugin/ironchip_lbfraud.dart';

Para enviar una transacción, primero debe inicializar el SDK proporcionando una clave API válida.

    // Reemplace APIKEY con la clave API generada.
    // De forma predeterminada, nuestro plugin apunta al entorno de producción.
    // En caso de que desee apuntar a un entorno diferente:
    // LBFraudSDK fraud = new LbfraudFlutterPlugin.initFraudSDK("APIKEY", env: Environment.testing);
    await _lbfraudPlugin.initFraudSDK(apiKey);

Una vez que se ha inicializado el servicio, ahora puede realizar transacciones:

    try {
      // TransactionID (obligatorio, único): solicitud de identificador de transacción para resultados de fraude
      // UserID (obligatorio): identificador de usuario
      // extraData (opcional): información extra para análisis
      // Puedes omitir la espera en caso de que el resultado de la acción no sea necesario.
      var result =
          await _lbfraudPlugin.sendTransaction(transactionID, userID, {});

      _showResult = result!;
      _resultError = false;
    } catch (e) {
      _showResult = e.toString();
      _resultError = true;
    }

Aunque sendTransaction es asíncrono, no es necesario realizar un ‘await’ a menos que desee verificar el resultado real de la acción. Además, si deseas utilizar un proxy específico al realizar una transacción, puedes configurarlo usando:

   try {
      var result =
          await _lbfraudPlugin.setProxy(host, port);
    } catch (e) {
    }

Example

import 'package:flutter/material.dart';
import 'dart:async';
import 'dart:math';
import 'dart:convert';
import 'package:flutter/services.dart';
import 'package:ironchip_lbfraud/ironchip_lbfraud.dart';

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

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

  @override
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  final _lbfraudPlugin = IronchipLbfraud();
  String apiKey = "APIKEY"; // Reemplaza APIKEY con la clave API generada deseada.
  bool _isLbfraudInitialized = false;

  String userID = "john.doe@gmail.com"; // Identificador de usuario
  String _showResult = "";
  bool _resultError = false;

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

  // Los métodos de LBFraud son asíncronos, así que inicializamos en un método asíncrono.
  Future<void> initLBFraudState() async {
    try {
      await _lbfraudPlugin.initFraudSDK(apiKey);
      _isLbfraudInitialized = true;
    } catch (e) {
      _isLbfraudInitialized = false;
    }

    setState(() {
      _isLbfraudInitialized = _isLbfraudInitialized;
    });
  }

  // Función para generar un ID de transacción aleatorio
  String generateRandomTransactionID(int length) {
    const _chars =
        'AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz1234567890';
    Random _rnd = Random();

    return String.fromCharCodes(Iterable.generate(
        length, (_) => _chars.codeUnitAt(_rnd.nextInt(_chars.length))));
  }

  // Función para realizar hashing usando SHA-256
  Future<String> sha256Hash(String text) async {
    var bytes = utf8.encode(text);
    var digest = await compute(_hash, bytes);
    return base64UrlEncode(digest);
  }

// si quieres se puede usar la libreria crypto para hashear el id de usuario sino implementa un metodo
// pubspec.yml
//(dependencies:
//  flutter:
//    sdk: flutter
//  crypto: ^3.0.1 # Asegurate de tener la ultima version
//  )
  static List<int> _hash(List<int> bytes) {
  // Se utiliza SHA-256 para hashear los bytes
  var digest = sha256.convert(bytes);
  return digest.bytes; // Devuelve el resultado del hash como una lista de bytes
}

  // Función para recortar, convertir a minúsculas y hashear el userID
  Future<String> anonymizeUserID(String userID) async {
    String trimmedLowercaseUserID = userID.trim().toLowerCase();
    return await sha256Hash(trimmedLowercaseUserID);
  }

  // Función simulada para realizar el inicio de sesión
  Future<bool> performLogin(String username, String password) async {
    // Simular un retraso para la autenticación
    await Future.delayed(Duration(seconds: 2));
    // Simular un inicio de sesión exitoso (reemplaza esto con tu lógica real de autenticación)
    return username == 'testuser' && password == 'testpassword'; // Cambia según sea necesario
  }

  Future<void> sendTransaction() async {
    try {
      // Simular la entrada del usuario para el inicio de sesión
      const username = 'testuser'; // Reemplaza con el nombre de usuario real
      const password = 'testpassword'; // Reemplaza con la contraseña real

      bool loginSuccessful = await performLogin(username, password);

      if (loginSuccessful) {
        // Si el inicio de sesión es exitoso, anonimiza el userID antes de enviar la transacción
        String anonymizedUserID = await anonymizeUserID(userID);

        // ID de transacción (requerido, único): identificador de transacción solicitado para resultados de fraude
        var result = await _lbfraudPlugin.sendTransaction(
          generateRandomTransactionID(10),
          anonymizedUserID,
          {},
        );

        _showResult = result!;
        _resultError = false;
      } else {
        _showResult = 'Fallo en el inicio de sesión.';
        _resultError = true;
      }
    } catch (e) {
      _showResult = e.toString();
      _resultError = true;
    }

    setState(() {
      _resultError = _resultError;
      _showResult = _showResult;
    });
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Ejemplo de aplicación Ironchip LBFraud'),
          backgroundColor: Color(0xFF005255),
        ),
        body: Container(
          margin: EdgeInsets.all(40.0),
          child: Center(
            child: Column(
              mainAxisAlignment: MainAxisAlignment.center,
              children: <Widget>[
                TextField(
                  onChanged: (value) {
                    apiKey = value;
                  },
                  decoration: const InputDecoration(labelText: "Clave API"),
                ),
                SizedBox(height: 20),
                Text(
                  _isLbfraudInitialized
                      ? "LBFraud inicializado"
                      : "LBFraud no está inicializado",
                  style: TextStyle(
                    color: _isLbfraudInitialized
                        ? Color(0xFF495c11f)
                        : Color(0xFFF44336),
                  ),
                ),
                SizedBox(height: 20),
                ElevatedButton(
                  onPressed: initLBFraudState,
                  style: ElevatedButton.styleFrom(
                    primary: Color(0xFF495c11f), // Establecer el color del botón a #4eed56
                  ),
                  child: Text('Inicializar LBFraud'),
                ),
                TextField(
                  onChanged: (value) {
                    userID = value;
                  },
                  decoration: const InputDecoration(labelText: "ID de Usuario"),
                ),
                SizedBox(height: 20),
                ElevatedButton(
                  onPressed: _isLbfraudInitialized ? sendTransaction : null,
                  style: ElevatedButton.styleFrom(
                    primary: Color(0xFF495c11f), // Establecer el color del botón a #4eed56
                  ),
                  child: Text('Enviar Transacción'),
                ),
                SizedBox(height: 20),
                Text(
                  _showResult,
                  style: TextStyle(
                    color: _resultError ? Color(0xFFF44336) : Colors.black,
                  ),
                ),
              ],
            ),
          ),
        ),
      ),
    );
  }
}