admin
2022-05-05 355fe96b2a4c7821256d9e8828d2cb9539904878
flutter_module/lib/ui/widget/verification_box.dart
@@ -9,9 +9,10 @@
///SOS雷达扫描View
class VerificationBox extends StatefulWidget {
  final int length;
  final double width;
  final VerificationBoxController controller;
  VerificationBox(this.length, this.controller);
  VerificationBox(this.length, this.controller, {required this.width});
  @override
  _VerificationBoxState createState() => _VerificationBoxState();
@@ -19,7 +20,7 @@
class _VerificationBoxState extends State<VerificationBox>
    with WidgetsBindingObserver {
  TextEditingController _controller = TextEditingController();
  final TextEditingController _controller = TextEditingController();
  String content = "";
  final FocusNode _focusNode = FocusNode();
  bool isKeyboardActived = false;
@@ -27,8 +28,8 @@
  @override
  void initState() {
    super.initState();
    WidgetsBinding.instance!.addObserver(this);
    widget.controller.controller = _controller;
    _controller.addListener(() {
      setState(() {
        print("listener:");
@@ -44,18 +45,20 @@
        }
      });
    });
    WidgetsBinding.instance!.addObserver(this);
  }
  @override
  void dispose() {
    super.dispose();
    WidgetsBinding.instance!.removeObserver(this);
    isKeyboardActived = false;
    _focusNode.unfocus();
  }
  @override
  void didChangeMetrics() {
    print("didChangeMetrics isKeyboardActived:$isKeyboardActived");
    super.didChangeMetrics();
    WidgetsBinding.instance!.addPostFrameCallback((_) {
      // 当前是安卓系统并且在焦点聚焦的情况下
@@ -75,6 +78,7 @@
  Widget build(BuildContext context) {
    return GestureDetector(
        onTap: () {
          print("点击事件,输入框获取焦点:${_focusNode.hasFocus}");
          FocusScope.of(context).requestFocus(_focusNode);
        },
        child: Stack(
@@ -91,8 +95,8 @@
                          RegExp("[a-zA-Z]|[0-9]")),
                      LengthLimitingTextInputFormatter(widget.length),
                    ],
                    style: TextStyle(fontSize: 1, color: Colors.transparent),
                    decoration: InputDecoration(
                    style: const TextStyle(fontSize: 1, color: Colors.transparent),
                    decoration: const InputDecoration(
                        border: InputBorder.none,
                        focusedBorder: InputBorder.none,
                        focusColor: Colors.transparent),
@@ -100,10 +104,12 @@
                    focusNode: _focusNode,
                    autofocus: false,
                    controller: _controller)),
            Row(
              mainAxisAlignment: MainAxisAlignment.spaceBetween,
              children: getItems(),
            )
            SizedBox(
                width: widget.width,
                child: Row(
                  mainAxisAlignment: MainAxisAlignment.spaceBetween,
                  children: getItems(),
                ))
          ],
        ));
  }
@@ -118,10 +124,13 @@
  }
  Widget getItem(int index) {
    double width = (widget.width - 10 * widget.length - 1) / widget.length;
    //TODO 传入宽度计算
    return Container(
      alignment: Alignment.center,
      width: 36,
      height: 45,
      width: width,
      height: width * 1.25,
      decoration: BoxDecoration(
          color: const Color(0xFFEFEFEF),
          borderRadius: BorderRadius.circular(13)),
@@ -139,10 +148,10 @@
class VerificationBoxController {
  VerificationBoxController();
  TextEditingController? _controller = null;
  TextEditingController? _controller;
  set controller(TextEditingController? controller) {
    this._controller = controller;
    _controller = controller;
  }
  String get text => (_controller == null ? "" : _controller!.text);