ZontreckWebsite/lib/pages/LoginAccount.dart
2024-05-17 17:40:04 -07:00

97 lines
3.5 KiB
Dart

import 'package:flutter/material.dart';
import 'package:libac_flutter/nbt/NbtIo.dart';
import 'package:libac_flutter/nbt/impl/CompoundTag.dart';
import 'package:libac_flutter/utils/Hashing.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:zontreck/Constants.dart';
import 'package:zontreck/Packets.dart';
import 'package:zontreck/Settings.dart';
class LoginAccountPage extends StatefulWidget {
const LoginAccountPage({super.key});
@override
State<StatefulWidget> createState() => LoginAccountState();
}
class LoginAccountState extends State<LoginAccountPage> {
TextEditingController first = TextEditingController();
TextEditingController last = TextEditingController();
TextEditingController pass = TextEditingController();
Settings settings = Settings();
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text("OpenSim - Login"),
backgroundColor: Constants.TITLEBAR_COLOR,
),
body: Padding(
padding: const EdgeInsets.all(8),
child: SingleChildScrollView(
child: Column(
children: [
ListTile(
title: const Text("First Name"),
subtitle: TextField(
controller: first,
decoration: const InputDecoration(hintText: "Jane"),
),
),
ListTile(
title: const Text("Last Name"),
subtitle: TextField(
controller: last,
decoration: const InputDecoration(hintText: "Smith"),
),
),
ListTile(
title: const Text("Password"),
subtitle: TextField(
controller: pass,
obscureText: true,
obscuringCharacter: "*",
decoration: const InputDecoration(hintText: "*******"),
),
),
ElevatedButton(
onPressed: () async {
C2SLoginPacket packet = C2SLoginPacket(
first: first.text,
last: last.text,
password: Hashing.md5Hash(pass.text));
var response = await settings.sendPacketToEndpoint(
APIEndpoint.Login, packet) as S2CLoginResponsePacket;
print("RESPONSE : ${response.encode()}");
if (response.loggedIn) {
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(content: Text("Login success")));
settings.loggedIn = true;
settings.currentUser = response.user;
CompoundTag setting = Settings.save();
// Save to cookie
var value = await NbtIo.writeBase64String(setting);
SharedPreferences prefs =
await SharedPreferences.getInstance();
prefs.setString("settings", value);
Navigator.pop(context);
} else {
ScaffoldMessenger.of(context).showSnackBar(SnackBar(
content: Text(
"Error while logging in: ${response.reason}")));
}
},
child: const Text("Login"))
],
),
),
),
);
}
}