Skip to content

Revamp - Health App (Sharekhan) #60

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 18 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
56 changes: 31 additions & 25 deletions lib/app/routes/app_routes.dart
Original file line number Diff line number Diff line change
Expand Up @@ -5,18 +5,22 @@ part of 'app_pages.dart';

abstract class Routes {
static const HOME = _Paths.HOME;
// static String PROFILE = Screen.PROFILE.fullPath;
// static String SETTINGS = Screen.SETTINGS.fullPath;
static String LOGIN = Screen.LOGIN.route;
static String REGISTER = Screen.REGISTER.route;
static const PROFILE = _Paths.PROFILE;
static const ACTIVITY = _Paths.ACTIVITY;
static const SETTINGS = _Paths.SETTINGS;
static const HEALTH_TIPS = _Paths.HEALTH_TIPS;
static const CHAT = _Paths.CHAT;
static const BOOKING = _Paths.BOOKING;

// Uncomment and modify these as needed for your app
// static String DASHBOARD = Screen.DASHBOARD.fullPath;
// static String PRODUCTS = Screen.PRODUCTS.fullPath;
// static String CART = Screen.CART.fullPath;
// static String CHECKOUT = Screen.CHECKOUT.fullPath;
// static const CATEGORIES = _Paths.HOME + _Paths.CATEGORIES;
// static const TASKS = _Paths.HOME + _Paths.TASKS;
// static const USERS = _Paths.HOME + _Paths.USERS;
// static const MY_PRODUCTS = _Paths.HOME + _Paths.MY_PRODUCTS;
// static String CATEGORIES = _Paths.HOME + _Paths.CATEGORIES;
// static String TASKS = _Paths.HOME + _Paths.TASKS;
// static String USERS = _Paths.HOME + _Paths.USERS;
// static String MY_PRODUCTS = _Paths.HOME + _Paths.MY_PRODUCTS;

static String PRODUCT_DETAILS(String productId) =>
'${Screen.PRODUCTS.route}/$productId';
Expand All @@ -32,23 +36,25 @@ abstract class Routes {
'${Screen.REGISTER.route}?then=${Uri.encodeQueryComponent(afterSuccessfulLogin)}';
}

// Keeping this as Get_Cli will require it. Any addition can later be added to Screen
abstract class _Paths {
static const String HOME = '/home';
// static const DASHBOARD = '/dashboard';
// static const PRODUCTS = '/products';
// static const PROFILE = '/profile';
// static const SETTINGS = '/settings';
// static const PRODUCT_DETAILS = '/:productId';
// static const CART_DETAILS = '/:productId';
// static const LOGIN = '/login';
// static const CART = '/cart';
// static const CHECKOUT = '/checkout';
// static const REGISTER = '/register';
// static const CATEGORIES = '/categories';
// static const TASKS = '/tasks';
// static const TASK_DETAILS = '/:taskId';
// static const USERS = '/users';
// static const USER_PROFILE = '/:uId';
// static const MY_PRODUCTS = '/my-products';
static const String PROFILE = '/profile';
static const String ACTIVITY = '/activity';
static const String SETTINGS = '/settings';
static const String HEALTH_TIPS = '/health_tips';
static const String CHAT = '/chat';
static const String BOOKING = '/booking';

// Uncomment and modify these as needed for your app
// static const String DASHBOARD = '/dashboard';
// static const String PRODUCTS = '/products';
// static const String CART = '/cart';
// static const String CHECKOUT = '/checkout';
// static const String REGISTER = '/register';
// static const String CATEGORIES = '/categories';
// static const String TASKS = '/tasks';
// static const String TASK_DETAILS = '/:taskId';
// static const String USERS = '/users';
// static const String USER_PROFILE = '/:uId';
// static const String MY_PRODUCTS = '/my-products';
}
48 changes: 48 additions & 0 deletions lib/app/widgets/health_card_widget.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
import 'package:flutter/material.dart';

class HealthCardWidget extends StatelessWidget {
final String title;
final String value;
final Color color;

HealthCardWidget({
required this.title,
required this.value,
this.color = Colors.blueAccent,
});

@override
Widget build(BuildContext context) {
return Card(
color: color.withOpacity(0.1),
elevation: 4,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(12),
),
child: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
title,
style: TextStyle(
fontSize: 18,
fontWeight: FontWeight.bold,
),
),
SizedBox(height: 8),
Text(
value,
style: TextStyle(
fontSize: 24,
fontWeight: FontWeight.bold,
color: color,
),
),
],
),
),
);
}
}
24 changes: 24 additions & 0 deletions lib/app/widgets/health_metric_widget.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
import 'package:flutter/material.dart';
import 'health_card_widget.dart';

class HealthMetricWidget extends StatelessWidget {
final List<Map<String, String>> metrics;

HealthMetricWidget({required this.metrics});

@override
Widget build(BuildContext context) {
return Column(
children: metrics.map((metric) {
return Padding(
padding: const EdgeInsets.symmetric(vertical: 8.0),
child: HealthCardWidget(
title: metric['title']!,
value: metric['value']!,
color: Colors.teal,
),
);
}).toList(),
);
}
}
7 changes: 7 additions & 0 deletions lib/main.dart
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,13 @@ import 'app/routes/app_pages.dart';
import 'firebase_options.dart';
import 'services/auth_service.dart';

