import 'dart:io'; import 'package:fikoyt_ui/fikoyt_ui.dart'; import 'package:flutter/material.dart'; class TusYayilmasiEngelleWidget extends StatefulWidget { final Widget child; final bool Function(KeyEvent event) shouldBlockKey; const TusYayilmasiEngelleWidget({ super.key, required this.child, required this.shouldBlockKey, }); @override _TusYayilmasiEngelleWidgetState createState() => _TusYayilmasiEngelleWidgetState(); } class _TusYayilmasiEngelleWidgetState extends State with WidgetsBindingObserver { final FocusNode _focusNode = FocusNode(); bool _isFocused = false; @override void initState() { super.initState(); WidgetsBinding.instance.addObserver(this); _forceFocus(); } @override void dispose() { WidgetsBinding.instance.removeObserver(this); _focusNode.dispose(); super.dispose(); } @override void didChangeAppLifecycleState(AppLifecycleState state) { if (state == AppLifecycleState.resumed) { // debugPrint("App resumed, forcing focus..."); Future.delayed(const Duration(milliseconds: 0), _forceFocus); } } void _forceFocus() { WidgetsBinding.instance.addPostFrameCallback((_) { if (!mounted) return; if (!_isFocused) { // debugPrint("Requesting focus..."); FocusScope.of(context).unfocus(); // Önce diğer focus'u bırak _focusNode.requestFocus(); // Sonra kendi focus'unu al _isFocused = true; // setState(() {}); // Yeniden çizim tetikle } }); } KeyEventResult _handleKeyEvent(FocusNode node, KeyEvent event) { if (widget.shouldBlockKey(event)) { // debugPrint("Blocked key: ${event.logicalKey}"); return KeyEventResult.handled; // Tuşu alt widget'lara göndermiyoruz } return KeyEventResult.ignored; // Normal şekilde devam etsin } @override Widget build(BuildContext context) { return // BackButtonListener( // child: GestureDetector( onTap: _forceFocus, child: Focus( focusNode: _focusNode, autofocus: false, canRequestFocus: true, // Focus isteyebilir skipTraversal: true, // Focus geçişini engelleme onFocusChange: (value) => _isFocused = value, onKeyEvent: _handleKeyEvent, child: widget.child), ) // , // onBackButtonPressed: () async { // return _isFocused ? false : true; // }, // ) ; } }