mirror of
https://github.com/Mercantec-GHC/h4-projekt-gruppe-0-sm.git
synced 2025-04-27 16:24:07 +02:00
integrate app with backend for auth, users, and products
This commit is contained in:
parent
7da92bb9a8
commit
70b8244e62
@ -38,18 +38,16 @@ class SessionController extends ChangeNotifier {
|
||||
}
|
||||
}
|
||||
|
||||
get sessionToken {
|
||||
String? get sessionToken {
|
||||
return _sessionToken;
|
||||
}
|
||||
|
||||
Future<void> logout() async {
|
||||
final token = _sessionToken;
|
||||
if (token != null) {
|
||||
server.logout(token);
|
||||
await server.logout(token);
|
||||
_sessionToken = null;
|
||||
}
|
||||
print(_sessionToken);
|
||||
print("notifying listeners");
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
|
@ -1,7 +1,6 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:google_fonts/google_fonts.dart';
|
||||
import 'package:mobile/controllers/session.dart';
|
||||
import 'package:mobile/models/user.dart';
|
||||
import 'package:mobile/pages/dashboard.dart';
|
||||
import 'package:mobile/pages/log_in_page.dart';
|
||||
import 'package:mobile/controllers/add_to_cart_state.dart';
|
||||
@ -11,7 +10,7 @@ import 'package:mobile/controllers/paying_state.dart';
|
||||
import 'package:mobile/controllers/product.dart';
|
||||
import 'package:mobile/controllers/receipt.dart';
|
||||
import 'package:mobile/controllers/user.dart';
|
||||
import 'package:mobile/server/mock_server.dart';
|
||||
import 'package:mobile/server/backend_server.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
import 'package:mobile/controllers/routing.dart';
|
||||
|
||||
@ -24,7 +23,7 @@ class MyApp extends StatelessWidget {
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final server = MockServer();
|
||||
final server = BackendServer();
|
||||
return MultiProvider(
|
||||
providers: [
|
||||
ChangeNotifierProvider(create: (_) => RoutingController()),
|
||||
@ -51,7 +50,9 @@ class MyApp extends StatelessWidget {
|
||||
),
|
||||
home: Consumer<SessionController>(
|
||||
builder: (_, sessionController, __) {
|
||||
if (sessionController.sessionToken is String) return Dashboard();
|
||||
if (sessionController.sessionToken is String) {
|
||||
return Dashboard();
|
||||
}
|
||||
return const LogInPage();
|
||||
},
|
||||
)),
|
||||
|
@ -21,7 +21,7 @@ class Product {
|
||||
: id = json["id"],
|
||||
name = json["name"],
|
||||
description = json["description"],
|
||||
priceInDkkCents = json["priceInDkkCents"],
|
||||
priceInDkkCents = json["price_dkk_cent"],
|
||||
location = null,
|
||||
barcode = null;
|
||||
barcode = json["barcode"];
|
||||
}
|
||||
|
@ -16,10 +16,10 @@ class User {
|
||||
});
|
||||
|
||||
User.fromJson(Map<String, dynamic> json)
|
||||
: id = json["id"],
|
||||
email = json["email"],
|
||||
: email = json["email"],
|
||||
id = json["id"],
|
||||
name = json["name"],
|
||||
balanceInDkkCents = json["balanceInDkkCents"];
|
||||
balanceInDkkCents = json["balance_dkk_cent"];
|
||||
|
||||
void addBalanceFounds(int amount) {
|
||||
balanceInDkkCents += amount;
|
||||
|
@ -27,6 +27,7 @@ class RegisterForm extends StatefulWidget {
|
||||
|
||||
class RegisterFormState extends State<RegisterForm> {
|
||||
bool registerError = false;
|
||||
String errorText = "Ingen fejlbesked jeg skal ikke vises";
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
@ -43,7 +44,7 @@ class RegisterFormState extends State<RegisterForm> {
|
||||
),
|
||||
ErrorBox(
|
||||
visible: registerError,
|
||||
errorText: "Bruger med mailen ${mailController.text}",
|
||||
errorText: errorText,
|
||||
onClosePressed: () {
|
||||
setState(() {
|
||||
registerError = false;
|
||||
@ -70,14 +71,18 @@ class RegisterFormState extends State<RegisterForm> {
|
||||
placeholderText: "*********",
|
||||
obscure: true),
|
||||
PrimaryButton(
|
||||
onPressed: () {
|
||||
onPressed: () async {
|
||||
final sessionsRepo = context.read<UsersController>();
|
||||
if (sessionsRepo.register(nameController.text,
|
||||
mailController.text, passwordController.text) is Ok) {
|
||||
final res = await sessionsRepo.register(nameController.text,
|
||||
mailController.text, passwordController.text);
|
||||
if (res is Ok<Null, String>) {
|
||||
setState(() => registerError = false);
|
||||
Navigator.of(context).pop();
|
||||
if (context.mounted) Navigator.of(context).pop();
|
||||
} else {
|
||||
setState(() => registerError = true);
|
||||
setState(() {
|
||||
registerError = true;
|
||||
errorText = (res as Err<Null, String>).value;
|
||||
});
|
||||
}
|
||||
},
|
||||
child: const Text("Opret bruger")),
|
||||
|
@ -29,10 +29,10 @@ class SettingsPage extends StatelessWidget {
|
||||
_Page(
|
||||
icon: Icons.door_back_door,
|
||||
title: "Log ud",
|
||||
action: (context) {
|
||||
action: (context) async {
|
||||
final sessionsController = context.read<SessionController>();
|
||||
Navigator.popUntil(context, (_) => false);
|
||||
sessionsController.logout();
|
||||
Navigator.pop(context);
|
||||
await sessionsController.logout();
|
||||
}),
|
||||
];
|
||||
|
||||
|
@ -6,7 +6,8 @@ import 'package:mobile/models/user.dart';
|
||||
import 'package:mobile/server/server.dart';
|
||||
|
||||
class BackendServer implements Server {
|
||||
final _apiUrl = "10.135.51.114:8080/api";
|
||||
final _apiUrl = "http://192.168.1.128:8080/api";
|
||||
// final _apiUrl = "http://127.0.0.1:8080/api";
|
||||
|
||||
Future<http.Response> _post(
|
||||
{required String endpoint, required Map<String, dynamic> body}) async {
|
||||
@ -26,10 +27,12 @@ class BackendServer implements Server {
|
||||
)
|
||||
.then((res) => json.decode(res.body));
|
||||
if (res["ok"]) {
|
||||
return Error(message: res["message"]);
|
||||
} else {
|
||||
return Success(
|
||||
data: res.map(((product) => Product.fromJson(product))).toList());
|
||||
data: (res["products"] as List<dynamic>)
|
||||
.map(((product) => Product.fromJson(product)))
|
||||
.toList());
|
||||
} else {
|
||||
return Error(message: res["msg"]);
|
||||
}
|
||||
}
|
||||
|
||||
@ -47,7 +50,7 @@ class BackendServer implements Server {
|
||||
if (res["ok"]) {
|
||||
return Success(data: null);
|
||||
} else {
|
||||
return Error(message: res["message"]);
|
||||
return Error(message: res["msg"]);
|
||||
}
|
||||
}
|
||||
|
||||
@ -64,7 +67,7 @@ class BackendServer implements Server {
|
||||
if (res["ok"]) {
|
||||
return Success(data: res["token"]);
|
||||
} else {
|
||||
return Error(message: res["message"]);
|
||||
return Error(message: res["msg"]);
|
||||
}
|
||||
}
|
||||
|
||||
@ -80,21 +83,21 @@ class BackendServer implements Server {
|
||||
if (res["ok"]) {
|
||||
return Success(data: null);
|
||||
} else {
|
||||
return Error(message: res["message"]);
|
||||
return Error(message: res["msg"]);
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
Future<Response<User>> sessionUser(String token) async {
|
||||
final res = await http
|
||||
.get(
|
||||
Uri.parse("$_apiUrl/sessions/user/$token"),
|
||||
)
|
||||
.then((res) => json.decode(res.body));
|
||||
("sending request fr with token $token");
|
||||
final res = await http.get(
|
||||
Uri.parse("$_apiUrl/sessions/user"),
|
||||
headers: {"Session-Token": token},
|
||||
).then((res) => json.decode(res.body));
|
||||
if (res["ok"]) {
|
||||
return Error(message: res["message"]);
|
||||
return Success(data: User.fromJson(res["user"]));
|
||||
} else {
|
||||
return Success(data: User.fromJson(res));
|
||||
return Error(message: res["msg"]);
|
||||
}
|
||||
}
|
||||
|
||||
@ -110,7 +113,7 @@ class BackendServer implements Server {
|
||||
if (res["ok"]) {
|
||||
return Success(data: null);
|
||||
} else {
|
||||
return Error(message: res["message"]);
|
||||
return Error(message: res["msg"]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -24,7 +24,7 @@ class ErrorBox extends StatelessWidget {
|
||||
),
|
||||
child: Row(
|
||||
children: [
|
||||
const Text("Ugyldigt mail eller password"),
|
||||
Text(errorText),
|
||||
IconButton(onPressed: onClosePressed, icon: const Icon(Icons.close))
|
||||
],
|
||||
),
|
||||
|
Loading…
x
Reference in New Issue
Block a user