ft/adds login_screen and initial home_screen
This commit is contained in:
parent
be41924b3b
commit
a14b87012a
@ -1,6 +1,10 @@
|
||||
import 'package:app/main.dart';
|
||||
import 'package:app/pb/rpc_create_account.pb.dart';
|
||||
import 'package:app/pb/rpc_get_account_info.pb.dart';
|
||||
import 'package:app/pb/rpc_login.pb.dart';
|
||||
import 'package:app/pb/service_df.pbgrpc.dart';
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:grpc/grpc.dart';
|
||||
|
||||
class Client {
|
||||
@ -30,4 +34,46 @@ class Client {
|
||||
}
|
||||
return CreateAccountResponse();
|
||||
}
|
||||
|
||||
// LoginResponse Login(BuildContext context, LoginRequest request ){
|
||||
// try {
|
||||
// final response = stub.login(request);
|
||||
// return response;
|
||||
// } catch (e) {
|
||||
// ScaffoldMessenger.of(context).showSnackBar(SnackBar(
|
||||
// content: Text('Login fehlgeschlagen: $e'),
|
||||
// ));
|
||||
// }
|
||||
// return LoginResponse();
|
||||
|
||||
// }
|
||||
|
||||
Future<LoginResponse> login(LoginRequest request, {Function? onError}) async {
|
||||
try {
|
||||
final response = await stub.login(request);
|
||||
return response;
|
||||
} on GrpcError catch (e) {
|
||||
print('caught error: ${e.message}');
|
||||
onError!();
|
||||
} catch (e) {
|
||||
print('caught error: $e');
|
||||
onError!();
|
||||
}
|
||||
return LoginResponse();
|
||||
}
|
||||
|
||||
Future<GetAccountInfoResponse> getAccountInfo(GetAccountInfoRequest request,
|
||||
{Function? onError}) async {
|
||||
try {
|
||||
final response = await stub.getAccountInfo(request);
|
||||
return response;
|
||||
} on GrpcError catch (e) {
|
||||
print('caught error: ${e.message}');
|
||||
onError!();
|
||||
} catch (e) {
|
||||
print('caught error: $e');
|
||||
onError!();
|
||||
}
|
||||
return GetAccountInfoResponse();
|
||||
}
|
||||
}
|
||||
|
@ -2,9 +2,16 @@ import 'package:flutter/material.dart';
|
||||
|
||||
import 'package:app/pages/main_screen.dart';
|
||||
|
||||
class GlobalVariable {
|
||||
/// This global key is used in material app for navigation through firebase notifications.
|
||||
static final GlobalKey<NavigatorState> navigatorState =
|
||||
GlobalKey<NavigatorState>();
|
||||
}
|
||||
|
||||
void main() async {
|
||||
WidgetsFlutterBinding.ensureInitialized();
|
||||
runApp(MaterialApp(
|
||||
navigatorKey: GlobalVariable.navigatorState,
|
||||
home: MainScreen(),
|
||||
));
|
||||
}
|
||||
|
23
frontend/app/lib/pages/home_screen.dart
Normal file
23
frontend/app/lib/pages/home_screen.dart
Normal file
@ -0,0 +1,23 @@
|
||||
import 'package:app/pb/account_info.pb.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
class HomeScreen extends StatelessWidget {
|
||||
HomeScreen({super.key, required this.account_info});
|
||||
|
||||
AccountInfo account_info;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Column(
|
||||
children: [
|
||||
Text(
|
||||
'Willkommen ${account_info.firstname}!',
|
||||
style: const TextStyle(
|
||||
fontSize: 30,
|
||||
fontWeight: FontWeight.bold,
|
||||
),
|
||||
)
|
||||
],
|
||||
);
|
||||
}
|
||||
}
|
102
frontend/app/lib/pages/login_screen.dart
Normal file
102
frontend/app/lib/pages/login_screen.dart
Normal file
@ -0,0 +1,102 @@
|
||||
import 'package:app/gapi/client.dart';
|
||||
import 'package:app/pages/home_screen.dart';
|
||||
import 'package:app/pb/rpc_get_account_info.pb.dart';
|
||||
import 'package:app/pb/rpc_login.pb.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
class LoginScreen extends StatelessWidget {
|
||||
LoginScreen({super.key});
|
||||
|
||||
Client client = Client();
|
||||
|
||||
final _formKey = GlobalKey<FormState>();
|
||||
final mailController = TextEditingController();
|
||||
final passwordController = TextEditingController();
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Form(
|
||||
key: _formKey,
|
||||
child: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
crossAxisAlignment: CrossAxisAlignment.center,
|
||||
children: [
|
||||
TextFormField(
|
||||
style: const TextStyle(
|
||||
color: Colors.white,
|
||||
),
|
||||
controller: mailController,
|
||||
decoration: const InputDecoration(
|
||||
fillColor: Color.fromARGB(30, 255, 255, 255),
|
||||
filled: true,
|
||||
hintStyle: TextStyle(
|
||||
color: Colors.white38,
|
||||
),
|
||||
hintText: 'E-Mail Adresse',
|
||||
),
|
||||
keyboardType: TextInputType.emailAddress,
|
||||
validator: (value) {
|
||||
if (value == null || value.isEmpty) {
|
||||
return 'Bitte eine gültige E-Mail Adresse eingeben';
|
||||
}
|
||||
return null;
|
||||
},
|
||||
),
|
||||
TextFormField(
|
||||
style: const TextStyle(
|
||||
color: Colors.white,
|
||||
),
|
||||
controller: passwordController,
|
||||
decoration: const InputDecoration(
|
||||
fillColor: Color.fromARGB(30, 255, 255, 255),
|
||||
filled: true,
|
||||
hintStyle: TextStyle(
|
||||
color: Colors.white38,
|
||||
),
|
||||
hintText: 'Passwort',
|
||||
),
|
||||
keyboardType: TextInputType.visiblePassword,
|
||||
obscureText: true,
|
||||
validator: (value) {
|
||||
if (value == null || value.isEmpty) {
|
||||
return 'Bitte geben Sie Ihr Passwort ein';
|
||||
}
|
||||
return null;
|
||||
},
|
||||
),
|
||||
ElevatedButton(
|
||||
onPressed: () async {
|
||||
if (_formKey.currentState!.validate()) {
|
||||
// final navigator = Navigator.of(context);
|
||||
LoginResponse response = await client.login(
|
||||
LoginRequest(
|
||||
email: mailController.text,
|
||||
password: passwordController.text,
|
||||
),
|
||||
onError: () {
|
||||
ScaffoldMessenger.of(context).showSnackBar(const SnackBar(
|
||||
content: Text('Login fehlgeschlagen'),
|
||||
));
|
||||
},
|
||||
);
|
||||
|
||||
print(response);
|
||||
|
||||
// GetAccountInfoResponse resp = await client.getAccountInfo(
|
||||
// GetAccountInfoRequest(accountId: response.accountId));
|
||||
// Navigator.push(
|
||||
// context,
|
||||
// MaterialPageRoute(
|
||||
// builder: (context) => HomeScreen(
|
||||
// account_info: resp.accountInfo,
|
||||
// ),
|
||||
// ),
|
||||
// );
|
||||
}
|
||||
},
|
||||
child: const Icon(Icons.arrow_forward))
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
@ -1,16 +1,21 @@
|
||||
import 'package:app/gapi/client.dart';
|
||||
import 'package:app/pb/rpc_create_account.pb.dart';
|
||||
import 'package:app/pages/login_screen.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
Map<String, Widget> screens = {
|
||||
// 'main': MainScreen(),
|
||||
'login': LoginScreen(),
|
||||
};
|
||||
|
||||
class MainScreen extends StatelessWidget {
|
||||
MainScreen({super.key});
|
||||
|
||||
Client client = Client();
|
||||
|
||||
void test() {
|
||||
client.stub.createAccount(
|
||||
CreateAccountRequest(email: "dev@itsscb.de", password: "secret-key123"),
|
||||
);
|
||||
String currentScreen = 'login';
|
||||
|
||||
setPage(String screen) {
|
||||
currentScreen = screen;
|
||||
}
|
||||
|
||||
@override
|
||||
@ -53,16 +58,8 @@ class MainScreen extends StatelessWidget {
|
||||
// ),
|
||||
],
|
||||
),
|
||||
body: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
crossAxisAlignment: CrossAxisAlignment.center,
|
||||
children: [
|
||||
TextButton(
|
||||
onPressed: () {
|
||||
test();
|
||||
},
|
||||
child: const Text('Button'))
|
||||
],
|
||||
body: Center(
|
||||
child: screens[currentScreen],
|
||||
),
|
||||
),
|
||||
);
|
||||
|
Loading…
x
Reference in New Issue
Block a user