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_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:app/pb/service_df.pbgrpc.dart';
|
||||||
import 'package:flutter/foundation.dart';
|
import 'package:flutter/foundation.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
import 'package:grpc/grpc.dart';
|
import 'package:grpc/grpc.dart';
|
||||||
|
|
||||||
class Client {
|
class Client {
|
||||||
@ -30,4 +34,46 @@ class Client {
|
|||||||
}
|
}
|
||||||
return CreateAccountResponse();
|
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';
|
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 {
|
void main() async {
|
||||||
WidgetsFlutterBinding.ensureInitialized();
|
WidgetsFlutterBinding.ensureInitialized();
|
||||||
runApp(MaterialApp(
|
runApp(MaterialApp(
|
||||||
|
navigatorKey: GlobalVariable.navigatorState,
|
||||||
home: MainScreen(),
|
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/gapi/client.dart';
|
||||||
import 'package:app/pb/rpc_create_account.pb.dart';
|
import 'package:app/pages/login_screen.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
|
Map<String, Widget> screens = {
|
||||||
|
// 'main': MainScreen(),
|
||||||
|
'login': LoginScreen(),
|
||||||
|
};
|
||||||
|
|
||||||
class MainScreen extends StatelessWidget {
|
class MainScreen extends StatelessWidget {
|
||||||
MainScreen({super.key});
|
MainScreen({super.key});
|
||||||
|
|
||||||
Client client = Client();
|
Client client = Client();
|
||||||
|
|
||||||
void test() {
|
String currentScreen = 'login';
|
||||||
client.stub.createAccount(
|
|
||||||
CreateAccountRequest(email: "dev@itsscb.de", password: "secret-key123"),
|
setPage(String screen) {
|
||||||
);
|
currentScreen = screen;
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@ -53,16 +58,8 @@ class MainScreen extends StatelessWidget {
|
|||||||
// ),
|
// ),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
body: Column(
|
body: Center(
|
||||||
mainAxisAlignment: MainAxisAlignment.center,
|
child: screens[currentScreen],
|
||||||
crossAxisAlignment: CrossAxisAlignment.center,
|
|
||||||
children: [
|
|
||||||
TextButton(
|
|
||||||
onPressed: () {
|
|
||||||
test();
|
|
||||||
},
|
|
||||||
child: const Text('Button'))
|
|
||||||
],
|
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user