设置纯数字键盘:
keyboardType: const TextInputType.numberWithOptions(decimal: true),
事件类:
import 'package:flutter/cupertino.dart';
import 'package:giftbook/base/InputDoneView.dart';
class KeyboardOverlay{
static OverlayEntry? _overlayEntry;
static showOverlay(BuildContext context) {
if(_overlayEntry != null) {
return;
}
OverlayState? overlayState = Overlay.of(context);
_overlayEntry = OverlayEntry(builder: (context) {
return Positioned(
bottom: MediaQuery.of(context).viewInsets.bottom,
right: 0.0,
left: 0.0,
child: const InputDoneView());
});
overlayState!.insert(_overlayEntry!);
}
static removeOverlay() {
if (_overlayEntry != null) {
_overlayEntry!.remove();
_overlayEntry = null;
}
}
}
视图类:
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
class InputDoneView extends StatelessWidget {
const InputDoneView({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Container(
width: double.infinity,
color: CupertinoColors.extraLightBackgroundGray,
child: Align(
alignment: Alignment.topRight,
child: Padding(
padding: const EdgeInsets.only(top: 4.0, bottom: 4.0),
child: CupertinoButton(
padding: const EdgeInsets.only(
right: 24.0, top: 8.0, bottom: 8.0),
onPressed: () {
FocusScope.of(context).requestFocus(FocusNode());
},
child: const Text("Done",
style: TextStyle(color: CupertinoColors.activeBlue,)
),
),
)
)
);
}
}
3.使用
FocusNode numberFocusNode = FocusNode();
numberFocusNode.addListener(() {
bool hasFocus = numberFocusNode.hasFocus;
if (hasFocus) {
KeyboardOverlay.showOverlay(context);
} else {
KeyboardOverlay.removeOverlay();
}
});
numberFocusNode.dispose();
focusNode: numberFocusNode,