Initial design for profile

feature/passo/PASSO-#1-Sync-data-from-device-to-postgre-and-vice-versa
rodolfobacuinjr 2023-01-26 10:15:00 +08:00
parent 142bd6e6a2
commit 018816c660
7 changed files with 213 additions and 7 deletions

View File

@ -0,0 +1,27 @@
import 'package:flutter/material.dart';
import 'package:unit2/theme-data.dart/colors.dart';
class MainMenu extends StatelessWidget {
final IconData icon;
final String title;
const MainMenu({
required this.icon,
required this.title,
Key? key,
}) : super(key: key);
@override
Widget build(BuildContext context) {
return ListTile(
leading: Icon(
icon,
color: primary,
),
title: Text(
title,
style: TextStyle(fontWeight: FontWeight.bold),
),
trailing: const Icon(Icons.keyboard_arrow_right),
);
}
}

View File

@ -0,0 +1,19 @@
import 'package:flutter/material.dart';
import 'package:unit2/theme-data.dart/colors.dart';
ListTile subMenu(IconData icon, String title) {
return ListTile(
leading: Container(
margin: const EdgeInsets.only(left: 20),
child: Icon(
icon,
size: 20,
color: primary,
)),
title: Text(
title,
style: const TextStyle(),
),
trailing: const Icon(Icons.keyboard_arrow_right),
);
}

View File

@ -0,0 +1,146 @@
import 'package:expandable_group/expandable_group_widget.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/src/widgets/container.dart';
import 'package:flutter/src/widgets/framework.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:fluttericon/brandico_icons.dart';
import 'package:fluttericon/elusive_icons.dart';
import 'package:fluttericon/entypo_icons.dart';
import 'package:fluttericon/font_awesome5_icons.dart';
import 'package:fluttericon/font_awesome_icons.dart';
import 'package:fluttericon/modern_pictograms_icons.dart';
import 'package:fluttericon/typicons_icons.dart';
import 'package:unit2/bloc/bloc/user_bloc.dart';
import 'package:unit2/theme-data.dart/colors.dart';
import 'components/main_menu.dart';
import 'components/submenu.dart';
class ProfileInfo extends StatefulWidget {
const ProfileInfo({super.key});
@override
State<ProfileInfo> createState() => _ProfileInfoState();
}
class _ProfileInfoState extends State<ProfileInfo> {
@override
Widget build(BuildContext context) {
return SafeArea(
child: Scaffold(
appBar: AppBar(
backgroundColor: primary,
centerTitle: true,
title: const Text('Profile'),
),
body: BlocConsumer<UserBloc, UserState>(
listener: (context, state) {
// TODO: implement listener
},
builder: (context, state) {
if (state is UserLoggedIn) {
return Container(
padding: const EdgeInsets.symmetric(
vertical: 12, horizontal: 12),
child: ListView(
children: [
ExpandableGroup(
collapsedIcon:
const Icon(Icons.keyboard_arrow_down),
expandedIcon: const Icon(Icons.keyboard_arrow_up),
header: const ListTile(
leading: Icon(
Elusive.address_book,
color: primary,
),
title: Text(
"Basic Information",
style: TextStyle(fontWeight: FontWeight.bold),
),
),
items: [
subMenu(Icons.person, "Primary"),
subMenu(Icons.home, "Home Addresses"),
subMenu(Icons.contact_mail, "Identifications"),
subMenu(Icons.contact_phone, "Contact Info"),
subMenu(Icons.flag, "Citizenships"),
]),
const MainMenu(
icon: Elusive.group,
title: "Family",
),
const MainMenu(
icon: FontAwesome5.graduation_cap,
title: "Education",
),
const MainMenu(
icon: Icons.stars,
title: "Eligibility",
),
const MainMenu(
icon: FontAwesome5.shopping_bag,
title: "Work History",
),
const MainMenu(
icon: FontAwesome5.walking,
title: "Voluntary Work & Civic Services",
),
const MainMenu(
icon: Elusive.lightbulb,
title: "Learning & Development",
),
const MainMenu(
icon: Brandico.codepen,
title: "Personal References",
),
ExpandableGroup(
collapsedIcon:
const Icon(Icons.keyboard_arrow_down),
expandedIcon: const Icon(Icons.keyboard_arrow_up),
header: const ListTile(
leading: Icon(
Icons.info,
color: primary,
),
title: Text(
"Other Information",
style: TextStyle(fontWeight: FontWeight.bold),
),
),
items: [
subMenu(Icons.fitness_center, "Skills & Hobbies"),
subMenu(FontAwesome5.certificate,
"Organization Memberships"),
subMenu(
Entypo.doc_text, "Non-Academic Recognitions"),
]),
ExpandableGroup(
collapsedIcon:
const Icon(Icons.keyboard_arrow_down),
expandedIcon: const Icon(Icons.keyboard_arrow_up),
header: const ListTile(
leading: Icon(
FontAwesome5.laptop_house,
color: primary,
),
title: Text(
"Assets",
style: TextStyle(fontWeight: FontWeight.bold),
),
),
items: [
subMenu(
ModernPictograms.home, "Real Property Tax"),
]),
],
),
);
}
return const Center(
child: Text("default"),
);
},
)));
}
}

