Aves_mio0.88/lib/widgets/common/dialogs/miui_safe_dialog.dart
2026-10-03 12:51:15 +02:00

81 lines
2.1 KiB
Dart

import 'package:flutter/material.dart';
import 'dart:io';
Future<T?> showMiuiSafeDialog<T>({
required BuildContext context,
required Widget Function(BuildContext dialogContext) builder,
bool barrierDismissible = true,
}) {
return showDialog<T>(
context: context,
barrierDismissible: barrierDismissible,
builder: (dialogContext) => builder(dialogContext),
);
}
class MiuiSafeTextDialog extends StatelessWidget {
final String title;
final String label;
final String hint;
final String initialText;
const MiuiSafeTextDialog({
super.key,
required this.title,
required this.label,
required this.hint,
required this.initialText,
});
@override
Widget build(BuildContext context) {
final controller = TextEditingController(text: initialText);
final focusNode = FocusNode();
// ⭐ MIUI-safe: piccolo delay per evitare blocco input
Future.microtask(() async {
if (!context.mounted) return;
final delay = Platform.isAndroid ? const Duration(milliseconds: 30) : Duration.zero;
await Future.delayed(delay);
if (!context.mounted) return;
FocusScope.of(context).requestFocus(focusNode);
});
return AlertDialog(
title: Text(title),
content: TextField(
controller: controller,
focusNode: focusNode,
autofocus: false,
textInputAction: TextInputAction.done,
decoration: InputDecoration(
labelText: label,
hintText: hint,
),
onSubmitted: (_) {
if (!context.mounted) return;
Navigator.of(context).pop(controller.text.trim());
},
),
actions: [
TextButton(
onPressed: () {
if (!context.mounted) return;
Navigator.of(context).pop();
},
child: const Text('Annulla'),
),
TextButton(
onPressed: () {
if (!context.mounted) return;
Navigator.of(context).pop(controller.text.trim());
},
child: const Text('Salva'),
),
],
);
}
}