better login and register page

This commit is contained in:
Mikkel Troels Kongsted 2025-02-14 11:20:13 +01:00
parent 1bb12092cc
commit 1f357fbb00
7 changed files with 66 additions and 56 deletions

View File

@ -1,4 +1,5 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:mobile/pages/log_in_page.dart';
import 'package:mobile/repos/add_to_cart_state.dart'; import 'package:mobile/repos/add_to_cart_state.dart';
import 'package:mobile/repos/cart.dart'; import 'package:mobile/repos/cart.dart';
import 'package:mobile/repos/location_image.dart'; import 'package:mobile/repos/location_image.dart';
@ -7,7 +8,6 @@ import 'package:mobile/repos/product.dart';
import 'package:mobile/repos/receipt.dart'; import 'package:mobile/repos/receipt.dart';
import 'package:mobile/repos/user.dart'; import 'package:mobile/repos/user.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'pages/landing_page.dart';
import 'package:mobile/repos/bottom_navigation_bar.dart'; import 'package:mobile/repos/bottom_navigation_bar.dart';
void main() { void main() {
@ -43,7 +43,7 @@ class MyApp extends StatelessWidget {
), ),
useMaterial3: true, useMaterial3: true,
), ),
home: const LandingPage(), home: const LogInPage(),
), ),
); );
} }

View File

