Flutter 3 基础08: 添加文本框

在前两篇文章中,我们为页面添加了一个按钮并优化了代码质量,可以让我们更健壮地添加更多部件。

本文将继续为部件页面增添一个新的部件------文本框,进一步丰富页面。

启动 Android Studio,打开 hello_world 项目,运行虚拟机,这样就可以实时看到编码产生的效果。现在,我们依然只能看到部件页面的绿色按钮。

添加文本输入控件

  1. 在 lib/widget 文件夹下,打开 my_button.dart 文件,定位到下列代码:
dart 复制代码
return MaterialButton(  
  textColor: Colors.white,  
  color: Colors.green,  
  shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(30.0)),  
  onPressed: () {  
    print('按钮被点击');  
  },  
  child: const Text('显示'),  
);

并替换为以代码:

dart 复制代码
return Column(  
  children: [  
    const TextField(),  
    MaterialButton(  
      textColor: Colors.white,  
      color: Colors.green,  
      shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(30.0)),  
      onPressed: () {  
        print('按钮被点击');  
      },  
      child: const Text('显示'),  
    )  
  ],  
);

这里,我们需要返回文本框和按钮两个部件,所以使用了一个列布局容器 Column 进行包装。 Column 会将放入其中的子部件进行竖直排列,因此,我们的文本框会位于按钮的上方。

热重启项目,可以看到,文本框已经出现在部件页面上:

设置容器填充

通过观察页面我们发现,文本框与页面两侧紧挨在一起,不利于用户操作和阅读内容。现在我们来增加一些间隙。

在 main.dart 文件中,定位到以下列码:

dart 复制代码
child: const MyButton()),

在这行代码的上面,添加下面的代码:

dart 复制代码
padding: const EdgeInsets.all(8.0),

这里,我们为容器的四边添加了 8 像素的填充,避免容器与其子部件紧贴在一起。

热重启项目。我们可以看到,文本框左右两端与页面两侧边界之间留出了空白。

美化文本框

如果你觉得文本框的默认样式(像极了下划线)不太像一个"框",我们可以进行一些优化。

在 my_button.dart 文件中,定位到下列代码:

dart 复制代码
const TextField(),

并替换为以下代码:

dart 复制代码
const TextField(  
  decoration: InputDecoration(  
      border: OutlineInputBorder(),  
      hintText: "请输入一些文字。"),  
),

这里,我们通过文本框的 decoration 属性,其值是一个 InputDecoration 类的实例,用来装饰文本框:

  • border: 设置文本框的边框样式。
  • hintText: 设置文本框的输入提示文字,即占位符。

热重启项目。我们可以看到,文本框变身为圆角矩形框并提示用户输入一些内容。

重构按钮文件

这时候,我们发现 my_button.dart 文件已经混入了文本框,不单纯是按钮代码了,而且会加入更多部件。因此,我们需要进行重命名操作,与文件内容匹配。

  • 把 my_button.dart 重命名为 my_widgets.dart.
  • 把 MyButton 重命名为 MyWidgets.

重命名操作详细步骤,可以参考 Flutter 3 基础03: 初始化"自己"的 Flutter 项目

提交代码

我们已经完成了文本框的添加,又到达了一个小小的里程碑,应该对代码进行提交,保持良好编程习惯。

shell 复制代码
git add .
git commit -m '添加一个文本框。'
相关推荐
古茗前端团队2 小时前
由 key 引发的思考
前端·javascript·react.js
kyriewen3 小时前
我扫了 422 个仓库,近一半 CI 在裸装依赖
前端·javascript·程序员
鹏多多3 小时前
AI 到底能不能独立做个产品?我拿一个小程序验证了
前端·微信小程序·ai编程
火山引擎开发者社区3 小时前
构建专属的飞书群开发助手,AgentKit Studio 一键部署 DeepSeek Harness Super-Agent
前端
啾咪orJIUMI5 小时前
Vue 3 + 高德地图封装实战:点位、区域、Loca 流光与 Vue 信息窗体
前端·vue.js
掘金者阿豪5 小时前
AI数据库不只是向量检索:从数据语义到库内智能计算的技术演进
前端
梦里寻码5 小时前
我用 NestJS + Vue3 写了一套完整的研发管理系统(58 表 / 229 API / 130 项断言,全开源
前端·后端·算法
FRing035 小时前
vue2干货总结8(路由模块封装、router-link、声明式导航、路由重定向、编程式导航)
开发语言·前端·vue.js·vue2
SameX5 小时前
HarmonyOS ArkUI Dialog 复用 用 @CustomDialog + enum type 做多类型统一管理的做法
前端
AiMan6 小时前
豆包爱学还是不可以导出左侧所有对话,只能单容导出,方法不对吗
前端