Flutter中的文本输入框使用TextField 这个组件来表示。 主要的属性如下: 1. maxLines 最大输入行。...默认为单行输入框,配置此参数后则为多行输入框; 2. onChanged 输入改变触发的事件。可以获取当前输入改变以后的值; 3. obscureText 隐蔽的文本。...类似HTML中的 placeholder; (2). border 文本边框。...:flutter/material.dart'; class TextFieldPage extends StatelessWidget { const TextFieldPage({Key...给输入框加上默认的值,代码如下: import 'package:flutter/material.dart'; class TextFieldPage extends StatefulWidget
TextField 组件几乎是开发中必然会用到的一个组件,在使用的过程中会遇到两个非常棘手的问题: 字数统计异常。 设置高度,文字无法居中。...❞ 下面说下如何修复这个问题,关键是 TextField 中 「controller.value.composing」 这个属性,官方文档说明: ❝The range of text that is still...」 的基本用法,为了方便定位文字是否居中,给 「TextField」 加上边框: TextField( decoration: InputDecoration( enabledBorder:...下面改变 TextField 的高度: Container( height: 30, child: TextField( decoration: InputDecoration(...TextField的高度 和 文字高度共同决定的,公式是: ❝「( TextField的高度 - 文字高度)/2」 ❞ 我们需要计算出文字的高度: TextStyle _style = const
在 Flutter 里 TextField 是一个比较复杂的控件,而在整个 TextField 里嵌套了许多不同实现的控件,它们组成了我们常用的输入框效果,如下图所示是关于 TextField 的主要构成部分...例如在 _TextFieldSelectionGestureDetectorBuilder 中,可以看到 onSingleTapUp 的处理流程: image 如上代码所示: 1、收起已经弹出的 Toolbar...,那恭喜你,你开启了 Flutter 高级开发的修炼之路。...所以本篇主要是通过介绍 TextField 的组成,以及解释内部各组成部分的作用,让开发者可以更清晰的了解 Flutter 里常用的文本输入框的实现,当遇上问题或者需求时,可以快速定位和解决问题,例如:...最后介绍一个简单的问题,之前有人刚好问我:如何在 Flutter 上实现类似微信聊天输入框从一行到多行的输入框效果,如下图代码所示,就是这么简单: TextField( focusNode: _focusNode
)) ), ], ), ), ); } } ---- Button Widget(按钮) Material 库中的按钮点击时默认带有...NetworkImage:从网络记载图片的 ImageProvider AssetImage(加载本地图片) 工程根目录下创建文件夹 images 存放图片文件 在 pubspec.yaml 文件中...flutter 部分添加图片注册信息 flutter: # The following line ensures that the Material Icons font is # included...uses-material-design: true assets: - images/image_widget_test.jpg 在 widget 中设置加载本地图片 Image.asset(...this.width, //图片的宽 this.height, //图片高度 this.color, //图片的混合色值 this.colorBlendMode, //混合模式 this.fit
大家好,又见面了,我是你们的朋友全栈君。...var t_name:TextField = new TextField; trace(t_name.height); trace(t_name.width); 这样打印出来的高度都是100PX,是系统默认的...如果文本中包括换行符(例如 “\n” 或 “\r”),则会另外调整底边来适合文本的下一行。如果 wordWrap 也设置为 true,则仅调整文本字段的底边,而右边距保持固定。...如果文本中包括换行符(例如 “\n” or “\r”)),则会另外调整底边来适合文本的下一行。如果 wordWrap 也设置为 true,则仅调整文本字段的底边,而左边距保持固定。...如果文本中包括换行符(例如 “\n” 或 “\r”),则会另外调整底边来适合文本的下一行。如果 wordWrap 也设置为 true,则仅调整文本字段的底边,而左右边距保持固定。
https://blog.csdn.net/u010105969/article/details/48895361 在Xcode中的textField中输入中文: 依次选择:Xcode
本文内容主要翻译自Keys in Flutter, 最初翻译动机是原作者写的比较通俗,其次 key 知识点在 Flutter 中比较重要,但在翻译过程中发现不配合相关源码很难理解作者意思而且看完容易忘,...---- 在使用 Flutter 时,我们经常会遇到一个叫做 Key 的东西。Key 是 Flutter 中几乎所有 widget 都具有的属性。但它并不常用而容易被忽视。...当渲染 widget 时,Flutter 不仅会构建 widget 树,同时也会构建其对应的元素树。元素树持有 widget 树中 widget 的信息及其子 widget 的引用。...在修改和重新渲染的过程中,Flutter 查找元素树以查看其是否已改变,以便在元素未改变时可以复用旧元素。 ---- 批注及说明: ① widget 树相当于配置,元素树相当于实例对象。...页面存储键 该键用来保留用户在滚动视图中的滚动位置,以便以后可以保存。 参考链接 说说 Flutter 中最熟悉的陌生人 —— Key
在Flutter中,各种提示框、弹出框是如何实现的呢?今天我们就来聊一聊这个问题。 首先咱们来聊聊Flutter系统内置的Dialog。...Flutter系统内置的Dialog 关于Flutter系统内置的Dialog,我们可以从两个层面去讨论,一个是showDialog层面,一个是showModalBottomSheet层面。...需要注意的是,上面的代码中,我们在对应的Button中单独地响应了点击事件,其实我们也可以对Dialog内部的按钮点击事件进行统一处理的。...如何自定义Dialog 上面我们讲了Flutter的内置提示框,还介绍了一款flutter第三方提示组件fluttertoast,通常情况下,这些就满足我们日常开发需求了。...和SimpleDialog,都是在showDialog中的builder函数中返回的,我们自定义的Dialog也是在这个函数中返回。
这个方法对于理解 Flutter 渲染过程非常重要。简单了解下。...其中最重要的是 drawFrame 方法,它的处理过程如下 布局阶段 - 对系统中的所有标记为脏的 RenderObject (如何将对象标脏以便布局,可参考 RenderObject.markNeedsLayout...) 进行布局 compositing bits 阶段 - 更新所有标脏 RenderObject 中的 compositing bits。...具体参考 RenderObject.markNeedsCompositingBitsUpdate 绘制阶段 - 系统中的所有标脏 RenderObject 被重绘。这个过程生成 Layer 树。...如何将对象标脏以便绘制,可参考 RenderObject.markNeedsPaint 合成阶段 - 将 layer tree 转换成 Scene 并发送到 GPU semantics 阶段 - 系统中的所有标脏
简介我们在使用flutter的过程中,有时候需要控制某些组件是否展示,一种方法是将这个组件从render tree中删除,这样这个组件就相当于没有出现一样,但是有时候,我们只是不想展示这个widget,...比如我们创建一个OffstageApp,这是一个StatefulWidget,在它的createState方法中,返回一个State对象,在createState方法中,我们定义一个...我们提供一个ElevatedButton,在它的onPressed方法中,我们调用setState方法来修改_offstage,如下所示:ElevatedButton( child:...好了,这样我们的代码就写好了,最后将OffstageApp放到Scaffold中运行,我们可以得到下面的界面:默认Offstage是不会展示的。...本文的例子:https://github.com/ddean2009/learn-flutter.git
在前面的文章中我们学习了Flutter中输入以及选择控件的用法,借助于这些组件大家可以完成很多常用的功能,但是他不能及时在用户操作后完成相应的界面提示,所以今天我们就会来看下Flutter中的操作提示。...在原生客户端有着几种常用的用户提醒方式,如Dialog、Snackbar、BottomSheet等,今天我们就来介绍下Flutter中几种常用的提醒方式。...Snackbar ---- 底部快捷提示和Android中的可以说是相似度很高的,用法也很简单。...今天我们就来介绍下这几种Dialog的用法 。 在Flutter中你可以使用ShowDialog方法来显示这些Dialog。...这样一来我们就把这个DIalog给显示出来了,在构造方法中我们可以看出需要传入的是children对象,也就是你可以根据自己的需要传入多个Widget对象。
Container是一个很方便的组件,相当于Web HTML中的div,它包含了公共的绘制,定位和尺寸组件。...本文使用的是flutter最新版本,如果不是最新版本,可以使用flutter upgrade升级一下。 让我们从一个空容器开始,设置绿色颜色属性。容器将填满所有屏幕。...FractionalOffset中的Size偏移量,用于表示TextDirection.ltr文本中的左侧偏移量和TextDirection.rtl文本中的右侧偏移量,而无需了解当前的文本方向。 ?...如我们之前所知,如果容器组件没有子代,它将自动填充屏幕上的给定区域,并且由于我们具有最大宽度和最大高度,因此容器将仅填充最大宽度和最大高度。 让我们将“文本”组件添加到容器中。...,并且由于我们具有min-width和min-height,因此它将采用BoxConstraints中给出的大小。
今天我们来学习下flutter中的多线程Isolate的用法。 下面我们会通过如何解析JSON数据来学习isolate的使用,json解析在app中是非常常见的。...首先我们先定一个需要解析的json格式: { "results": [ { "title": "Flutter Tutorial: Stopwatch App with Custom...3条数据,但实际中可能会有很多数据,假如超过了1M。...compute是dart中为我们封装好的快速使用的方法。下面我们再试试另外一种更加灵活的使用方式。...**当IO操作完成的时候,就会返回结果到main isolate。 也就是说我们能够安全的使用flutter中IO操作相关的API,dart已经都给我们封装好了。
Flutter提供了丰富的按钮组件可以让我们快速的构建UI界面。 常见的按钮组件如下: 1. RaisedButton :凸起的按钮; 2. FlatButton :扁平化的按钮; 3....值的类型为Widget; 3. textColor 文本颜色。值的类型为Colors; 4. color 按钮的颜色。值的类型为Colors; 5. disabledColor 按钮禁用时的颜色。...值的类型为Colors; 8. highlightColor 长按按钮后按钮的颜色。值的类型为Colors; 9. elevation 阴影的范围。...CircleBorder() 全圆形; 代码示例: import 'package:flutter/material.dart'; class ButtonPage extends StatelessWidget...用浮动按钮实现类似闲鱼APP的底部导航条效果,以下是代码示例: import "package:flutter/material.dart"; // 标签切换页 class Tabs extends
在Flutter中,我们使用shared_preferences组件来实现本地数据的存储。...sharedPreferences = SharedPreferences.getInstance(); sharedPreferences.remove("name"); } 接下来我们对其进行封装: 创建一个新的类...sharedPreferences = await SharedPreferences.getInstance(); return sharedPreferences.getString(key); } } 在外界使用的代码如下..."大傻子"); } // 获取数据 _getData() async { print(await Storage.getString("name")); } 注意,这里只是讲了自己封装数据存储的思路...,大家后续可以根据自己的需求做更为详尽的封装。
翻译过来: 控制一个小部件如何替换树中的另一个小部件。...(如颜色)通常是存储在state中的,而state是存储在element树中的。...于是开始进行第二层对比,在对比时Flutter发现元素与组件的Key并不匹配,于是,把它设置成不可用状态,但是这里所使用的Key只是本地Key(Local Key),Flutter并不能找到另一层里面的...Key(即另外一个Padding Widget中的Key)所以,Flutter就创建了一个新的Widget,而这个Widget的颜色就成了我们看到的『随机色』。...参考资料 何时使用密钥 - Flutter小部件 101 第四集 widgets-intro#keys Flutter | 深入浅出Key Flutter中的Key和GlobalKey
'package:flutter/material.dart'; class SettingPage extends StatefulWidget { SettingPage({Key key})...Text("加载中......"):ListView.builder( itemCount: this....Flutter的Dio库实现网络请求 dio 比 http 更强大,它支持Restful API、FormData、拦截器、请求取消、Cookie管理、文件上传/下载、超时、自定义适配器等。...import 'dart:convert' as convert; import 'package:flutter/material.dart'; import 'package:dio/dio.dart...Text("加载中......") : ListView( children: this.
好吧,还是回归今天的主题,我们还是来看下Flutter中的本地存储吧 Flutter本地存储 ---- 和Android、Ios类似,Flutter也支持Preferences(Shared Preferences...Preferences存储 ---- Flutter中本身并不支持Preferences存储,需要借助于第三发的组件来实现。...同样的方法,我们需要在pubspec.yaml文件中引入 path_provider: ^0.4.0 然后调用flutter packages get 最后在自己的Dart文件中引入 import ‘package...最后,我们来看下Flutter中Sqlite的用法 Sqlite ---- 和SharedPreferences和文件操作操作一样,Flutter内部并没有提供对sqlite的支持,但是官方给我们提供了第三方的支持库哦...同样的方法,我们需要在pubspec.yaml文件中引入 sqflite: >=0.8.5 然后调用flutter packages get 最后在自己的Dart文件中引入 import ‘package
官方文档中只是提及了最基础的部分,因此本文中着重讨论这部分。...Flutter将组件分为StatefulWidget,StatelessWidget,自然有状态的组件使用继承Flutter将组件为StatefulWidget。...InheritedWidget的类中,然后在使用的组件widget中直接取用就是。...明眼人一看便知,这就是React中Context。...引用前端届的RxJS来说: Observable = lodash for async Flutter的官方语言Dart中内置了Stream的概念 Stream ~= Observable
在Flutter中,几乎每一个Widget都有一个key。虽然我们在日常的开发中极少会使用到这个key,但是实际上key的存在是很有必要的。那么key到底是什么?它有什么作用?...一般而言,上述场景中指定的Key使用ValueKey即可,参数就传某个唯一标识就行,比如id。 Key是什么 在Flutter中,Key是不能重复使用的,所以Key一般用来做唯一标识。...我在在Widget,构建Flutter界面的基石中详细介绍过Widget、Element、RenderObject,这里再简单描述下: 1,Widget,主要用来配置组件的不可变信息,如上面例子中的颜色信息...基于Element的复用机制的解释 在Flutter中,Widget是不可变的,它仅仅作为配置信息的载体而存在,并且任何配置或者状态的更改都会导致Widget的销毁和重建,但好在Widget本身是非常轻量级的...Key的种类及用法 flutter 中的key总的来说分为以下两种: 局部键(LocalKey):ValueKey、ObjectKey、UniqueKey 全局键(GlobalKey):GlobalObjectKey
领取专属 10元无门槛券
手把手带您无忧上云