rauth_flutter 2.0.41 copy "rauth_flutter: ^2.0.41" to clipboard
rauth_flutter: ^2.0.41 copied to clipboard

RAuth v2 Flutter SDK - Cross-platform reverse authentication library for WhatsApp, Reverse SMS, OneID, and Passkey. Supports Android, iOS, and Web with dual SIM support, device info auto-detection, HM [...]

example/lib/main.dart

import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:rauth_flutter/rauth_flutter.dart';

void main() {
  // Initialize RAuth
  Rauth.init(RauthConfig(
    appId: 'your-app-id',
    appSecret: 'your-app-secret',
    debug: true,
  ));

  runApp(const MyApp());
}

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

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'RAuth Flutter Example',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const LoginPage(),
    );
  }
}

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

  @override
  State<LoginPage> createState() => _LoginPageState();
}

class _LoginPageState extends State<LoginPage> {
  final _phoneController = TextEditingController();
  bool _isLoading = false;
  String? _sessionToken;
  String? _qrCodeBase64;
  String? _status;

  Future<void> _startSession() async {
    setState(() {
      _isLoading = true;
      _status = 'Initializing session...';
    });

    try {
      // Start session
      final response = await Rauth.instance.startSession(
        phone: _phoneController.text,
        loginMethod: LoginMethod.whatsapp,
      );

      setState(() {
        _sessionToken = response.sessionToken;
        _qrCodeBase64 = response.regularWa?.qrbase64;
        _status = 'Session created. Scan QR code or click WhatsApp link.';
      });

      // Await verification
      _awaitVerification();
    } catch (e) {
      setState(() {
        _status = 'Error: $e';
        _isLoading = false;
      });
    }
  }

  Future<void> _awaitVerification() async {
    try {
      final status = await Rauth.instance.awaitVerification(
        sessionToken: _sessionToken!,
        phone: _phoneController.text,
      );

      setState(() {
        _status = 'Verified via ${status.verifiedVia}!';
        _isLoading = false;
      });

      // Send to backend
      _sendToBackend(status);
    } on TimeoutError {
      setState(() {
        _status = 'Verification timeout';
        _isLoading = false;
      });
    } on SessionRevokedError {
      setState(() {
        _status = 'Session revoked';
        _isLoading = false;
      });
    } catch (e) {
      setState(() {
        _status = 'Error: $e';
        _isLoading = false;
      });
    }
  }

  Future<void> _sendToBackend(SessionStatusResponse status) async {
    // Send session token to your backend
    // final response = await http.post(
    //   Uri.parse('https://your-api.com/auth/login'),
    //   body: jsonEncode({
    //     'session_token': status.token,
    //     'phone': status.phone,
    //   }),
    // );
    // final jwt = jsonDecode(response.body)['token'];
    // Store JWT and navigate to home
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('RAuth Login'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            TextField(
              controller: _phoneController,
              decoration: const InputDecoration(
                labelText: 'Phone Number',
                hintText: '+1234567890',
              ),
              keyboardType: TextInputType.phone,
            ),
            const SizedBox(height: 20),
            ElevatedButton(
              onPressed: _isLoading ? null : _startSession,
              child: _isLoading
                  ? const CircularProgressIndicator()
                  : const Text('Start Login'),
            ),
            if (_qrCodeBase64 != null) ...[
              const SizedBox(height: 20),
              Image.memory(
                base64Decode(_qrCodeBase64!.split(',')[1]),
                width: 200,
                height: 200,
              ),
            ],
            if (_status != null) ...[
              const SizedBox(height: 20),
              Text(_status!),
            ],
          ],
        ),
      ),
    );
  }

  @override
  void dispose() {
    _phoneController.dispose();
    super.dispose();
  }
}
0
likes
70
points
136
downloads

Publisher

verified publisherrauth.io

Weekly Downloads

RAuth v2 Flutter SDK - Cross-platform reverse authentication library for WhatsApp, Reverse SMS, OneID, and Passkey. Supports Android, iOS, and Web with dual SIM support, device info auto-detection, HMAC signing, and approval system.

Repository (GitHub)

Documentation

API reference

License

MIT (license)

Dependencies

crypto, cryptography, device_info_plus, flutter, http, local_auth, permission_handler, shared_preferences, url_launcher, web

More

Packages that depend on rauth_flutter

Packages that implement rauth_flutter