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 '添加一个文本框。'
相关推荐
ekskef_sef42 分钟前
32岁前端干了8年,是继续做前端开发,还是转其它工作
前端
sunshine6411 小时前
【CSS】实现tag选中对钩样式
前端·css·css3
真滴book理喻1 小时前
Vue(四)
前端·javascript·vue.js
蜜獾云2 小时前
npm淘宝镜像
前端·npm·node.js
dz88i82 小时前
修改npm镜像源
前端·npm·node.js
Jiaberrr2 小时前
解锁 GitBook 的奥秘:从入门到精通之旅
前端·gitbook
顾平安3 小时前
Promise/A+ 规范 - 中文版本
前端
聚名网3 小时前
域名和服务器是什么?域名和服务器是什么关系?
服务器·前端
桃园码工3 小时前
4-Gin HTML 模板渲染 --[Gin 框架入门精讲与实战案例]
前端·html·gin·模板渲染
不是鱼3 小时前
构建React基础及理解与Vue的区别
前端·vue.js·react.js