Flutter入门:Text问题集锦

简介: 在Row中使用TextField出错当我们在一个Row组件中添加一个TextField

在Row中使用TextField出错


当我们在一个Row组件中添加一个TextField,如:


Row(
    children: <Widget>[
      TextField(),
      FlatButton(
        child: Text("go"),
      ),
    ],
  )
复制代码


运行时就会报错

Failed assertion: line 910 pos 7: 'layoutConstraints.maxWidth < double.infinity'

根据网上的经验,需要在TextField外包一层Expanded,如:


Row(
    children: <Widget>[
      Expanded(
        child: TextField(),
      ),
      FlatButton(
        child: Text("go"),
      ),
    ],
  )
复制代码


这样就不会出错了。

Expanded的作用是让组件完全展开,我们通过一个效果图来了解它的作用

网络异常,图片无法展示
|


中间的红色区域本身只是一个Text,现在是外面包了一层Expanded,这样就使它展开,除去上下其他固定高度的组件,它填充了剩下的所有高度。

如果我们去掉Expanded,那么结果就是

网络异常,图片无法展示
|


因为Text没有内容,所以实际高度是0,红色区域消失了。当然如果有内容的话,红色区域还是会显示,但只是内容高度,不会扩展。

所以Expanded的大部分都是与Column或Row配合使用的,目前是充满区域。


文字阴影效果


Text(
    "恭喜获得",
    style: TextStyle(
      fontSize: 26,
      fontWeight: FontWeight.bold,
      color: Color(0xFFFFE38B),
      shadows: <Shadow>[
        Shadow(
          offset: Offset(0, 1.5),
          blurRadius: 0,
          color: Color(0xffe31e00),
        )
      ]
    ),
  ),
复制代码


在style中添加shadows即可,shadows是一个List<ui.Shadow>类型,所以可以是多个阴影效果叠加在一起的。

Shadow有三个属性:

  • offset:分别是x和y的偏移量(正数是向右向下偏移)
  • blurRadius:模糊度
  • color:阴影颜色


字体垂直方向不居中


Text(
  "111",
  style: TextStyle(wordSpacing:0),
),
复制代码


这个其实在android平台也有类似的问题,因为默认情况下显示的字体上方有一定的空白,这样尤其在与图片是同一行的时候,就会发现虽然都设置的是垂直居中,当时文字明显稍微靠下一点。

原因就是上方的空白,在flutter可以通过wordSpacing改变这个。

另外还有一个letterSpacing则是每个字或字母之间的间距(水平的)。


文字显示不全


在flutter中,尤其是row或column中,Text显示文字不全,下面少了一点。(windows上更严重,几乎所有Text都有这种现象)

而这些Text并没有设置高度,所以它们的高度应该是根据文字高度动态的。但是还是出现上面的现象。

解决方法与第一个问题一样,将wordSpacing设置成0即可。

但是因为使用Text的地方太多了,没法一个个修改,所以可以全局设置字体样式,在MaterialApp中,如下:


MaterialApp(
  title: title,
  theme: ThemeData(
    ...
    textTheme: TextTheme(
      bodyText1: TextStyle(wordSpacing: 0),
      bodyText2: TextStyle(wordSpacing: 0),
      headline1: TextStyle(wordSpacing: 0),
      headline2: TextStyle(wordSpacing: 0),
      headline3: TextStyle(wordSpacing: 0),
      headline4: TextStyle(wordSpacing: 0),
      headline5: TextStyle(wordSpacing: 0),
      headline6: TextStyle(wordSpacing: 0),
      subtitle1: TextStyle(wordSpacing: 0),
      subtitle2: TextStyle(wordSpacing: 0),
      button: TextStyle(wordSpacing: 0),
      caption: TextStyle(wordSpacing: 0),
      overline: TextStyle(wordSpacing: 0),
    )
  ),
  ...
);
复制代码


可以看到在theme中设置textTheme即可,在这里面有很多种类,我们全部都设置一遍,因为大部分情况下这样显示最优。

那么如果向上面那样,Text又单独设置了style,这个textTheme还会起作用么?

答案是可以,通过源码可以得知,Text(其他widget也类似)中其实是存在一个merge操作的,代码如下:


Widget build(BuildContext context) {
    final DefaultTextStyle defaultTextStyle = DefaultTextStyle.of(context);
    TextStyle effectiveTextStyle = style;
    if (style == null || style.inherit)
      effectiveTextStyle = defaultTextStyle.style.merge(style);
    ...
  }
复制代码


可以看到在一开始,将defaultTextStyle和我们单独为这个Text设置的style进行了merge,然后才设置样式,所以只要程序里没有覆盖这个属性,那么就会一直起作用。

上面的app样式还有更多配置,可以提前设定,减少后续的代码和配置,方便全局更改。


目录
相关文章
|
存储 缓存 Dart
[Flutter]足够入门的Dart语言系列之面向对象:类成员的可见性、常量和工厂构造函数详解
类和成员的可见性,这在基于库或包的开发中非常重要,Dart中提供了工厂构造函数,可以方便的实现单例、缓存实例对象、返回子类等,以及常量构造函数的使用......
458 0
[Flutter]足够入门的Dart语言系列之面向对象:类成员的可见性、常量和工厂构造函数详解
|
Dart 前端开发 开发工具
【Flutter前端技术开发专栏】Flutter入门指南:搭建开发环境与第一个应用
【4月更文挑战第30天】本文介绍了Flutter SDK的安装和配置过程,以及如何创建并运行第一个Flutter应用。首先确保安装了Dart SDK和Flutter SDK,支持macOS、Linux和Windows。安装完成后,设置环境变量,然后通过`flutter doctor`验证安装。接着,使用`flutter create`命令创建新项目,进入项目目录并运行`flutter run`启动应用。在`main.dart`中修改代码以自定义应用。Flutter支持热重载和DevTools调试。本文为Flutter初学者提供了快速入门的指导。
381 0
【Flutter前端技术开发专栏】Flutter入门指南:搭建开发环境与第一个应用
|
开发框架 移动开发 Android开发
安卓与iOS开发中的跨平台解决方案:Flutter入门
【9月更文挑战第30天】在移动应用开发的广阔舞台上,安卓和iOS两大操作系统各自占据半壁江山。开发者们常常面临着选择:是专注于单一平台深耕细作,还是寻找一种能够横跨两大系统的开发方案?Flutter,作为一种新兴的跨平台UI工具包,正以其现代、响应式的特点赢得开发者的青睐。本文将带你一探究竟,从Flutter的基础概念到实战应用,深入浅出地介绍这一技术的魅力所在。
299 7
|
Dart 前端开发 JavaScript
Flutter&Dart-异步编程Future、Stream极速入门
Flutter&Dart-异步编程Future、Stream极速入门
234 4
Flutter&Dart-异步编程Future、Stream极速入门
|
容器
Flutter基本组件Text使用
Flutter基本组件Text使用
226 13
|
开发框架 Dart Java
Flutter入门进阶之旅(一)-初识Flutter
Flutter 的目标是用来创建高性能、高稳定性、高帧率、低延迟的 Android 和 iOS 应用。并且开发出来的应用在不同的平台用起来跟原生应用具有一样的体验。不同的平台的原生体验应该得到保留,让该应用看起来同整个系统更加协调。不同平台的滚动操作、字体、图标 等特殊的特性 应该和该平台上的其他应用保持一致,让用户感觉就像操作原生应用一样。
174 1
|
Kubernetes Cloud Native 搜索推荐
探索云原生技术:Kubernetes入门与实践打造个性化安卓应用:从零开始的Flutter之旅
【8月更文挑战第31天】云原生技术正改变着应用开发和部署的方式。本文将带你了解云原生的基石——Kubernetes,通过实际的代码示例,从安装到部署一个简单的应用,让你迅速掌握Kubernetes的核心概念和操作方法。无论你是初学者还是有一定经验的开发者,这篇文章都将成为你进入云原生世界的桥梁。
|
Dart 搜索推荐
Flutter入门进阶之旅(二)Hello Flutter
好像几乎我们学习或者掌握任何一门编程语言都是Hello word开始的,本篇博文做为Flutter入门进阶的第一篇分享,我们也从最简单的Hello world开始,至于Flutter开发环境的配置,跟关于Dart语言的介绍,不是该专栏要讲解的内容,我就不详细做介绍了,读者可自行google或者百度了解一下。
155 0
|
数据库 Android开发
Android数据库框架-GreenDao入门,2024年最新flutter 页面跳转动画
Android数据库框架-GreenDao入门,2024年最新flutter 页面跳转动画
Android数据库框架-GreenDao入门,2024年最新flutter 页面跳转动画
|
移动开发 小程序 安全
基础入门-APP架构&小程序&H5+Vue语言&Web封装&原生开发&Flutter
基础入门-APP架构&小程序&H5+Vue语言&Web封装&原生开发&Flutter
268 0
下一篇
oss云网关配置