diff --git a/app/lib/dose.dart b/app/lib/dose.dart index 9b2517f..d2b0ce1 100644 --- a/app/lib/dose.dart +++ b/app/lib/dose.dart @@ -123,9 +123,9 @@ class _DoseState extends State { label: 'Analytics', ), NavigationDestination( - icon: Icon(Icons.person_outline), - selectedIcon: Icon(Icons.person), - label: 'Profile', + icon: Icon(Icons.more_horiz_outlined), + selectedIcon: Icon(Icons.more_horiz), + label: 'More', ), ], ), diff --git a/app/lib/pages/about_page.dart b/app/lib/pages/about_page.dart index b1dcd13..8427975 100644 --- a/app/lib/pages/about_page.dart +++ b/app/lib/pages/about_page.dart @@ -12,6 +12,91 @@ class AboutPage extends StatelessWidget { } } + Widget _buildTeamCard( + BuildContext context, { + required String role, + required String name, + }) { + return SizedBox( + width: double.infinity, + child: Card( + color: Theme.of(context).colorScheme.primaryContainer.withValues(alpha: 0.3), + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(16), + side: BorderSide( + color: Theme.of(context).colorScheme.primaryContainer, + width: 1, + ), + ), + elevation: 0, + child: Padding( + padding: const EdgeInsets.symmetric(vertical: 16.0, horizontal: 24.0), + child: Column( + children: [ + Text( + role, + style: Theme.of(context).textTheme.labelLarge?.copyWith( + fontWeight: FontWeight.bold, + color: Theme.of(context).colorScheme.onSurfaceVariant, + ), + ), + const SizedBox(height: 4), + Text( + name, + style: Theme.of(context).textTheme.headlineSmall?.copyWith( + fontWeight: FontWeight.bold, + color: Theme.of(context).colorScheme.onSurface, + ), + ), + ], + ), + ), + ), + ); + } + + Widget _buildToolCard( + BuildContext context, { + required String name, + required String description, + }) { + return SizedBox( + width: double.infinity, + child: Card( + color: Theme.of(context).colorScheme.primaryContainer.withValues(alpha: 0.3), + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(16), + side: BorderSide( + color: Theme.of(context).colorScheme.primaryContainer, + width: 1, + ), + ), + elevation: 0, + child: Padding( + padding: const EdgeInsets.symmetric(vertical: 16.0, horizontal: 24.0), + child: Column( + children: [ + Text( + name, + style: Theme.of(context).textTheme.titleMedium?.copyWith( + fontWeight: FontWeight.bold, + color: Theme.of(context).colorScheme.onSurface, + ), + ), + const SizedBox(height: 4), + Text( + description, + style: Theme.of(context).textTheme.bodySmall?.copyWith( + color: Theme.of(context).colorScheme.onSurfaceVariant, + ), + ), + ], + ), + ), + ), + ); + } + @override Widget build(BuildContext context) { return Scaffold( @@ -38,7 +123,7 @@ class AboutPage extends StatelessWidget { ), centerTitle: false, ), - body: Padding( + body: SingleChildScrollView( padding: const EdgeInsets.all(24.0), child: Column( crossAxisAlignment: CrossAxisAlignment.start, @@ -76,19 +161,67 @@ class AboutPage extends StatelessWidget { ), const SizedBox(height: 32), Text( - 'Contributors', + 'Development Team', style: Theme.of( context, ).textTheme.titleLarge?.copyWith(fontWeight: FontWeight.w600), ), const SizedBox(height: 12), + _buildTeamCard( + context, + role: 'Core App Development', + name: 'Jonathan', + ), + const SizedBox(height: 8), + _buildTeamCard( + context, + role: 'UI/UX Design & Analysis', + name: 'Nithin', + ), + const SizedBox(height: 8), + _buildTeamCard( + context, + role: 'Notification Services', + name: 'Jason', + ), + const SizedBox(height: 8), + _buildTeamCard( + context, + role: 'Database Architecture', + name: 'Aadi', + ), + const SizedBox(height: 32), Text( - 'Aadi\nJason\nJonathan\nNithin', + 'Major Tools', style: Theme.of( context, - ).textTheme.bodyLarge?.copyWith(height: 1.5), + ).textTheme.titleLarge?.copyWith(fontWeight: FontWeight.w600), + ), + const SizedBox(height: 12), + _buildToolCard( + context, + name: 'Flutter', + description: 'flutter.dev', ), - const Spacer(), + const SizedBox(height: 8), + _buildToolCard( + context, + name: 'SQFlite', + description: 'pub.dev/packages/sqflite', + ), + const SizedBox(height: 8), + _buildToolCard( + context, + name: 'FL Chart', + description: 'pub.dev/packages/fl_chart', + ), + const SizedBox(height: 8), + _buildToolCard( + context, + name: 'Permission Handler', + description: 'pub.dev/packages/permission_handler', + ), + const SizedBox(height: 32), SizedBox( width: double.infinity, child: FilledButton.icon( diff --git a/app/lib/pages/support_page.dart b/app/lib/pages/support_page.dart index 0fe9b4d..1e2aede 100644 --- a/app/lib/pages/support_page.dart +++ b/app/lib/pages/support_page.dart @@ -1,4 +1,5 @@ import 'package:flutter/material.dart'; +import 'package:url_launcher/url_launcher.dart'; class HelpSupportPage extends StatelessWidget { const HelpSupportPage({super.key}); @@ -43,24 +44,9 @@ class HelpSupportPage extends StatelessWidget { ), ), const SizedBox(height: 16), - _buildContactItem( + _buildSupportTile( context, - icon: Icons.person_outline, - name: 'Jonathan', - number: '+91 77365 81435', - ), - const SizedBox(height: 32), - Text( - 'FAQ', - style: Theme.of(context).textTheme.titleLarge?.copyWith( - fontWeight: FontWeight.bold, - color: Theme.of(context).colorScheme.primary, - ), - ), - const SizedBox(height: 16), - const Text( - 'For any urgent issues, please reach out to our support team.', - style: TextStyle(fontSize: 16, height: 1.5), + title: 'Help', ), ], ), @@ -68,32 +54,37 @@ class HelpSupportPage extends StatelessWidget { ); } - Widget _buildContactItem( + Future _launchGitHubIssues() async { + final Uri url = Uri.parse('https://github.com/orbitronhd-org/dose/issues'); + if (!await launchUrl(url, mode: LaunchMode.externalApplication)) { + debugPrint('Could not launch $url'); + } + } + + Widget _buildSupportTile( BuildContext context, { - required IconData icon, - required String name, - required String number, + required String title, }) { - return Row( - children: [ - Icon(icon, color: Theme.of(context).colorScheme.secondary), - const SizedBox(width: 16), - Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - name, - style: const TextStyle(fontWeight: FontWeight.w600, fontSize: 16), - ), - Text( - number, - style: TextStyle( - color: Theme.of(context).colorScheme.onSurfaceVariant, - ), + return ListTile( + leading: Icon( + Icons.help_outline, + color: Theme.of(context).colorScheme.onSurfaceVariant, + ), + title: Text( + title, + style: Theme.of(context).textTheme.bodyLarge?.copyWith( + fontWeight: FontWeight.w500, ), - ], - ), - ], + ), + trailing: Icon( + Icons.open_in_new, + color: Theme.of(context).colorScheme.onSurfaceVariant, + size: 20, + ), + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(12), + ), + onTap: _launchGitHubIssues, ); } }