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

Flutter生产环境下TextFormField宽度为0或消失问题求助

问题排查与解决方案

你的问题核心是TextFormField在部分设备生产环境中宽度为0或消失,从代码和截图来看,布局嵌套中的IntrinsicWidth是主要诱因,结合Flutter布局约束的特性,以下是具体解决步骤:

关键问题点

searchInput方法中使用了IntrinsicWidth,这个组件会强制子组件先计算自身宽度,再反向确定父组件宽度。但你的子Container设置了width: double.infinity,依赖父组件的宽度约束,这就形成了布局计算循环——在部分设备的生产环境中,Flutter的布局引擎无法解析这种循环,最终导致组件宽度坍缩为0。

另外,AppBar的bottom部分嵌套了多层固定尺寸的SizedBox,也可能在特殊屏幕尺寸下约束传递异常。

修改方案

1. 移除IntrinsicWidth组件

直接删除searchInput中的IntrinsicWidth,让Container直接继承父组件的宽度约束:

Widget searchInput() {
  return Container(
    width: Get.size.width,
    height: 50,
    padding: const EdgeInsets.symmetric(horizontal: 15),
    child: Container(
      width: double.infinity,
      height: double.infinity,
      decoration: BoxDecoration(
        color: Colors.white,
        borderRadius: BorderRadius.circular(0),
        border: Border.all(color: Colors.grey.shade300),
      ),
      child: TextFormField(
        autofocus: true,
        controller: controller.searchController,
        onTap: () => controller.moved.value = true,
        onChanged: (value) => controller.search(value),
        decoration: InputDecoration(
          hintText: LocaleKeys.search_placeholder.tr,
          border: InputBorder.none,
          suffixIcon: IconButton(
            onPressed: () => Get.toNamed(Routes.BOOKMARKED),
            icon: const Icon(Icons.star),
          ),
          prefixIcon: controller.hiddenButton.value
              ? const Icon(Icons.search)
              : IconButton(
                  onPressed: () {
                    controller.hiddenButton.value = true;
                    controller.searchController.clear();
                    controller.words.clear();
                  },
                  icon: const Icon(Icons.close)),
        ),
      ),
    ),
  );
}

2. 简化AppBar的bottom布局

将AppBar底部的SizedBox简化,避免多余的固定宽度设置,让父组件自然传递约束:

bottom: PreferredSize(
  preferredSize: const Size.fromHeight(50.0), // 调整为输入框实际高度
  child: Obx(
    () => searchInput(),
  ),
),

3. 额外排查建议

  • 确保开发环境和生产环境使用相同版本的Flutter,部分布局问题可能是版本差异导致的;
  • 测试不同屏幕比例的设备(如折叠屏、窄屏手机),验证布局的自适应能力;
  • 检查controller.hiddenButton的状态更新逻辑,确保状态切换不会触发异常布局重绘。

内容的提问来源于stack exchange,提问作者Faiz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 20:50:28