31 lines
1.0 KiB
Dart
31 lines
1.0 KiB
Dart
import 'package:flutter/material.dart';
|
|
|
|
/// Utility class untuk mengelola keyboard dengan lebih baik
|
|
class KeyboardUtils {
|
|
/// Meminta fokus ke field tertentu
|
|
static void requestFocus(BuildContext context, FocusNode focusNode) {
|
|
FocusScope.of(context).requestFocus(focusNode);
|
|
}
|
|
|
|
/// Menutup keyboard hanya jika sedang terbuka dan tidak ada field yang difokuskan
|
|
static void dismissKeyboardIfNeeded(BuildContext context) {
|
|
final currentFocus = FocusScope.of(context);
|
|
if (!currentFocus.hasPrimaryFocus && currentFocus.focusedChild != null) {
|
|
FocusManager.instance.primaryFocus?.unfocus();
|
|
}
|
|
}
|
|
|
|
/// Menutup keyboard dengan paksa
|
|
static void forceCloseKeyboard() {
|
|
FocusManager.instance.primaryFocus?.unfocus();
|
|
}
|
|
|
|
/// Menambahkan padding untuk menghindari keyboard
|
|
static EdgeInsets keyboardAvoidingPadding(BuildContext context) {
|
|
final keyboardHeight = MediaQuery.of(context).viewInsets.bottom;
|
|
return EdgeInsets.only(
|
|
bottom: keyboardHeight > 0 ? keyboardHeight + 20 : 0,
|
|
);
|
|
}
|
|
}
|