You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter 3.7.0中FocusTrap组件已移除,求替代方案(附Pinput示例)

Flutter 3.7.0 移除 FocusTrap 后的替代方案

Flutter 3.7.0 正式移除了FocusTrap组件,你可以通过**FocusTraversalGroup + FocusScope**的组合实现原组件的核心功能——将焦点限定在指定子组件树内,这也是官方推荐的替代方案。

替代方案说明

  • FocusTraversalGroup:定义焦点遍历的边界,焦点在遍历过程中不会跳出这个组的范围
  • FocusScope:管理指定范围内的焦点状态,可绑定自定义的focusNode,对应原FocusTrap的focusNode参数

修改后的Pinput库示例代码

将原代码中的FocusTrap替换为上述组合即可,完整代码如下:

return _PinputFormField(
  enabled: isEnabled,
  validator: _validator,
  child: FocusTraversalGroup(
    child: FocusScope(
      node: effectiveFocusNode,
      child: MouseRegion(
        cursor: _effectiveMouseCursor,
        onEnter: (PointerEnterEvent event) => _handleHover(true),
        onExit: (PointerExitEvent event) => _handleHover(false),
        child: IgnorePointer(
          ignoring: !isEnabled || !widget.useNativeKeyboard,
          child: AnimatedBuilder(
            animation: _effectiveController,
            builder: (_, Widget? child) => Semantics(
              maxValueLength: widget.length,
              currentValueLength: _currentLength,
              onTap: widget.readOnly ? null : _semanticsOnTap,
              onDidGainAccessibilityFocus: handleDidGainAccessibilityFocus,
              child: child,
            ),
            child: _gestureDetectorBuilder.buildGestureDetector(
              behavior: HitTestBehavior.translucent,
              child: Stack(
                alignment: Alignment.topCenter,
                children: [
                  _buildEditable(textSelectionControls),
                  _buildFields(),
                ],
              ),
            ),
          ),
        ),
      ),
    ),
  ),
);

额外说明

如果需要更贴近原FocusTrap的API体验,也可以使用第三方包focus_trap,但优先推荐官方原生方案以减少依赖。

内容的提问来源于stack exchange,提问作者Ушаков Владимир

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 10:45:34