Skip to content

Commit

Permalink
feat: platform tooltip add
Browse files Browse the repository at this point in the history
  • Loading branch information
KRTirtho committed Oct 26, 2022
1 parent 153a015 commit 5f0ba90
Show file tree
Hide file tree
Showing 3 changed files with 186 additions and 0 deletions.
4 changes: 4 additions & 0 deletions example/lib/main.dart
Expand Up @@ -174,6 +174,10 @@ class _MyHomePageState extends State<MyHomePage> {
print("Long Pressed");
},
),
PlatformTooltip(
message: "Really Wonderful ${Theme.of(context).platform.name}",
child: const Text("Hover/Long-Press for Tooltip"),
)
],
),
),
Expand Down
1 change: 1 addition & 0 deletions lib/platform_ui.dart
Expand Up @@ -10,3 +10,4 @@ export 'src/platform_switch.dart';
export 'src/platform_text_field.dart';
export 'src/platform_drop_down_menu.dart';
export 'src/platform_list_tile.dart';
export 'src/platform_tooltip.dart';
181 changes: 181 additions & 0 deletions lib/src/platform_tooltip.dart
@@ -0,0 +1,181 @@
import 'package:fluent_ui/fluent_ui.dart' as FluentUI;
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:platform_ui/platform_ui.dart';

class PlatformTooltip extends StatelessWidget with PlatformMixin<Widget> {
final String? message;
final InlineSpan? richMessage;
final double? height;
final EdgeInsetsGeometry? padding;
final EdgeInsetsGeometry? margin;
final double? verticalOffset;
final bool? preferBelow;
final bool? excludeFromSemantics;
final Widget? child;
final Decoration? decoration;
final TextStyle? textStyle;
final TextAlign? textAlign;
final Duration? waitDuration;
final Duration? showDuration;
final TooltipTriggerMode? triggerMode;
final bool? enableFeedback;
final TooltipTriggeredCallback? onTriggered;

const PlatformTooltip({
Key? key,
this.message,
this.richMessage,
this.height,
this.padding,
this.margin,
this.verticalOffset,
this.preferBelow,
this.excludeFromSemantics,
this.decoration,
this.textStyle,
this.textAlign,
this.waitDuration,
this.showDuration,
this.triggerMode,
this.enableFeedback,
this.onTriggered,
this.child,
}) : super(key: key);

@override
Widget build(BuildContext context) {
return getPlatformType(context);
}

@override
Widget android(BuildContext context) {
return Tooltip(
key: key,
message: message,
richMessage: richMessage,
height: height,
padding: padding,
margin: margin,
verticalOffset: verticalOffset,
preferBelow: preferBelow,
excludeFromSemantics: excludeFromSemantics,
decoration: decoration,
textStyle: textStyle,
textAlign: textAlign,
waitDuration: waitDuration,
showDuration: showDuration,
triggerMode: triggerMode,
enableFeedback: enableFeedback,
onTriggered: onTriggered,
child: child,
);
}

@override
Widget ios(BuildContext context) {
return Tooltip(
key: key,
message: message,
richMessage: richMessage,
height: height,
padding: padding ?? const EdgeInsets.all(12),
margin: margin,
verticalOffset: verticalOffset ?? 10,
preferBelow: preferBelow ?? false,
excludeFromSemantics: excludeFromSemantics,
decoration:
(decoration as BoxDecoration? ?? const BoxDecoration()).copyWith(
color: CupertinoTheme.of(context).brightness == Brightness.light
? Colors.grey[900]
: Colors.grey[800],
borderRadius: BorderRadius.circular(8),
),
textStyle: textStyle,
textAlign: textAlign,
waitDuration: waitDuration,
showDuration: showDuration,
triggerMode: triggerMode,
enableFeedback: enableFeedback,
onTriggered: onTriggered,
child: child,
);
}

@override
Widget linux(BuildContext context) {
return android(context);
}

@override
Widget macos(BuildContext context) {
return Tooltip(
key: key,
message: message,
richMessage: richMessage,
height: height,
padding: padding ?? const EdgeInsets.all(8),
margin: margin,
verticalOffset: verticalOffset ?? 10,
preferBelow: preferBelow ?? false,
excludeFromSemantics: excludeFromSemantics,
decoration:
(decoration as BoxDecoration? ?? const BoxDecoration()).copyWith(
color: CupertinoTheme.of(context).brightness == Brightness.light
? Colors.white
: Colors.grey[800],
borderRadius: BorderRadius.circular(5),
boxShadow: [
BoxShadow(
color: CupertinoTheme.of(context).brightness == Brightness.light
? Colors.grey[300]!
: Colors.grey[900]!,
blurRadius: 7,
offset: const Offset(0, 0),
)
],
),
textStyle: textStyle ??
TextStyle(
color: CupertinoTheme.of(context).brightness == Brightness.light
? Colors.black
: Colors.white,
),
textAlign: textAlign,
waitDuration: waitDuration,
showDuration: showDuration,
triggerMode: triggerMode,
enableFeedback: enableFeedback,
onTriggered: onTriggered,
child: child,
);
}

@override
Widget windows(BuildContext context) {
final fluentTheme = FluentUI.FluentTheme.of(context).tooltipTheme;

return FluentUI.TooltipTheme(
data: FluentUI.TooltipThemeData(
textStyle: textStyle ?? fluentTheme.textStyle,
decoration: decoration ?? fluentTheme.decoration,
height: height ?? fluentTheme.height,
margin: margin ?? fluentTheme.margin,
verticalOffset: verticalOffset ?? fluentTheme.verticalOffset,
preferBelow: preferBelow ?? fluentTheme.preferBelow,
waitDuration: waitDuration ?? fluentTheme.waitDuration,
showDuration: showDuration ?? fluentTheme.showDuration,
padding: padding ?? fluentTheme.padding,
),
child: FluentUI.Tooltip(
key: key,
message: message,
richMessage: richMessage,
excludeFromSemantics: excludeFromSemantics ?? false,
triggerMode: triggerMode,
enableFeedback: enableFeedback,
child: child,
),
);
}
}

0 comments on commit 5f0ba90

Please sign in to comment.