ft/adds login_screen and initial home_screen

This commit is contained in:
itsscb 2023-10-25 00:00:39 +02:00
parent be41924b3b
commit a14b87012a
5 changed files with 190 additions and 15 deletions

View File

@ -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();
}
}

View File

@ -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(),
));
}

View 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,
),
)
],
);
}
}

View 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))
],
),
);
}
}

View File

@ -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],
),
),
);