Skip to content

Latest commit

 

History

History
81 lines (63 loc) · 2.06 KB

File metadata and controls

81 lines (63 loc) · 2.06 KB

TODO: TwoDimensionalScrollable를 사용해서 개선해야할듯

TODO: tooltip 제공해주자.

todo: row double click null 이면 duration 1로고정 ? or ㅇ안하게?

// ignore_for_file: public_member_api_docs, sort_constructors_first
import 'package:acra_client/common/enum/style/enum_tooltip_position.dart';
import 'package:acra_client/extensions/theme/themedata_ext.dart';
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';

class CustomFlutterTooltip extends ConsumerWidget {
  /// position
  final TooltipPosition tooltipPosition;
  final EdgeInsetsGeometry? margin;

  /// duration
  final Duration? waitDuration;

  /// message
  final String? message;
  final TextStyle? textStyle;
  final InlineSpan? richMessage;

  /// color
  final Color? backgroundColor;

  /// child
  final Widget child;

  const CustomFlutterTooltip({
    super.key,
    this.tooltipPosition = TooltipPosition.bottom,
    this.margin,
    this.waitDuration,
    this.message,
    this.textStyle,
    this.richMessage,
    this.backgroundColor,
    required this.child,
  });

  @override
  Widget build(BuildContext context, WidgetRef ref) {
    return Tooltip(
      margin: margin ?? const EdgeInsets.symmetric(horizontal: 30),
      textStyle: richMessage == null
          ? textStyle ?? ref.theme.font.mediumContentText12
          : textStyle,

      /// spacing
      padding: const EdgeInsets.symmetric(horizontal: 10, vertical: 5),
      preferBelow: tooltipPosition == TooltipPosition.bottom,
      verticalOffset: 20,

      /// style
      decoration: BoxDecoration(
          color: backgroundColor ?? ref.theme.color.tooltipBackground,
          borderRadius: BorderRadius.circular(5),
          boxShadow: [
            BoxShadow(blurRadius: 3, color: ref.theme.color.shadowColor)
          ]),

      /// duration
      waitDuration: waitDuration ?? const Duration(milliseconds: 300),
      exitDuration: Duration.zero,
      showDuration: Duration.zero,
      message: message,
      richMessage: richMessage,
      child: child,
    );
  }
}