Files
fcs/lib/pages/signin/pinlogin_page.dart

153 lines
4.2 KiB
Dart
Raw Normal View History

2024-02-14 16:54:38 +06:30
import 'package:fcs/helpers/theme.dart';
2024-02-15 16:38:57 +06:30
import 'package:fcs/pages/main/util.dart';
2024-02-14 16:54:38 +06:30
import 'package:fcs/pages/widgets/local_button.dart';
import 'package:fcs/pages/widgets/local_text.dart';
import 'package:fcs/pages/widgets/progress.dart';
import 'package:flutter/material.dart';
import 'package:pin_input_text_field/pin_input_text_field.dart';
class PinLoginPage extends StatefulWidget {
2024-02-15 16:38:57 +06:30
//final User user;
2024-02-14 16:54:38 +06:30
const PinLoginPage({super.key});
@override
State<PinLoginPage> createState() => _PinLoginPageState();
}
class _PinLoginPageState extends State<PinLoginPage> {
bool _isLoading = false;
late String pin;
2024-02-15 16:38:57 +06:30
//late User _user;
2024-02-14 17:19:55 +06:30
TextEditingController _fcsIdCtl = new TextEditingController();
2024-02-14 16:54:38 +06:30
@override
void initState() {
2024-02-15 16:38:57 +06:30
//_user=widget.user;
//pin = _user.pinDigit ?? "";
2024-02-14 16:54:38 +06:30
super.initState();
2024-02-15 16:38:57 +06:30
if (mounted) {
setState(() {});
}
2024-02-14 16:54:38 +06:30
}
Widget build(BuildContext context) {
2024-02-14 17:19:55 +06:30
final fcsIdBox = TextFormField(
controller: _fcsIdCtl,
autofocus: true,
style: TextStyle(
fontSize: 15, color: Colors.black87, fontWeight: FontWeight.w500),
cursorColor: primaryColor,
keyboardType: TextInputType.text,
decoration: new InputDecoration(
contentPadding: EdgeInsets.all(0),
labelStyle: newLabelStyle(color: Colors.black54, fontSize: 17),
enabledBorder: UnderlineInputBorder(
borderSide: BorderSide(color: primaryColor, width: 1.0)),
focusedBorder: UnderlineInputBorder(
borderSide: BorderSide(color: primaryColor, width: 1.0)),
disabledBorder: UnderlineInputBorder(
borderSide: BorderSide(color: primaryColor, width: 1.0)),
),
);
final pinLoginLogo = Container(
width: 70,
height: 70,
child: FittedBox(
child: Image.asset(
"assets/logo.jpg",
),
fit: BoxFit.fitHeight,
),
);
final loginBtn = Padding(
padding: EdgeInsets.only(top: 30),
child: LocalButton(
textKey: "welcome.pinlogin",
2024-02-15 16:38:57 +06:30
callBack: _login,
2024-02-14 17:19:55 +06:30
),
);
2024-02-14 16:54:38 +06:30
return LocalProgress(
inAsyncCall: _isLoading,
child: new Scaffold(
2024-02-15 16:38:57 +06:30
// appBar: LocalAppBar(
// backgroundColor: primaryColor,
// ),
2024-02-14 17:19:55 +06:30
body: ListView(
2024-02-15 16:38:57 +06:30
padding: EdgeInsets.only(top: 80, left: 15, right: 15, bottom: 20),
2024-02-14 17:19:55 +06:30
children: [
pinLoginLogo,
Padding(
padding: EdgeInsets.only(top: 20, bottom: 20),
child: Center(
child: LocalText(context, "welcome.pinlogin",
color: Colors.black, fontSize: 18),
),
2024-02-14 16:54:38 +06:30
),
2024-02-14 17:19:55 +06:30
LocalText(
2024-02-14 16:54:38 +06:30
context,
2024-02-14 17:19:55 +06:30
"welcome.pinlogin.fcsid",
color: Colors.black54,
fontSize: 15,
),
fcsIdBox,
Padding(
padding: EdgeInsets.only(top: 25, bottom: 20),
child: LocalText(
context,
"welcome.pinlogin.pin",
color: Colors.black54,
fontSize: 15,
)),
PinInputTextField(
cursor: Cursor(
color: primaryColor, enabled: true, width: 2, height: 23),
pinLength: 6,
decoration: BoxLooseDecoration(
strokeColorBuilder: PinListenColorBuilder(
primaryColor, Colors.grey.shade400)),
textInputAction: TextInputAction.done,
autoFocus: false,
onChanged: _pinChange,
),
loginBtn,
],
)),
);
2024-02-14 16:54:38 +06:30
}
_pinChange(pin) {
setState(() {
this.pin = pin;
});
}
2024-02-15 16:38:57 +06:30
_login() async {
if (pin == "") {
showMsgDialog(context, "Error", "Invalid PIN");
return;
}
if (pin.length < 6) {
showMsgDialog(context, "Error", "PIN must be 6 digits");
return;
}
setState(() {
_isLoading = true;
});
try {
Navigator.pop(context, true);
} catch (e) {
showMsgDialog(context, "Error", e.toString());
} finally {
setState(() {
_isLoading = false;
});
}
}
2024-02-14 16:54:38 +06:30
}