【问题标题】:OverlyEntry rebuild when interact with textformfeild widget in flutter?在 flutter 中与 textformfeild 小部件交互时 OverlyEntry 重建?
【发布时间】:2022-12-17 11:53:46
【问题描述】:

我创建了一个基本的 OverlyEntry。

我创建了一个基本的 OverlayEntry 来显示一些类似搜索的想法,当我仍然在 textfromfield 中编写时仍然重建 overlayentry 构建器以及当尝试打开 dropDownButton 重建时。

我试图修复它,但无论如何它都不起作用。

final FocusNode _focusNode = FocusNode();
final GlobalKey globalKey = LabeledGlobalKey('OverlayEntry');

--

@override
  void initState() {
    _focusNode.addListener(() {
      if (_focusNode.hasFocus) {
        print('showed');
        _overlayEntry = _createOverlayEntry();
        Overlay.of(context)!.insert(_overlayEntry);
      } else {
        _overlayEntry.remove();
      }
    });
  }

--

OverlayEntry _createOverlayEntry() {
    RenderBox renderBox = globalKey.currentContext!.findRenderObject() as RenderBox;
    var size = renderBox.size;
    var offset = renderBox.localToGlobal(Offset.zero);

    return OverlayEntry(
      maintainState: true,
      builder: (context) {
      print('OverlayEntry');
      return Builder( 
        builder: (context) {
          return Positioned(
            left: offset.dx,
            top: offset.dy + size.height + 5.0,
            width: size.width,
            child: Material(
              elevation: 4.0,
              child: ListView(
                padding: EdgeInsets.zero,
                shrinkWrap: true,
                children: const [
                  ListTile(
                    title: Text('Syria'),
                  ),
                  ListTile(
                    title: Text('Lebanon'),
                  ),
                  ListTile(
                    title: Text('Lebanon'),
                  ),ListTile(
                    title: Text('Lebanon'),
                  )
                ],
              ),
            ),
          );
        }
      );
    });
  }

--

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        widthFactor: 50,
        child: TextFormField(
          key: globalKey,
          focusNode: _focusNode,
          decoration: const InputDecoration(labelText: 'Country'),
        ),
      ),
    );
  }

【问题讨论】:

    标签: flutter widget rebuild


    【解决方案1】:

    使用状态管理工具,事件和函数写在状态管理工具上

    【讨论】:

      猜你喜欢
      • 2021-06-05
      • 2019-08-23
      • 1970-01-01
      • 2020-07-25
      • 1970-01-01
      • 1970-01-01
      • 2021-10-29
      • 2020-08-02
      • 1970-01-01
      相关资源
      最近更新 更多