import 'dart:async';
import 'package:flutter/material.dart';
import 'package:ghalam_jadoee/component/api_service.dart';
import 'package:ghalam_jadoee/component/body2.dart';
import 'package:ghalam_jadoee/pages/bottomnav.dart';
import 'package:ghalam_jadoee/pages/sign.dart';
import 'package:ghalam_jadoee/pages/moarf.dart';
import 'package:shared_preferences/shared_preferences.dart';
String SendPhone2 = "";
String OTP2 = "";
String userStatus = "";
bool BtnEnable = true;
void main() {
runApp(Login2());
}
class Login2 extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: ' ',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: OtpRequestScreen(
name: '',
phone: '',
),
);
}
}
class OtpRequestScreen extends StatefulWidget {
final String name;
final String phone;
OtpRequestScreen({required this.name, required this.phone});
@override
_OtpRequestScreenState createState() => _OtpRequestScreenState();
}
class _OtpRequestScreenState extends State<OtpRequestScreen> {
final List<FocusNode> _focusNodes = List.generate(4, (_) => FocusNode());
final List<TextEditingController> _controllers =
List.generate(4, (_) => TextEditingController());
Timer? _timer;
int _start = 300;
bool _isResendDisabled = true;
@override
void initState() {
super.initState();
_startTimer();
setState(() {
SendPhone2 = SendPhone;
OTP2 = OTP1;
userStatus = userStatus2;
});
}
@override
void dispose() {
_timer?.cancel();
super.dispose();
}
Future<void> saveLogin(String nameUser) async {
final prefs = await SharedPreferences.getInstance();
await prefs.setString("userkey", nameUser);
await prefs.setBool("loggedIn", true);
}
void _startTimer() {
const oneSec = Duration(seconds: 1);
_timer?.cancel();
_timer = Timer.periodic(oneSec, (Timer timer) {
if (_start == 0) {
setState(() {
timer.cancel();
BtnEnable = false;
_isResendDisabled = false;
});
} else {
setState(() {
_start--;
});
}
});
}
Future<void> _resetTimer() async {
String state = 's2';
var jsonResponse = await ApiService.login(SendPhone2, state);
if (jsonResponse != null) {
var userStatus = jsonResponse['USER STATUS'];
var otp = jsonResponse['otp'];
var rs = jsonResponse['rs'];
OTP2 = otp;
print("otp");
print(otp);
}
setState(() {
_start = 300;
BtnEnable = false;
_isResendDisabled = true;
_startTimer();
});
}
@override
Widget build(BuildContext context) {
return WillPopScope(
child: Scaffold(
body: Stack(
alignment: Alignment.center,
children: [
const Body2(),
Center(
child: Padding(
padding: EdgeInsets.only(
top: MediaQuery.of(context).size.height * 0.2),
child: Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
const Text(
'پیامک تایید شماره تلفن',
style: TextStyle(
fontSize: 25,
),
),
SizedBox(height: 20),
Row(
mainAxisAlignment: MainAxisAlignment.end,
children: [
Text(
SendPhone2,
style: const TextStyle(
fontWeight: FontWeight.bold,
),
),
const Text(
' :کد ارسال شده به ',
style: TextStyle(
fontWeight: FontWeight.bold,
),
),
],
),
const SizedBox(height: 20),
Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: List.generate(4, (index) {
return OtpInput(
focusNode: _focusNodes[index],
nextFocusNode:
index < 3 ? _focusNodes[index + 1] : null,
previousFocusNode:
index > 0 ? _focusNodes[index - 1] : null,
controller: _controllers[index],
);
}),
),
SizedBox(height: 20),
Align(
alignment: Alignment.centerRight,
child: TextButton(
onPressed: _isResendDisabled ? null : _resetTimer,
child: Text(
_isResendDisabled
? 'ارسال مجدد کد در $_start ثانیه'
: 'ارسال مجدد کد',
style: TextStyle(
color: _isResendDisabled
? const Color.fromRGBO(158, 158, 158, 1)
: Colors.black,
),
),
),
),
SizedBox(height: 20),
ElevatedButton(
onPressed: BtnEnable
? () async {
String enteredOtp = _controllers
.map((controller) => controller.text)
.join('');
print(OTP2);
print(enteredOtp);
print("SOTP");
//print(Sotp);
if (enteredOtp == OTP2) {
if (userStatus == '0') {
Navigator.pushReplacement(
context,
MaterialPageRoute(
builder: (context) => Moarf()),
);
} else if (userStatus == '1') {
await saveLogin(SendPhone2);
Navigator.pushReplacement(
context,
MaterialPageRoute(
builder: (context) => Bottomnav()),
);
}
} else {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Directionality(
textDirection: TextDirection.rtl,
child: Text('کد وارد شده صحیح نیست'),
),
),
);
}
}
: null,
style: ElevatedButton.styleFrom(
backgroundColor: Color.fromRGBO(112, 27, 248, 100),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(100),
),
padding:
EdgeInsets.symmetric(horizontal: 30, vertical: 12),
),
child: const Text(
'تایید',
style: TextStyle(
color: Colors.black,
),
),
),
],
),
),
),
],
),
),
onWillPop: () async {
return false;
},
);
}
}
class OtpInput extends StatelessWidget {
final FocusNode focusNode;
final FocusNode? nextFocusNode;
final FocusNode? previousFocusNode;
final TextEditingController controller;
const OtpInput({
required this.focusNode,
this.nextFocusNode,
this.previousFocusNode,
required this.controller,
});
@override
Widget build(BuildContext context) {
return Container(
width: 50,
height: 50,
decoration: BoxDecoration(
color: Color.fromARGB(159, 226, 221, 221),
borderRadius: BorderRadius.circular(10),
),
child: TextField(
focusNode: focusNode,
controller: controller,
textAlign: TextAlign.center,
style: const TextStyle(
fontSize: 24,
),
keyboardType: TextInputType.number,
maxLength: 1,
decoration: const InputDecoration(
counterText: '',
border: InputBorder.none,
),
onChanged: (value) {
if (value.isNotEmpty && nextFocusNode != null) {
FocusScope.of(context).requestFocus(nextFocusNode);
} else if (value.isEmpty && previousFocusNode != null) {
FocusScope.of(context).requestFocus(previousFocusNode);
} else {
focusNode.unfocus();
}
},
),
);
}
}