যেহেতু বিড়বিড় করে সমস্ত কিছু উইজেট, আমি একটি উইজেট এবং এতে একটি মিশ্রণ সহ একটি স্বল্প ইউটিলিটি মডিউলটিতে SystemChannels.textInput.invokeMethod('TextInput.hide');
এবং FocusScope.of(context).requestFocus(FocusNode());
পদ্ধতিটি মোড়ানোর সিদ্ধান্ত নিয়েছি ।
উইজেটের সাহায্যে আপনি যে কোনও উইজেটকে (একটি ভাল আইডিই সমর্থন ব্যবহার করার সময় খুব সুবিধাজনক) KeyboardHider
উইজেটের সাথে মোড়াতে পারেন :
class SimpleWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
return KeyboardHider(
/* Here comes a widget tree that eventually opens the keyboard,
* but the widget that opened the keyboard doesn't necessarily
* takes care of hiding it, so we wrap everything in a
* KeyboardHider widget */
child: Container(),
);
}
}
মিক্সিনের সাহায্যে আপনি কীবোর্ডটি কোনও রাজ্য থেকে লুকিয়ে ট্রিগার করতে পারেন বা যে কোনও মিথস্ক্রিয়া অনুসারে উইজেট:
class SimpleWidget extends StatefulWidget {
@override
_SimpleWidgetState createState() => _SimpleWidgetState();
}
class _SimpleWidgetState extends State<SimpleWidget> with KeyboardHiderMixin {
@override
Widget build(BuildContext context) {
return RaisedButton(
onPressed: () {
// Hide the keyboard:
hideKeyboard();
// Do other stuff, for example:
// Update the state, make an HTTP request, ...
},
);
}
}
কেবল একটি keyboard_hider.dart
ফাইল তৈরি করুন এবং উইজেট এবং মিক্সিন ব্যবহারের জন্য প্রস্তুত:
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
/// Mixin that enables hiding the keyboard easily upon any interaction or logic
/// from any class.
abstract class KeyboardHiderMixin {
void hideKeyboard({
BuildContext context,
bool hideTextInput = true,
bool requestFocusNode = true,
}) {
if (hideTextInput) {
SystemChannels.textInput.invokeMethod('TextInput.hide');
}
if (context != null && requestFocusNode) {
FocusScope.of(context).requestFocus(FocusNode());
}
}
}
/// A widget that can be used to hide the text input that are opened by text
/// fields automatically on tap.
///
/// Delegates to [KeyboardHiderMixin] for hiding the keyboard on tap.
class KeyboardHider extends StatelessWidget with KeyboardHiderMixin {
final Widget child;
/// Decide whether to use
/// `SystemChannels.textInput.invokeMethod('TextInput.hide');`
/// to hide the keyboard
final bool hideTextInput;
final bool requestFocusNode;
/// One of hideTextInput or requestFocusNode must be true, otherwise using the
/// widget is pointless as it will not even try to hide the keyboard.
const KeyboardHider({
Key key,
@required this.child,
this.hideTextInput = true,
this.requestFocusNode = true,
}) : assert(child != null),
assert(hideTextInput || requestFocusNode),
super(key: key);
@override
Widget build(BuildContext context) {
return GestureDetector(
behavior: HitTestBehavior.opaque,
onTap: () {
hideKeyboard(
context: context,
hideTextInput: hideTextInput,
requestFocusNode: requestFocusNode,
);
},
child: child,
);
}
}