otpless_headless_flutter 1.0.1 copy "otpless_headless_flutter: ^1.0.1" to clipboard
otpless_headless_flutter: ^1.0.1 copied to clipboard

Standalone SDK for Otpless Headless functionality.

example/lib/main.dart

import 'dart:convert';

import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'dart:async';

import 'package:otpless_headless_flutter/otpless_flutter.dart';

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

class MyApp extends StatefulWidget {
  const MyApp({Key? key}) : super(key: key);

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

class _MyAppState extends State<MyApp> {
  String _dataResponse = 'Unknown';
  final _otplessHeadlessPlugin = Otpless();
  var loaderVisibility = true;
  bool isSimStateListenerAttached = false;
  final TextEditingController phoneController =
      TextEditingController();
  final TextEditingController emailController = TextEditingController();
  final TextEditingController otpController = TextEditingController();
  String channel = "WHATSAPP";

  String phone = '';
  String email = '';
  String otp = '';

  String deliveryChannel = '';
  String otpLength = "";
  String expiry = "";

  String appId = "od6f3sjgcp93605da5om";

  @override
  void initState() {
    super.initState();
      _otplessHeadlessPlugin.initialize(appId, timeout: 23);
      _otplessHeadlessPlugin.setResponseCallback(onHeadlessResult);
  }

  Future<void> startHeadlessForPhoneAndEmail() async {

    Map<String, dynamic> arg = {};
    if (phone.isNotEmpty) {
      arg["phone"] = phone;
      arg["countryCode"] = "91";
    } else if (email.isNotEmpty) {
      arg["email"] = email;
    } else {
      arg["channelType"] = channel.toUpperCase();
    }

    // arg["tid"] = "";

    if (otp.isNotEmpty) {
      arg["otp"] = otp;
    }
    // adding delivery channel, otp length and expiry
    if (deliveryChannel.isNotEmpty) {
      arg["deliveryChannel"] = deliveryChannel;
    }
    if (otpLength.isNotEmpty) {
      arg["otpLength"] = otpLength;
    }
    if (expiry.isNotEmpty) {
      arg["expiry"] = expiry;
    }

    _otplessHeadlessPlugin.start(onHeadlessResult, arg);
  }

  void onHeadlessResult(dynamic result) {
    setState(() {
      _dataResponse = jsonEncode(result);
      _otplessHeadlessPlugin.commitResponse(result);
      String responseType = result["responseType"];
      if (responseType == "OTP_AUTO_READ") {
        String _otp = result["response"]["otp"];
        otpController.text = _otp;
        otp = _otp;
      }
    });
  }

  @override
  void dispose() {
    phoneController.dispose();
    emailController.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        body: SafeArea(
            child: SingleChildScrollView(
          child: Padding(
            padding: const EdgeInsets.all(16.0), // Adjusted margin
            child: Center(
              child: Column(
                crossAxisAlignment: CrossAxisAlignment
                    .stretch, // Makes the buttons fill the width
                children: [
                  TextField(
                    controller: phoneController,
                    keyboardType: TextInputType.phone,
                    onChanged: (value) {
                      setState(() {
                        phone = value;
                      });
                    },
                    decoration: const InputDecoration(
                      hintText: 'Enter Phone',
                    ),
                  ),
                  const SizedBox(height: 16),
                  TextField(
                    controller: emailController,
                    keyboardType: TextInputType.emailAddress,
                    onChanged: (value) {
                      setState(() {
                        email = value;
                      });
                    },
                    decoration: const InputDecoration(
                      hintText: 'Email ID',
                    ),
                  ),
                  const SizedBox(height: 16),
                  TextField(
                    controller: otpController,
                    keyboardType: TextInputType.emailAddress,
                    onChanged: (value) {
                      setState(() {
                        otp = value;
                      });
                    },
                    decoration: const InputDecoration(
                      hintText: 'Enter your OTP here',
                    ),
                  ),
                  const SizedBox(height: 16),
                  TextField(
                    onChanged: (value) {
                      setState(() {
                        channel = value;
                      });
                    },
                    decoration: const InputDecoration(
                      hintText: 'Enter channel for OAuth',
                    ),
                  ),
                  const SizedBox(height: 16),
                  Row(
                    children: [
                      Expanded(
                        child: TextField(
                          onChanged: (value) {
                            deliveryChannel = value;
                          },
                          decoration: const InputDecoration(hintText: "Delivery Channel"),
                        ),
                      ),
                      const SizedBox(width: 5),
                      Expanded(
                        child: TextField(
                          onChanged: (value) {
                            otpLength = value;
                          },
                          decoration: const InputDecoration(hintText: "OTP length"),
                          keyboardType: TextInputType.number,
                        ),
                      ),
                      const SizedBox(width: 5),
                      Expanded(
                        child: TextField(
                          onChanged: (value) {
                            expiry = value;
                          },
                          decoration: const InputDecoration(hintText: "Expiry"),
                          keyboardType: TextInputType.number,
                        ),
                      ),
                    ],
                  ),
                  const SizedBox(height: 16),
                  // adding delivery channel
                  CupertinoButton.filled(
                    onPressed: startHeadlessForPhoneAndEmail,
                    child: const Text("Start"),
                  ),
                  const SizedBox(height: 16),
                  // response view
                  Text(
                    _dataResponse,
                    textAlign: TextAlign.center,
                  ),
                ],
              ),
            ),
          ),
        )),
      ),
    );
  }
}
0
likes
140
points
129
downloads

Publisher

unverified uploader

Weekly Downloads

Standalone SDK for Otpless Headless functionality.

Repository (GitHub)

Documentation

API reference

License

MIT (license)

Dependencies

flutter, plugin_platform_interface

More

Packages that depend on otpless_headless_flutter