From 28a7fd1a3c99e308e498fb7078a5291d8f3b5ea5 Mon Sep 17 00:00:00 2001 From: SethCohen Date: Tue, 28 Mar 2023 00:56:10 -0400 Subject: [PATCH] feat(HomePage): added custom tab --- src/lib/common/widgets/custom_tab.dart | 41 ++++++++++++++++++++++++++ src/lib/features/home/home_page.dart | 36 ++++++++++++---------- 2 files changed, 62 insertions(+), 15 deletions(-) create mode 100644 src/lib/common/widgets/custom_tab.dart diff --git a/src/lib/common/widgets/custom_tab.dart b/src/lib/common/widgets/custom_tab.dart new file mode 100644 index 0000000..37d7ed7 --- /dev/null +++ b/src/lib/common/widgets/custom_tab.dart @@ -0,0 +1,41 @@ +import 'package:asl/common/themes/comfy_theme.dart'; +import 'package:flutter/material.dart'; + +class CustomTab extends StatelessWidget { + final String message; + final IconData icon; + + const CustomTab({ + super.key, + required this.message, + required this.icon, + }); + + @override + Widget build(BuildContext context) { + final ValueNotifier isHoveredOrFocused = ValueNotifier(false); + + return Focus( + onFocusChange: (isFocused) => isHoveredOrFocused.value = isFocused, + child: MouseRegion( + onEnter: (_) => isHoveredOrFocused.value = true, + onExit: (_) => isHoveredOrFocused.value = false, + child: ValueListenableBuilder( + valueListenable: isHoveredOrFocused, + builder: (context, isHovered, _) { + return Tooltip( + message: message, + child: Tab( + icon: isHovered + ? Icon(icon, + color: + Theme.of(context).extension()!.hover) + : Icon(icon), + ), + ); + }, + ), + ), + ); + } +} diff --git a/src/lib/features/home/home_page.dart b/src/lib/features/home/home_page.dart index c47e170..3d81c66 100644 --- a/src/lib/features/home/home_page.dart +++ b/src/lib/features/home/home_page.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import '../../common/utils/data_provider.dart'; +import '../../common/widgets/custom_tab.dart'; import '../creator/creator_page.dart'; import '../dictionary/dictionary_page.dart'; import '../lesson/lessons_list_page.dart'; @@ -42,21 +43,26 @@ class _HomePageState extends State { dividerColor: Colors.transparent, isScrollable: true, tabs: [ - Tooltip( - message: 'Lessons', - child: Tab(icon: Icon(Icons.school))), - Tooltip( - message: 'Review', - child: Tab(icon: Icon(Icons.history))), - Tooltip( - message: 'Dictionary', - child: Tab(icon: Icon(Icons.find_in_page))), - Tooltip( - message: 'Creator', - child: Tab(icon: Icon(Icons.design_services))), - Tooltip( - message: 'Profile', - child: Tab(icon: Icon(Icons.account_circle))), + CustomTab( + message: 'Lessons', + icon: Icons.school, + ), + CustomTab( + message: 'Review', + icon: Icons.history, + ), + CustomTab( + message: 'Dictionary', + icon: Icons.find_in_page, + ), + CustomTab( + message: 'Creator', + icon: Icons.design_services, + ), + CustomTab( + message: 'Profile', + icon: Icons.account_circle, + ), ], ), ],