阿里云 个人网站,旺道优化软件,tq网站建设,扬州市邗江区建设局网站一、这里记录下在开发过程中#xff0c;下单的时候输入金额需要使用自定义的数字键盘
参考链接: https://juejin.cn/post/7166046328609308685
效果图 二、屏蔽系统键盘 怎样才能够在输入框获取焦点的时候#xff0c;不让系统键盘弹出呢#xff1f;同时又显示我们自定义的…一、这里记录下在开发过程中下单的时候输入金额需要使用自定义的数字键盘
参考链接: https://juejin.cn/post/7166046328609308685
效果图 二、屏蔽系统键盘 怎样才能够在输入框获取焦点的时候不让系统键盘弹出呢同时又显示我们自定义的键盘呢 这里就需要自定义BinaryMessenger了 在这里拦截发送给系统显示键盘的消息这样就达到了不显示系统键盘的目的了
class TextInputBinaryMessenger extends BinaryMessenger {final BinaryMessenger origin;TextInputBinaryMessenger(this.origin);overrideFuturevoid handlePlatformMessage(String channel,ByteData? data,PlatformMessageResponseCallback? callback,) {return origin.handlePlatformMessage(channel, data, callback);}overrideFutureByteData?? send(String channel, ByteData? message) async {///拦截系统键盘if (channel SystemChannels.textInput.name) {final codec SystemChannels.textInput.codec;final methodCall codec.decodeMethodCall(message);if (methodCall.method TextInput.show) {final FocusNode? focusNode FocusManager.instance.primaryFocus;///使用了这个[CustomKeyboardFocusNode] 统一不显示系统键盘if (focusNode is CustomKeyboardFocusNode) {return codec.encodeSuccessEnvelope(null);}}}return origin.send(channel, message);}overridevoid setMessageHandler(String channel, MessageHandler? handler) {origin.setMessageHandler(channel, handler);}
}这里有个小技巧通过自定义一个FocusNode 这样在需要显示键盘的时候可以很轻松的判断当前需不需要显示系统的键盘。那现在就要做第二步了显示自己的键盘也很简单只需要监听输入框的焦点的变化来显示和隐藏键盘即可。
三、最后怎么使用上面自定义好的TextInputBinaryMessenger呢
如下代码
class CustomWidgetsFlutterBinding extends WidgetsFlutterBindingwith TextInputBindingMixin {///初始化static WidgetsBinding? ensureInitialized() {CustomWidgetsFlutterBinding();return WidgetsBinding.instance;}
}mixin TextInputBindingMixin on ServicesBinding {overrideBinaryMessenger createBinaryMessenger() {return TextInputBinaryMessenger(super.createBinaryMessenger());}
}最后只需要在程序入口初始化即可 void main() {CustomWidgetsFlutterBinding.ensureInitialized();runApp();
}