首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Flutter 组件集录 | 3.7 新增 - ContextMenu 菜单

对于移动端来说,输入框 TextFiled 组件长按文字时弹出的工具菜单也属于一种 ContextMenu : 本质上来说 ContextMenu 也不是什么新东西,只不过是对 Overlay 浮层的一层封装而已...如下是官方的案例: 选择文字中存在邮箱时,多添加一个 Send email 菜单。 可以按需构建工具菜单,让应用在操作上更加灵活,比如可以添加保存、分享、搜索等按钮。...在桌面端中,右键可以弹出工具菜单栏: ---- 源码中可以看出 TextFiled#contextMenuBuilder 构造器是一个 EditableTextContextMenuBuilder...: ---- 另外,源码中还能学到一些小东西的处理逻辑,比如如何复制粘贴,如何剪切和全选内容。...也就是说,在 _onSecondaryTapUp 中通过 _contextMenuController 显示浮层: class ImageContextMenu extends StatefulWidget

1.6K20

Flutter 组件集录 | 师于源码 - 与 TapRegion 的相遇

这就说明浮层可以监听到其外部的点击事件,从而隐藏自己;同时也不会影响到此次的手势事件。...---- RawAutocomplete 继承自 StatefulWidget, 所以浮层的显示和消失逻辑很可能在其状态类中维护。所以直接查阅组件对应状态类的处理逻辑。...状态类中可以发现,浮层确实是通过 OverlayEntry 进行实现的。...浮层的移除只是监听了这个事件产生的 副作用 ,而焦点是用于 TextFile 中的,所以下面需要追寻的就是: 对于 TextFiled 而言,外界的点击为什么会让焦点移除。 ---- 4....其中只有桌面端点击时才会取消焦点,移动端在手指点击时不会取消焦点。这是平台的差异性。这也是为什么 Autocomplete 组件默认在 移动端点击外界无法移除的根本原因。

93280
您找到你想要的搜索结果了吗?
是的
没有找到

Runtime在iOS开发中的实际应用

Masony的关联的对象 关于分类的介绍可以查看美团技术团队写的深入理解Objective-C:Category 1.1 为什么catagory 无法设置属性 struct objc_category...,类方法,甚至可以实现协议,添加属性,不可以添加成员变量。...苹果审核一直被开发者吐槽的,一是苹果审核的严格,各种理由反反复复被打回去欲哭无泪,二是审核周期长,在2017年之前苹果审核的周期一般都在三天,如果是新应用甚至需要一周以上,如果碰上圣诞节苹果放假我们这边是一般都不会提交审核...就是我们常说的消息转发, 举一个栗子,我在工作中项目出现了差错,本着挽救同志的目的,领导让我立即马上提供一次挽回的方法,如果我给力这个危机到此没了,但是我跪了搞不定,领导就问谁可以解决,这是老王站了出来...下面这张截图是Github的找到的利用AOP处理用户登录的代码,当然这个用继承基础类去写也是不错的,暂且不要在意写法的好坏 最起码我们程序开发提供了新的思路。 ?

94920

iOS 文本输入控制(献上框架)

提前监听在使用索引功能时弊端 但是在处理带索引输入的时候,会出现下图情况: ?...以下两种情况,在代理方法里面处理会出现问题: 在这里判断了长度:比如限制最多输入8个字符,我们还想在打几个拼音就会看到textFiled里面文本内容不会增加了,也就是无法继续输入,因为此时jian shu...在这里限制了非法字符:比如在该代理方法限制空格为非法字符,那么在输入到jian s的时候,就会出现点击无反应,因为此时已经有非法字符出现,文本不允许录入。...三、YBInputControl 框架解读(难点是方法重定向) DEMO地址带用法 首先,为了减少耦合,使用了分类的方式,给UITextField和UITextView添加了一个属性: @interface...当然,现在你不用知道内部实现,结构的设计来看,应该很轻松的想到使用方法就是给 yb_inputCP 属性赋值,YBInputControlProfile类包含了诸如长度、文本限制类型、直接输入正则表达式

1K120

FlutterDojo设计之道—状态管理之路(四)