import 'screens/home_screen.dart';
import 'screens/profile_screen.dart';
import 'screens/activity_screen.dart';
import 'screens/settings_screen.dart';
import 'screens/health_tips_screen.dart';
import 'screens/chat_screen.dart';
import 'screens/booking_screen.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await GetStorage.init();
Expand Down
21 changes: 21 additions & 0 deletions lib/screen/activity_screen.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
// lib/screens/activity_screen.dart
import 'package:flutter/material.dart';
import '../widgets/activity_list_widget.dart';

class ActivityScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Activities'),
),
body: ActivityListWidget(),
floatingActionButton: FloatingActionButton(
onPressed: () {
Navigator.pushNamed(context, '/add_activity');
},
child: Icon(Icons.add),
),
);
}
}
14 changes: 14 additions & 0 deletions lib/screen/booking_screen.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import 'package:flutter/material.dart';
import '../widgets/booking_form_widget.dart';

class BookingScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Book an Appointment'),
),
body: BookingFormWidget(),
);
}
}
14 changes: 14 additions & 0 deletions lib/screen/chat_screen.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import 'package:flutter/material.dart';
import '../widgets/chat_interface_widget.dart';

class ChatScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Chat with Doctor'),
),
body: ChatInterfaceWidget(),
);
}
}
14 changes: 14 additions & 0 deletions lib/screen/health_tips_screen.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import 'package:flutter/material.dart';
import '../widgets/article_list_widget.dart';

class HealthTipsScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Health Tips'),
),
body: ArticleListWidget(),
);
}
}
153 changes: 153 additions & 0 deletions lib/screen/home_screen.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,153 @@
import 'package:flutter/material.dart';
import '../widgets/health_summary_widget.dart';
import '../widgets/notifications_widget.dart';
import '../widgets/activity_list_widget.dart';
import '../widgets/health_card_widget.dart';
import '../widgets/health_metric_widget.dart';
import '../constants.dart'; // Ensure this contains the necessary constants and configurations.

class HomeScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(
'Health Dashboard',
style: TextStyle(fontWeight: FontWeight.bold),
),
backgroundColor: Colors.blueAccent,
actions: [
IconButton(
icon: Icon(Icons.account_circle, size: 30),
onPressed: () {
Navigator.pushNamed(context, '/profile');
},
),
],
),
drawer: Drawer(
child: Container(
color: Colors.blueGrey[100],
child: ListView(
padding: EdgeInsets.zero,
children: [
DrawerHeader(
decoration: BoxDecoration(
color: Colors.blueAccent,
),
child: Text(
'Menu',
style: TextStyle(
color: Colors.white,
fontSize: 24,
fontWeight: FontWeight.bold,
),
),
),
ListTile(
leading: Icon(Icons.person),
title: Text('Profile'),
onTap: () {
Navigator.pushNamed(context, '/profile');
},
),
ListTile(
leading: Icon(Icons.settings),
title: Text('Settings'),
onTap: () {
Navigator.pushNamed(context, '/settings');
},
),
Divider(),
ListTile(
leading: Icon(Icons.logout),
title: Text('Logout'),
onTap: () {
// Handle logout
},
),
],
),
),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
'Health Summary',
style: Theme.of(context).textTheme.headline6?.copyWith(
fontWeight: FontWeight.bold,
),
),
SizedBox(height: 10),
HealthSummaryWidget(),
SizedBox(height: 20),
Text(
'Health Metrics',
style: Theme.of(context).textTheme.headline6?.copyWith(
fontWeight: FontWeight.bold,
),
),
SizedBox(height: 10),
HealthMetricWidget(
metrics: [
{'title': 'Steps Today', 'value': '8,765'},
{'title': 'Calories Burned', 'value': '620 kcal'},
{'title': 'Heart Rate', 'value': '72 bpm'},
{'title': 'Sleep Duration', 'value': '7 hrs 30 mins'},
],
),
SizedBox(height: 20),
Text(
'Notifications',
style: Theme.of(context).textTheme.headline6?.copyWith(
fontWeight: FontWeight.bold,
),
),
SizedBox(height: 10),
NotificationsWidget(),
SizedBox(height: 20),
Text(
'Recent Activities',
style: Theme.of(context).textTheme.headline6?.copyWith(
fontWeight: FontWeight.bold,
),
),
SizedBox(height: 10),
Expanded(
child: ActivityListWidget(),
),
],
),
),
bottomNavigationBar: BottomNavigationBar(
items: [
BottomNavigationBarItem(
icon: Icon(Icons.home),
label: 'Home',
),
BottomNavigationBarItem(
icon: Icon(Icons.fitness_center),
label: 'Activities',
),
BottomNavigationBarItem(
icon: Icon(Icons.settings),
label: 'Settings',
),
],
currentIndex: 0,
selectedItemColor: Colors.blueAccent,
unselectedItemColor: Colors.grey,
onTap: (index) {
if (index == 1) {
Navigator.pushNamed(context, '/activities');
} else if (index == 2) {
Navigator.pushNamed(context, '/settings');
}
},
),
);
}
}
Loading