@ -1,6 +1,6 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:mobile/repos/product.dart'; import 'package:mobile/repos/product.dart';
import 'package:mobile/widgets/primary_card.dart'; import 'package:mobile/widgets/sized_card.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'product_page.dart'; import 'product_page.dart';
@ -18,7 +18,7 @@ class ProductListItem extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return PrimaryCard( return SizedCard(
child: InkWell( child: InkWell(
borderRadius: const BorderRadius.all(Radius.circular(10)), borderRadius: const BorderRadius.all(Radius.circular(10)),
onTap: () { onTap: () {

View File

@ -7,7 +7,7 @@ import 'package:mobile/repos/cart.dart';
import 'package:mobile/repos/product.dart'; import 'package:mobile/repos/product.dart';
import 'package:mobile/results.dart'; import 'package:mobile/results.dart';
import 'package:mobile/widgets/primary_button.dart'; import 'package:mobile/widgets/primary_button.dart';
import 'package:mobile/widgets/primary_card.dart'; import 'package:mobile/widgets/sized_card.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
class CartItemView extends StatelessWidget { class CartItemView extends StatelessWidget {
@ -29,7 +29,7 @@ class CartItemView extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return PrimaryCard( return SizedCard(
child: Row( child: Row(
children: [ children: [
Expanded( Expanded(

View File

@ -1,35 +0,0 @@
import 'package:flutter/material.dart';
import 'package:mobile/widgets/primary_button.dart';
import 'log_in_page.dart';
import 'register_page.dart';
class LandingPage extends StatelessWidget {
const LandingPage({super.key});
@override
Widget build(BuildContext context) {
return Scaffold(
body: Row(mainAxisAlignment: MainAxisAlignment.center, children: [
Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text("Fresh Plaza",
style: Theme.of(context).textTheme.headlineLarge),
PrimaryButton(
onPressed: () => {
Navigator.of(context).push(MaterialPageRoute(
builder: (context) => const LogInPage()))
},
child: const Text("Log ind")),
PrimaryButton(
onPressed: () => {
Navigator.of(context).push(MaterialPageRoute(
builder: (context) => const RegisterPage()))
},
child: const Text("Opret bruger"))
],
)
]),
);
}
}

View File

@ -1,4 +1,5 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:mobile/pages/register_page.dart';
import 'package:mobile/repos/user.dart'; import 'package:mobile/repos/user.dart';
import 'package:mobile/results.dart'; import 'package:mobile/results.dart';
import 'package:mobile/widgets/error_box.dart'; import 'package:mobile/widgets/error_box.dart';
@ -34,6 +35,7 @@ class LogInFormState extends State<LogInForm> {
final passwordController = TextEditingController(); final passwordController = TextEditingController();
return Column( return Column(
spacing: 10,
mainAxisAlignment: MainAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center,
children: [ children: [
Text( Text(
@ -48,7 +50,7 @@ class LogInFormState extends State<LogInForm> {
}, },
), ),
PrimaryInput( PrimaryInput(
label: "Mail/Tlf", label: "Mail",
placeholderText: "f.eks. example@example.com", placeholderText: "f.eks. example@example.com",
controller: mailController, controller: mailController,
), ),
@ -63,17 +65,40 @@ class LogInFormState extends State<LogInForm> {
final usersRepo = context.read<UsersRepo>(); final usersRepo = context.read<UsersRepo>();
final loginResult = final loginResult =
usersRepo.login(mailController.text, passwordController.text); usersRepo.login(mailController.text, passwordController.text);
if (loginResult is Ok) { if (loginResult is Ok) {
setState(() => loginError = false);
Navigator.of(context).push(MaterialPageRoute( Navigator.of(context).push(MaterialPageRoute(
builder: (context) => builder: (context) =>
Dashboard(user: (loginResult as Ok).value))); Dashboard(user: (loginResult as Ok).value)));
} else { } else {
setState(() { setState(() => loginError = true);
loginError = true;
});
} }
}, },
child: const Text("Log ind")) child: const Text("Log ind")),
TextButton(
onPressed: () {
Navigator.of(context).push(
MaterialPageRoute(builder: (context) => const RegisterPage()));
},
child: RichText(
text: const TextSpan(children: [
TextSpan(
text: 'Har du ikke en konto? Klik ',
style: TextStyle(color: Colors.black),
),
TextSpan(
text: 'her',
style: TextStyle(
color: Color.fromARGB(255, 0, 94, 255),
decoration: TextDecoration.underline),
),
TextSpan(
text: ' for at oprette en konto',
style: TextStyle(color: Colors.black),
),
])),
)
], ],
); );
} }

View File

@ -5,7 +5,6 @@ import 'package:mobile/widgets/error_box.dart';
import 'package:mobile/widgets/primary_button.dart'; import 'package:mobile/widgets/primary_button.dart';
import 'package:mobile/widgets/primary_input.dart'; import 'package:mobile/widgets/primary_input.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'log_in_page.dart';
class RegisterPage extends StatelessWidget { class RegisterPage extends StatelessWidget {
const RegisterPage({super.key}); const RegisterPage({super.key});
@ -35,6 +34,7 @@ class RegisterFormState extends State<RegisterForm> {
final mailController = TextEditingController(); final mailController = TextEditingController();
final passwordController = TextEditingController(); final passwordController = TextEditingController();
return Column( return Column(
spacing: 10,
mainAxisAlignment: MainAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center,
children: [ children: [
Text( Text(
@ -55,7 +55,7 @@ class RegisterFormState extends State<RegisterForm> {
controller: nameController, controller: nameController,
), ),
PrimaryInput( PrimaryInput(
label: "Mail/Tlf", label: "Mail",
placeholderText: "f.eks. example@example.com", placeholderText: "f.eks. example@example.com",
controller: mailController, controller: mailController,
), ),
@ -74,15 +74,35 @@ class RegisterFormState extends State<RegisterForm> {
final usersRepo = context.read<UsersRepo>(); final usersRepo = context.read<UsersRepo>();
if (usersRepo.addUser(nameController.text, mailController.text, if (usersRepo.addUser(nameController.text, mailController.text,
passwordController.text) is Ok) { passwordController.text) is Ok) {
Navigator.of(context).push( setState(() => registerError = false);
MaterialPageRoute(builder: (context) => const LogInPage())); Navigator.of(context).pop();
} else { } else {
setState(() { setState(() => registerError = true);
registerError = true;
});
} }
}, },
child: const Text("Opret bruger")) child: const Text("Opret bruger")),
TextButton(
onPressed: () {
Navigator.of(context).pop();
},
child: RichText(
text: const TextSpan(children: [
TextSpan(
text: 'Har du allerede en konto? Klik ',
style: TextStyle(color: Colors.black),
),
TextSpan(
text: 'her',
style: TextStyle(
color: Color.fromARGB(255, 0, 94, 255),
decoration: TextDecoration.underline),
),
TextSpan(
text: ' for at logge ind',
style: TextStyle(color: Colors.black),
),
])),
)
], ],
); );
} }

View File

@ -1,9 +1,9 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
class PrimaryCard extends StatelessWidget { class SizedCard extends StatelessWidget {
final Widget child; final Widget child;
const PrimaryCard({ const SizedCard({
super.key, super.key,
required this.child, required this.child,
}); });