import 'dart:async';
import 'dart:convert';
import 'dart:io';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:get/get.dart';
import 'package:login_ex01/model/user_result.dart';
import 'package:platform_device_id/platform_device_id.dart';
import 'package:mobile_number/mobile_number.dart';
import '../api/api_cipher.dart';
import '../service/login_service.dart';
import '../utils/utils.dart';
class LoginView extends StatefulWidget {
const LoginView({Key? key}) : super(key: key);
@override
State<LoginView> createState() => _LoginViewState();
}
class _LoginViewState extends State<LoginView> {
final _formKey = GlobalKey<FormState>(); // 이 코드는 학습해야 함.
final ILogin _login = LoginService();
final _userIDController = TextEditingController();
final _passwordController = TextEditingController();
late String _deviceId;
String _mobileNumber = '';
List<SimCard> _simCard = <SimCard>[];
late String _userID;
late String _password;
var userIDFocusNode;
var passwdFocusNode;
@override
void initState() {
super.initState();
getDeviceUniqueId();
MobileNumber.listenPhonePermission((isPermissionGranted) {
if (isPermissionGranted) {
initMobileNumberState();
} else {}
});
initMobileNumberState();
}
Future<void> getDeviceUniqueId() async {
String? deviceId;
try {
deviceId = await PlatformDeviceId.getDeviceId;
} on PlatformException {
deviceId = 'Failed to get deviceId.';
}
if (!mounted) return;
setState(() {
_deviceId = deviceId!;
print("deviceId -> $_deviceId");
});
}
Future<void> initMobileNumberState() async {
if (!await MobileNumber.hasPhonePermission) {
await MobileNumber.requestPhonePermission;
return;
}
String mobileNumber = '';
try {
mobileNumber = (await MobileNumber.mobileNumber)!;
_simCard = (await MobileNumber.getSimCards)!;
} on PlatformException catch (e) {
debugPrint("Failed to get mobile number because of '${e.message}'");
}
if (!mounted) return;
setState(() {
_mobileNumber = mobileNumber;
_mobileNumber = Utils.getPhoneNumber(_mobileNumber);
print("mobileNumber -> $_mobileNumber");
});
}
Widget fillCards() {
List<Widget> widgets = _simCard
.map((SimCard sim) => Text(
'Sim Card Number: (${sim.countryPhonePrefix}) - ${sim.number}\nCarrier Name: ${sim.carrierName}\nCountry Iso: ${sim.countryIso}\nDisplay Name: ${sim.displayName}\nSim Slot Index: ${sim.slotIndex}\n\n'))
.toList();
return Column(children: widgets);
}
onSubmit() async {
if (_userIDController.text.trim().isEmpty ||
_passwordController.text.trim().isEmpty) {
if (_userIDController.text.trim().isEmpty) {
Utils.showSnackBar(context, '아이디를 입력하세요');
userIDFocusNode.requestFocus();
return;
}
if (_passwordController.text.trim().isEmpty) {
Utils.showSnackBar(context, '비밀번호를 입력하세요');
passwdFocusNode.requestFocus();
return;
}
} else {
String keyword = CIpheR.AES_encrypt(CIpheR.URLkey());
String passwd = _passwordController.text.trim();
// passwd = CIpheR.rsaEncrypt(passwd);
UserResult result = await _login.login(
keyword,
CIpheR.AES_encrypt(_userIDController.text.trim()),
passwd,
_deviceId,
_mobileNumber);
if (result.status.contains("success")) {
Utils.showSnackBar(context, '로그인 성공');
} else {
Utils.showAlert(context, result.status, result.message);
}
}
}
@override
void dispose() {
userIDFocusNode.dispose();
passwdFocusNode.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Login Page'),
),
body: Center(
child: SingleChildScrollView(
child: Container(
padding: const EdgeInsets.all(16.0),
child: Form(
key: _formKey,
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
Container(
padding: const EdgeInsets.fromLTRB(10, 10, 10, 0),
child: TextFormField(
controller: _userIDController,
decoration: const InputDecoration(
border: OutlineInputBorder(),
labelText: 'UserID',
),
focusNode: userIDFocusNode,
textInputAction: TextInputAction.next,
),
),
SizedBox(
height: 30,
),
Container(
padding: const EdgeInsets.fromLTRB(10, 10, 10, 0),
child: TextFormField(
controller: _passwordController,
obscureText: true,
decoration: const InputDecoration(
border: OutlineInputBorder(),
labelText: '비밀번호',
),
focusNode: passwdFocusNode,
onEditingComplete: () async {},
),
),
SizedBox(
height: 30,
),
Container(
height: 50,
padding: const EdgeInsets.fromLTRB(50, 0, 50, 0),
child: ElevatedButton(
child: Text(
'Login',
style: TextStyle(fontSize: 20.0),
),
onPressed: onSubmit),
),
],
),
),
),
),
),
);
}
}