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

如何阻止TextField选中时终端重复输出D/EGL_emulation日志?

解决Flutter模拟器TextField选中时日志冗余及光标重渲染问题

一、抑制app_time_stats冗余日志输出

你看到的D/EGL_emulation...是Android模拟器的EGL性能统计日志,属于调试级别的冗余信息,可通过以下方式过滤:

  • Android Studio Logcat过滤:打开Logcat面板,在搜索框输入 -tag:app_time_stats(注意前面的减号),直接排除该标签的日志;或者将日志级别调整为Warning及以上,自动忽略Debug级别的无关信息。
  • 命令行adb过滤:执行adb logcat *:W命令启动日志监听,仅显示警告、错误及更高级别的日志,不再输出app_time_stats这类Debug信息。

二、优化光标重渲染问题

持续输出该日志通常意味着TextField获取焦点后存在频繁重绘,可通过以下优化减少不必要的渲染:

1. 标记静态Widget为const

在你的代码中,将无需动态变化的Widget标记为const,避免每次build时重复创建实例:

// 修改前
SizedBox(height: 50),
// 修改后
const SizedBox(height: 50),

// TextField的Icon也可添加const修饰
prefixIcon: const Icon(Icons.email),

2. 封装TextField为独立组件

将登录页的两个TextField抽成单独的StatelessWidget,避免因父组件build导致TextField重复重建:

class AuthTextField extends StatelessWidget {
  final TextEditingController controller;
  final IconData icon;
  final String hintText;
  final bool obscureText;
  final TextInputType keyboardType;

  const AuthTextField({
    super.key,
    required this.controller,
    required this.icon,
    required this.hintText,
    this.obscureText = false,
    required this.keyboardType,
  });

  @override
  Widget build(BuildContext context) {
    return Container(
      decoration: BoxDecoration(
        color: Colors.black38,
        borderRadius: BorderRadius.circular(8),
      ),
      child: TextField(
        controller: controller,
        obscureText: obscureText,
        keyboardType: keyboardType,
        decoration: InputDecoration(
          prefixIcon: Icon(icon),
          hintText: hintText,
          border: InputBorder.none,
        ),
      ),
    );
  }
}

在LoginPage中替换原TextField代码:

AuthTextField(
  controller: emailController,
  icon: Icons.email,
  hintText: "Email",
  keyboardType: TextInputType.emailAddress,
),
const SizedBox(height: 20),
AuthTextField(
  controller: passwordController,
  icon: Icons.lock,
  hintText: "Password",
  obscureText: true,
  keyboardType: TextInputType.text,
),

3. 避免不必要的状态触发

检查是否存在导致LoginPage频繁build的因素:比如父组件是否频繁更新状态、Ccolors.bgColor是否为动态值而非静态常量,这些都会引发不必要的重绘。

4. 固定光标颜色配置

显式指定光标颜色,避免系统默认的动态计算逻辑:

TextField(
  // ...其他配置
  cursorColor: Colors.white, // 根据UI风格设置固定颜色
),

三、额外建议

调试完成后,建议移除或注释代码中的print语句,进一步减少终端冗余输出:

// if(fetchedData['code'] == 404){
//   print("-----------------404--------------------");
//   return false;
// }

// print("Status code:  ${response.statusCode}");
// print(fetchedData['data']);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 19:30:35