/*
 * @Author       : WuWei
 * @LastEditors  : WuWei
 * @Date         : 2022-08-17 23:04:42
 * @LastEditTime : 2022-08-17 23:06:27
 * @Description  : Do not edit
 */
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';

/// Icon button widget built different
/// depends on [MaterialApp] or [CupertinoApp] ancestor.
class IconBtn extends StatelessWidget {
  /// Widget to use inside button.
  ///
  /// Typically [Icon] widget.
  final Widget? icon;

  /// Function called when user tap on the button.
  ///
  /// Can be null. In this case button will be disabled.
  final VoidCallback? onTap;

  /// Tooltip for button.
  ///
  /// Applied only for material style buttons.
  /// It means only if widget has [MaterialApp] ancestor.
  final String? tooltip;

  /// Creates button with [icon] different
  /// depends on [MaterialApp] or [CupertinoApp] ancestor.
  const IconBtn({Key? key, required this.icon, this.onTap, this.tooltip})
      : super(key: key);

  @override
  Widget build(BuildContext context) {
    // ignore: unnecessary_null_comparison
    bool isMaterial = Material.of(context) != null;

    return isMaterial ? _materialBtn() : _cupertinoBtn();
  }

  Widget _cupertinoBtn() => CupertinoButton(
        padding: const EdgeInsets.all(0.0),
        child: icon!,
        onPressed: onTap,
      );

  Widget _materialBtn() => IconButton(
        icon: icon!,
        tooltip: tooltip!,
        onPressed: onTap,
      );
}
