Line data Source code
1 : // Copyright 2023 The terCAD team. All rights reserved. 2 : // Use of this source code is governed by a CC BY-NC-ND 4.0 license that can be found in the LICENSE file. 3 : 4 : import 'package:app_finance/_classes/herald/app_locale.dart'; 5 : import 'package:app_finance/_classes/structure/navigation/app_route.dart'; 6 : import 'package:app_finance/_ext/build_context_ext.dart'; 7 : import 'package:flutter/material.dart'; 8 : import 'package:flutter/semantics.dart'; 9 : 10 : class TapWidget extends StatelessWidget { 11 : final Widget child; 12 : final String? tooltip; 13 : final RouteSettings? route; 14 : final Function? onTap; 15 : final Function(bool)? onFocusChange; 16 : final bool toWrap; 17 : 18 3 : const TapWidget({ 19 : super.key, 20 : required this.child, 21 : this.tooltip, 22 : this.route, 23 : this.onTap, 24 : this.onFocusChange, 25 : this.toWrap = true, 26 : }); 27 : 28 3 : @override 29 : Widget build(context) { 30 3 : if (!toWrap) { 31 0 : return child; 32 : } 33 3 : NavigatorState nav = Navigator.of(context); 34 3 : return Semantics( 35 : container: true, 36 6 : attributedHint: AttributedString(tooltip ?? AppLocale.labels.tapToOpen), 37 3 : child: Tooltip( 38 3 : message: tooltip ?? AppLocale.labels.homeTooltip, 39 12 : child: onTap != null || route?.name != '' 40 3 : ? InkWell( 41 9 : focusColor: context.colorScheme.onSurface.withOpacity(0.08), 42 9 : hoverColor: context.colorScheme.onSurface.withOpacity(0.04), 43 3 : onFocusChange: onFocusChange, 44 1 : onTap: () { 45 1 : if (onTap != null) { 46 0 : onTap!(); 47 3 : } else if (route?.name != '') { 48 5 : nav.pushNamed(route?.name ?? AppRoute.homeRoute, arguments: route?.arguments); 49 : } 50 : }, 51 3 : child: child, 52 : ) 53 0 : : child, 54 : ), 55 : ); 56 : } 57 : }