View File

@ -32,6 +32,7 @@ class _MainScreenState extends State<MainScreen> {
}, },
child: BlocBuilder<UserBloc, UserState>(builder: (context, state) { child: BlocBuilder<UserBloc, UserState>(builder: (context, state) {
if (state is UserLoggedIn) { if (state is UserLoggedIn) {
print(state.userData!.user!.login!.token);
state.userData!.user!.login!.user!.roles!.forEach((role) { state.userData!.user!.login!.user!.roles!.forEach((role) {
Role? getRole = role; Role? getRole = role;
role!.modules!.forEach((module) { role!.modules!.forEach((module) {

View File

@ -3,6 +3,7 @@ import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:unit2/bloc/bloc/user_bloc.dart'; import 'package:unit2/bloc/bloc/user_bloc.dart';
import 'package:unit2/screens/unit2/login/login.dart'; import 'package:unit2/screens/unit2/login/login.dart';
import 'package:unit2/utils/global_context.dart'; import 'package:unit2/utils/global_context.dart';
import '../screens/profile/profile.dart';
import '../screens/unit2/basic-info/basic-info.dart'; import '../screens/unit2/basic-info/basic-info.dart';
import '../screens/unit2/homepage.dart/components/drawer-screen.dart'; import '../screens/unit2/homepage.dart/components/drawer-screen.dart';
import '../screens/unit2/login/qr_login.dart'; import '../screens/unit2/login/qr_login.dart';
@ -30,6 +31,10 @@ class AppRouter {
return MaterialPageRoute(builder: (_) { return MaterialPageRoute(builder: (_) {
return const QRLogin(); return const QRLogin();
}); });
case '/profile':
return MaterialPageRoute(builder: (_) {
return const ProfileInfo();
});
default: default:
return MaterialPageRoute(builder: (context) { return MaterialPageRoute(builder: (context) {
return Container(); return Container();

View File

@ -176,6 +176,13 @@ packages:
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.0.5" version: "2.0.5"
expandable_group:
dependency: "direct main"
description:
name: expandable_group
url: "https://pub.dartlang.org"
source: hosted
version: "0.0.8"
fake_async: fake_async:
dependency: transitive dependency: transitive
description: description:

View File

@ -66,6 +66,7 @@ dependencies:
dio: ^4.0.6 dio: ^4.0.6
cool_alert: ^1.1.0 cool_alert: ^1.1.0
permission_handler: ^10.2.0 permission_handler: ^10.2.0
expandable_group: ^0.0.8
dev_dependencies: dev_dependencies:
flutter_test: flutter_test: