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 '添加一个文本框。'
相关推荐
过期的H2O29 分钟前
【H2O2|全栈】关于CSS(4)CSS基础(四)
前端·css
纳尼亚awsl23 分钟前
无限滚动组件封装(vue+vant)
前端·javascript·vue.js
八了个戒28 分钟前
【TypeScript入坑】TypeScript 的复杂类型「Interface 接口、class类、Enum枚举、Generics泛型、类型断言」
开发语言·前端·javascript·面试·typescript
西瓜本瓜@30 分钟前
React + React Image支持图像的各种转换,如圆形、模糊等效果吗?
前端·react.js·前端框架
黄毛火烧雪下31 分钟前
React 的 useEffect 钩子,执行一些异步操作来加载基本信息
前端·chrome·react.js
蓝莓味柯基37 分钟前
React——点击事件函数调用问题
前端·javascript·react.js
资深前端之路38 分钟前
react jsx
前端·react.js·前端框架
cc蒲公英1 小时前
vue2中使用vue-office库预览pdf /docx/excel文件
前端·vue.js
Sam90291 小时前
【Webpack--013】SourceMap源码映射设置
前端·webpack·node.js
小兔崽子去哪了1 小时前
Element plus 图片手动上传与回显
前端·javascript·vue.js