摘要:效果: 代码: class DetailScreen extends StatefulWidget { const DetailScreen({super.key}); @override State<DetailScreen> createState() => _DetailScreenState
阅读全文
摘要:前提知识: setState 执行的是 Element 的 markNeedsBuild,将当前 element 加入标记列表。那么,标记完了,什么时候执行 element 的 rebuild呢?当渲染管线流程 WidgetsBinding.drawFrame 执行时,依次执行 buildScope
阅读全文
摘要:效果:  代码: ```dart class ColorLoader extends StatefulWidget
阅读全文
摘要:参考文章:[RenderObject 的布局与绘制](https://github.com/flutterchina/flutter_in_action_2nd/blob/main/src/chapter14/render_object.md) ### 1. relayoutBoundary 重布局
阅读全文
摘要:效果: 代码: class HomePage extends StatelessWidget { const HomePage({Key? key}) : super(key: key); @override Widget build(BuildContext context) { return S
阅读全文
摘要:效果: 注:如果是类似于 BottomSheet,效果为:由底部往上拖动展开,由上往下拖动收缩。那么,可直接使用 showBottomSheet,并且如果子组件是是滚动组件的话,可使用 DraggableScrollableSheet(snap 属性设为 true)。 代码: class HomeP
阅读全文
摘要:改变状态栏的主题颜色 1、在有 AppBar 的情况下,可以借助 AppBar 去设置,比如 return Scaffold( appBar: AppBar( systemOverlayStyle: SystemUiOverlayStyle.dark, ), body: ... 或者在主题中全局设置
阅读全文
摘要:事件机制: 命中测试的过程是从上层组件到下层组件,但是加入 HitTestResult 的顺序是从下到上,分发事件的顺序同加入顺序。 通常,若用户点击坐标不在当前节点的 size 范围内,则 hitTest 直接返回 false。 命中测试过程中,① 兄弟节点的加入顺序是倒序的,这个可以结合 Sta
阅读全文
摘要:效果: 代码:(已更正,周日是第一天,周六为最后一天) class _HomePageState extends State<HomePage> { DateTime startDate = DateTime.now(); DateTime endDate = DateTime.now().add(
阅读全文
摘要:1. Flutter 的线程 平台线程 即主线程,plugin 代码运行在此线程。具体请参阅 Android 的 MainThread 以及 iOS 的 UIKit 文档。 UI 线程 UI 线程在 Dart VM 中执行 Dart 代码。当应用创建和展示场景的时候,UI 线程首先建立一个 图层树(
阅读全文
摘要:示例: class DynamicBoxPage extends StatelessWidget { const DynamicBoxPage({Key? key}) : super(key: key); @override Widget build(BuildContext context) {
阅读全文
摘要:对于快捷键绑定回调大致有三种方式,第一种是使用 CallbackShortcuts;第二种是使用 Focus 的 onKey 回调,参考前一篇文章中的 Key Events 的示例1;第三种就是下面所介绍的。 效果: 代码: class ShortcutPage extends StatefulWi
阅读全文
摘要:Focus 组件 class HomePage extends StatefulWidget { const HomePage({Key? key}) : super(key: key); @override State<HomePage> createState() => _HomePageSta
阅读全文
摘要:修改主题 theme: ThemeData( splashColor: Colors.transparent, highlightColor: Colors.transparent, splashFactory: NoSplash.splashFactory, ), 或者修改单个 ElevatedB
阅读全文
摘要:效果: 代码: class GridDragView extends StatefulWidget { const GridDragView({Key? key}) : super(key: key); @override State<GridDragView> createState() => _
阅读全文
摘要:为什么要实现点击空白处隐藏键盘?因为这是 iOS 平台的默认行为,Android 平台由于其弹出的键盘右上角默认带有关闭键盘的按钮,所以点击空白处不会隐藏键盘。 单个页面,可以这样做: class DismissKeyboardPage extends StatelessWidget { final
阅读全文
摘要:效果: 说明:绿色块在向上滑动,距离顶部 103 的高度(即 AppBar 下面)时固定 注:示例4 有官方组件 PinnedHeaderSliver( flutter 3.4) 示例 1: 解决问题的关键是修正 paintOffset,以使最终的 offset 在 pinned 位置固定不变。缺点
阅读全文
摘要:一、使用 StatefulBuilder 单独更新某个组件的状态 示例: await showDialog<void>( context: context, builder: (BuildContext context) { int? selectedRadio = 0; return AlertD
阅读全文
摘要:布局模型 RenderBox 布局,移步 flutter —— 布局原理与约束 Sliver 的布局流程如下: Viewport 将当前布局和配置信息通过 SliverConstraints 传递给 Sliver。 Sliver 确定自身的位置、绘制等信息,保存在 geometry 中(一个 Sli
阅读全文
摘要:chewie 依赖:video_player + chewie 缺点:ui 简陋 class VideoPlayerScreen extends StatefulWidget { const VideoPlayerScreen({Key? key}) : super(key: key); @over
阅读全文