(RootContainer)中初始化的,当使用StatefulWidget(RootContainer)的setState函数时,InheritedWidget(Root)重建了,但是其child并不会重建...要注意的是,虽然这里的StatefulWidget通过setState来修改数据了,但其子Widget并不会全部重绘,因为InheritedWidget的存在,Child Widget会有选择性的进行重绘...而Widget1,由于没有调用过of函数,所以不会添加到订阅者列表中,所以不会执行rebuild。...rebuild了,这也是为什么在Flutter中,很多不需要改变的Padding、Margin、Theme、Size等参数需要尽可能设置为const的原因,这样可以在rebuild的时候,提高效率。...前面提到了两种方式来获取Widget Tree中的InheritedWidget,dependOnInheritedWidgetOfExactType和findAncestorWidgetOfExactType,调用结果上来看

47620

flutter:一个bug的源码分析

TestWidget> { // 数据放在State里面,而不是widget里面 List photoList = []; } 虽然bug当时就修复了,但是为什么系统的表现是这样...,还是要去查看源码 创建一个demo来分析 为了方便分析问题,创建一个自定义的statefulWidget跟StatefulElement class _TestWidgetState extends...return super.updateChild(child, newWidget, newSlot); } } 每次执行到对应的系统方法,可以打印log,也方便调试源码;然后把这个widget添加到布局中...return Column( children: [ const TestWidget() ], ); 源码分析 接下来,源码角度分析下上述行为...element 对于不会变的widget,可以加上const前缀,就可以build的时候,避免被重新创建,提升性能 对于statefulWidget,需要把本地变量放在state里面,而不能放在widget

33710

Flutter 组件集录 | AppBar 组件 - 源码中学习

为什么 AppBar 需要是 StatefulWidget ?... AppBar 的源码中可以看出,它继承自 StatefulWidget,其实表现上来看 AppBar 并没有需要更改自身内部状态的需求,那它为什么要继承自 StatefulWidget 呢?...AppBar 状态类构建组件的细节 对一个合成组件来说,最重要的还是构建逻辑,其中可以看到组件在界面中表现一切本质细节。...这就是为什么将 flexibleSpace 设置为图片,就能当 AppBar 主题背景图的原因。...可能有人会觉得,会用不就行了吗,为什么要研究的这么细致。良庖岁更刀,割也;族庖月更刀,折也。歌手不会唱歌,戏子不会演戏,厨子不会用刀,谬之大极。 ---- 尾声 勤小物,可治其微。

1.1K30

Flutter 双向聊天列表效果进阶优化

滑动列表的知识点》 里,通过 CustomScrollView 和配置它的 center 从而解决了数据更新时的列表跳动问题,但是这时候又有网友提出了新的问题: image 如下动图所示,可以看到虽然列表在添加新数据后虽然没有发生跳动...运行后也如下图所示,可以看到运行后的代码不会再有空白的情况,也没有新增数据跳动的情况,双向滑动也正常,那你知道为什么吗?...image 如下图所示,调整后结构上变成了右边的逻辑: 数据起始锚点在页面顶部,所以不会存在顶部留空问题; 在 center 下面的 SliverList 按照正向排序正常显示,用于显示新数据; 在...这时候就有人可能会说,如果是下图所示场景,只加载旧数据,不加载新数据,那不就出现底部留空了吗?...notification.metrics.extentAfter; } return false; }, ) 这里的 if 判断,只是为了规避其他控件的影响,比如列表里的 PageView 或者 TextFiled

56540

Flutter(八)--Flutter渲染逻辑+源码解读Flutter(八)--Flutter渲染逻辑+源码解读

Flutter渲染逻辑 三种树 这是Flutter中三棵树:Widget tree、Element Tree、Render Tree,他们之间的关系图中也很容易看出来,问题是Flutter是通过什么方式来建立他们之间的关系呢...build只有在StatelessWidget中出现了,这也是为什么在平时的开发中我们只有在StatelessWidget这个Widget中会重写build,而StatefulWidget是在对应的State...createRenderObjectFlutter就是通过这个方法将Element添加到RenderTree中。...我们为什么可以在State中使用widget; ComponentElement中有一个mount方法,这个方法类似Widget中的createElement都是Flutter自行调用,我们只需知道Element...其实在对RenderObject的了解后发现,只有出现在屏幕中的元素才会被添加到Render Tree中,移出屏幕就立马会被销毁。

1.5K10

【Flutter实战】Flutter 中那么多组件,难道要都学一遍?

