mirror of
https://github.com/Such-Software/hash-wallet.git
synced 2026-10-30 06:48:49 +01:00
Upstream reformatted its whole tree in 16ddc0837. Matching it removes
formatting from the conflict surface of this and every later sync.
90 lines
2.6 KiB
Dart
90 lines
2.6 KiB
Dart
import 'dart:io';
|
|
|
|
import 'package:hash_wallet/src/widgets/hash_image_widget.dart';
|
|
import 'package:flutter/material.dart';
|
|
import 'package:flutter_svg/flutter_svg.dart';
|
|
|
|
class KeyboardHideOverlay extends StatelessWidget {
|
|
const KeyboardHideOverlay({super.key, required this.child, this.unfocusOnTap = false});
|
|
|
|
final Widget child;
|
|
final bool unfocusOnTap;
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return Stack(
|
|
children: [
|
|
Positioned.fill(
|
|
child: GestureDetector(
|
|
onTap: () {
|
|
if (unfocusOnTap) {
|
|
FocusManager.instance.primaryFocus?.unfocus();
|
|
}
|
|
},
|
|
child: child)),
|
|
if (Platform.isIOS) KeyboardHideButton()
|
|
],
|
|
);
|
|
}
|
|
}
|
|
|
|
class KeyboardHideButton extends StatefulWidget {
|
|
const KeyboardHideButton({super.key});
|
|
|
|
@override
|
|
State<KeyboardHideButton> createState() => _KeyboardHideButtonState();
|
|
}
|
|
|
|
class _KeyboardHideButtonState extends State<KeyboardHideButton> {
|
|
double _lastInset = 0;
|
|
bool _visible = false;
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
final inset = MediaQuery.viewInsetsOf(context).bottom;
|
|
|
|
if (inset != _lastInset) {
|
|
_lastInset = inset;
|
|
_visible = false;
|
|
|
|
if (inset > 0) {
|
|
WidgetsBinding.instance.addPostFrameCallback((_) {
|
|
if (mounted && MediaQuery.viewInsetsOf(context).bottom == inset) {
|
|
setState(() => _visible = true);
|
|
}
|
|
});
|
|
}
|
|
}
|
|
|
|
return Align(
|
|
alignment: Alignment.bottomRight,
|
|
child: Padding(
|
|
padding: EdgeInsets.only(bottom: inset),
|
|
child: Padding(
|
|
padding: const EdgeInsets.symmetric(vertical: 12, horizontal: 18),
|
|
child: AnimatedOpacity(
|
|
opacity: _visible ? 1 : 0,
|
|
duration: const Duration(milliseconds: 100),
|
|
child: GestureDetector(
|
|
onTap: () => FocusScope.of(context).unfocus(),
|
|
child: Container(
|
|
decoration: BoxDecoration(
|
|
color: Theme.of(context).colorScheme.primary,
|
|
borderRadius: BorderRadius.circular(999),
|
|
),
|
|
child: Padding(
|
|
padding: const EdgeInsets.all(8.0),
|
|
child: HashImageWidget(
|
|
imageUrl: "assets/new-ui/hide_keyboard.svg",
|
|
colorFilter: ColorFilter.mode(
|
|
Theme.of(context).colorScheme.onPrimary, BlendMode.srcIn),
|
|
),
|
|
)),
|
|
),
|
|
),
|
|
),
|
|
),
|
|
);
|
|
}
|
|
}
|