import "package:flutter/material.dart"; import "package:openbills/models/user.dart"; import "package:openbills/widgets/input_box.dart"; import "package:openbills/widgets/snackbar.dart"; class SignupScreen extends StatelessWidget { const SignupScreen({super.key}); @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( centerTitle: true, title: const Image( height: 50, image: AssetImage("assets/images/logo.png"), ), ), body: const Center( child: SizedBox( width: 500, child: Body(), ) ), ); } } class Body extends StatefulWidget { const Body({super.key}); @override State createState() => _BodyState(); } class _BodyState extends State { final usernameController = TextEditingController(); final emailController = TextEditingController(); final passwordController = TextEditingController(); @override void dispose() { usernameController.dispose(); emailController.dispose(); passwordController.dispose(); super.dispose(); } @override Widget build(BuildContext context) { Size size = MediaQuery.sizeOf(context); MainAxisAlignment alignment = MainAxisAlignment.center; if (size.width < 700) { alignment = MainAxisAlignment.spaceBetween; } if (size.height < 700) { alignment = MainAxisAlignment.center; } return Column ( crossAxisAlignment: CrossAxisAlignment.center, mainAxisAlignment: alignment, children: [ const Padding( padding: EdgeInsets.symmetric(horizontal: 8, vertical: 16), child: Text( "OpenBills Sign Up", textAlign: TextAlign.center, style: TextStyle( fontWeight: FontWeight.bold, fontSize: 30, ), ), ), Column( children: [ FormInputBox( controller: usernameController, hintText: "Username", ), FormInputBox( controller: emailController, hintText: "E-mail", ), FormInputBox( controller: passwordController, hintText: "Password", obscureText: true, ), ], ), Padding( padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 16), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ TextButton( onPressed: () { Navigator.pop(context); }, child: const Text("Already have an account? Sign in.") ), ElevatedButton( onPressed: () async { User u = User( id: 0, username: usernameController.text, email: emailController.text, ); try { await userSignUp(u, passwordController.text); if (context.mounted) { MySnackBar.show(context, "Successfully created an account!"); Navigator.pop(context); } } on String catch (e) { if (context.mounted) { MySnackBar.show(context, "Error: $e"); } } }, child: const Text("Sign Up") ), ], ), ), ], ); } }