diff options
author | Vidhu Kant Sharma <vidhukant@vidhukant.com> | 2023-09-11 01:00:14 +0530 |
---|---|---|
committer | Vidhu Kant Sharma <vidhukant@vidhukant.com> | 2023-09-11 01:00:14 +0530 |
commit | 7651d5200767a339089dd4021bf77a86b6adcf80 (patch) | |
tree | 3fef13a7f0140b22716bfbc9a7c6e842782b853c /lib/screens/signup.dart |
first commitv0.0.1
Diffstat (limited to 'lib/screens/signup.dart')
-rw-r--r-- | lib/screens/signup.dart | 140 |
1 files changed, 140 insertions, 0 deletions
diff --git a/lib/screens/signup.dart b/lib/screens/signup.dart new file mode 100644 index 0000000..b155d8e --- /dev/null +++ b/lib/screens/signup.dart @@ -0,0 +1,140 @@ +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<Body> createState() => _BodyState(); +} + +class _BodyState extends State<Body> { + 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: <Widget> [ + 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: <Widget>[ + 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: <Widget> [ + 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") + ), + ], + ), + ), + ], + ); + } +}
\ No newline at end of file |