/* * This file is part of Stack Wallet. * * Copyright (c) 2023 Cypher Stack * All Rights Reserved. * The code is distributed under GPLv3 license, see LICENSE file for details. * Generated by Cypher Stack on 2023-05-26 * */ import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; import '../../pages/generic/single_field_edit_view.dart'; import '../../themes/stack_colors.dart'; import '../../utilities/assets.dart'; import '../../utilities/text_styles.dart'; import '../../utilities/util.dart'; import '../desktop/desktop_dialog.dart'; import '../icon_widgets/pencil_icon.dart'; import 'package:tuple/tuple.dart'; class SimpleEditButton extends StatelessWidget { const SimpleEditButton({ super.key, this.editValue, this.editLabel, this.overrideTitle, this.disableIcon = false, this.onValueChanged, this.onPressedOverride, }) : assert( (editLabel != null && editValue != null && onValueChanged != null) || (editLabel == null && editValue == null && onValueChanged == null && onPressedOverride != null), ); final String? editValue; final String? editLabel; final String? overrideTitle; final bool disableIcon; final void Function(String)? onValueChanged; final VoidCallback? onPressedOverride; @override Widget build(BuildContext context) { if (Util.isDesktop) { return SizedBox( height: 26, width: 26, child: RawMaterialButton( fillColor: Theme.of(context).extension()!.buttonBackSecondary, elevation: 0, hoverElevation: 0, shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(6), ), onPressed: onPressedOverride ?? () async { final result = await showDialog( context: context, builder: (context) { return DesktopDialog( maxWidth: 580, maxHeight: 300, child: SingleFieldEditView( initialValue: editValue!, label: editLabel!, ), ); }, ); if (result is String && result != editValue!) { onValueChanged?.call(result); } }, child: Padding( padding: const EdgeInsets.all(5), child: PencilIcon( width: 16, height: 16, color: Theme.of(context).extension()!.textDark, ), ), ), ); } else { return GestureDetector( onTap: onPressedOverride ?? () async { final result = await Navigator.of(context).pushNamed( SingleFieldEditView.routeName, arguments: Tuple2( editValue!, editLabel!, ), ); if (result is String && result != editValue!) { onValueChanged?.call(result); } }, child: Row( children: [ if (!disableIcon) SvgPicture.asset( Assets.svg.pencil, width: 10, height: 10, color: Theme.of(context).extension()!.infoItemIcons, ), if (!disableIcon) const SizedBox( width: 4, ), Text( overrideTitle ?? "Edit", style: STextStyles.link2(context), ), ], ), ); } } }