历史上的今天 通古斯因陨星坠落发生大爆炸,1908年6月30日上午7时,在中西伯利亚上空,一个雪亮的火球东南向西北掠空而过。一个几十万吨重的大流星落在通古斯河以北。...叶尼塞河至勒拿河之间1500公里的范围都曾看见,爆炸声在直径为2000公里范围可听到,世界各地的地震仪都有地震波记录下来。 流星降落的头几夜,天光明亮,在高加索不用点灯即可看报。...生成的组件树如下: 让 Text 组件居中,修改如下: Scaffold( body: Center( child: Text('老孟'), ), ) 生成的组件树如下: 给应用程序添加...它们唯一的区别就是运行时 重新加载 组件的方式不同,StatelessWidget 组件重新加载时重新创建当前组件的实例,而StatefulWidget组件重新加载时不会重新创建实例,而是重新执行 build...但有一些功能 Flutter 区分平台,比如 ListView 滑动到底部时继续滑动,Android 底部会出现淡蓝色(默认情况下)拱形,而 iOS 上则没有,这是因为 Flutter 在封装此组件时在代码中区分了平台

68910

UIBarButtonItem我用了这些姿势才能和你交互

当我在 ViewDidLoad方法直接调用这个方法竟然这个按钮还没有添加。 当我们对已经存在的数据进行编辑的时候,如果进来没有做判断,可以允许用户进行编辑的时候,这是一个不好的交互体验。...如果之后全部更改颜色,这个地方就要改动,万一忘记改动就会出现问题。 所以觉得还是用系统的,之后禁用系统的交互。这样出问题的几率比较小。...这是系统内部的数组,我们不清楚系统怎么添加的,简单的拦截 NSArray的添加元素方法或者重写或者会出现其他的问题。...我们为了不出现页面已经出现在用户严重,按钮 Done可用变成不可用。 我们在 viewDidLayoutSubviews 方法里面来进行判断。...- (void)setNeedDoneButtonOperation { NSString *nowEditString = self.editStringView.textFiled.text

86750

-StatefulWidget的打开方式

但Flutter说:对不起,你不能 这让我恍然大悟,为什么Widget源码里说所有的组件都是恒定的,它只是对元素的描述 组件的属性无法被改变因为属性都是final修饰的,既然无法修改,那又为什么会有状态一说...话说回来,为什么要这样做呢?...三个词: 易复用、好维护、可拓展 这三个词会伴随Coder的编程生涯,如何让自己创造的世界更好的运作,是我们殚精竭虑的 设计模式到数据结构,编码到重构,我们努力调整维持这个世界的秩序,让它们脱离...直到现在Flutter出现了,它带着React的风采出现在移动端,甚至全端 Flutter中对于界面感觉非常友好,虽然刚来时一堆括号的嵌套让人难以适应,但渐渐你会发现他的美 Widget认为界面上的元素都成为组件...---- 5:组件间的组合 看一下Flutter中组合Slider和Text是多么简洁,只要添加一些就行了 如果Android自定义这样的控件,需要自定义ViewGroup,将两个组件拼合 所以Flutter

1.1K10

Flutter | 和小老弟一起玩转Widget

为什么一切都是组件,怎么理解呢?...通俗点理解: 有状态: 交互或者数据改变导致 Widget改变,例如改变文字 **无状态:**不会被改变的 Widget,比如一个纯页面的展示 需要注意的是,使用 StatefulWidget 时,每次直接...,又重新插入到树的其它位置之后 reassemble() 此回调是专门为开发调试而提供,在热重载 (hot reload) 时被调用,此回调在 release 下永远不会被调用。...通过Context获取 context 对象有一个 findAncestorStateOfType() 方法,该方法可以当前节点沿着 widget 树向上查找指定类型的 StatefulWidget...示例如下: 给目标 StatefuleWidget 添加 GlobalKey 通过 GlobalKey 来获取 Satate 对象 GlobalKey childState =

86620

为什么 build 方法放在 State 中而不是在 StatefulWidget

为什么 build 方法放在 State 中而不是在 StatefulWidget 中呢?其中前2点是源代码的注释中给出的原因,最后一点是我的一点个人理解。...灵活性 将 build 方法放在 State 中比放在 StatefulWidget 中更具灵活性,比如说,AnimatedWidget 是 StatefulWidget 的子类,AnimatedWidget...闭包 this 指向异常 假设 build 方法在 StatefulWidget 中,StatefulWidget 的子类写法如下: class MyWidget extends StatefulWidget...性能 有状态的组件包含StatefulWidget 和 State,当有状态组件的配置发生更改时,StatefulWidget 将会被丢弃并重建,而 State 不会重建,框架会更新 State 对象中...此方式对动画来说极为重要,由于 State 不会被重建,保留了前面的状态,不断的根据前一个状态计算下一个状态并重建其widget,达到动画的效果。

86920
领券