otp_autofill 2.0.0 otp_autofill: ^2.0.0 copied to clipboard
Android implementation of OTP autofill with using User Consent API and Retriever API. Add possibility to receive OTP code from another input.
// Copyright (c) 2019-present, SurfStudio LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:otp_autofill/otp_autofill.dart';
import 'package:otp_autofill_example/sample_strategy.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatefulWidget {
const MyApp({Key? key}) : super(key: key);
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
final scaffoldKey = GlobalKey();
late OTPTextEditController controller;
late OTPInteractor _otpInteractor;
@override
void initState() {
super.initState();
_otpInteractor = OTPInteractor();
_otpInteractor
.getAppSignature()
//ignore: avoid_print
.then((value) => print('signature - $value'));
controller = OTPTextEditController(
codeLength: 5,
//ignore: avoid_print
onCodeReceive: (code) => print('Your Application receive code - $code'),
otpInteractor: _otpInteractor,
)..startListenUserConsent(
(code) {
final exp = RegExp(r'(\d{5})');
return exp.stringMatch(code ?? '') ?? '';
},
strategies: [
SampleStrategy(),
],
);
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
key: scaffoldKey,
appBar: AppBar(
title: const Text('Plugin example app'),
),
body: Center(
child: Padding(
padding: const EdgeInsets.all(40.0),
child: TextField(
textAlign: TextAlign.center,
keyboardType: TextInputType.number,
controller: controller,
),
),
),
),
);
}
@override
Future<void> dispose() async {
await controller.stopListen();
super.dispose();
}
}