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

Flutter 入门指北之滑动部件(超详细)

那么这里提下可滑动的容器部件 SingleChildScrollView 这个部件非常简单,不贴源码了。最简单的使用方式只需要提供一个 child 即可。...如果需要实现一个垂直的滚动列表,可以直接通过 SingleChildScrollView 包裹 Column 来实现,列表内容全部塞到 Column 即可 class SingleChildScrollDemoPage...: AppBar( title: Text('Single Child Demo'), ), body: SingleChildScrollView(...letters 不同而不同,这边就不贴效果图了,反正可以看到一串列表......看命名就知道,值固定数量的,这个数量是只单排的数量 SliverGridDelegateWithMaxCrossAxisExtent 这个是设置最大宽度/高度,在这个值范围内取最大值,比如一排能给你排下

2.4K30

【Flutter 专题】126 图解自定义两侧对齐 ACETabBar 标签导航栏

TabBar 标签栏默认居左,而 TabBar 默认是居中状态;和尚借此机会学习一下 TabBar 源码,稍微调整一下对齐方式; ACETabBar ACETabBarAlignType 对齐方式 和尚添加一个...存放,最简单的方式,在 SingleChildScrollView添加可以设置对齐方式的 Container 即可; if (widget.isScrollable) { _scrollController...startIcon & endIcon 固定位图标 类似很多新闻商城 app,在 TabBar 所在的左右两侧通常会有固定的图标文字等小 Widget;而和尚也在设置完对齐方式后增加了...;而是否添加点击事件可以通过添加 Widget 时进行处理; Widget tabBar = CustomPaint( painter: _indicatorPainter, child...以及对应 indicator 标签指标的绘制及对应的滑动过程;其中在 TabBar 绘制过程中会用到 PreferredSizeWidget 小组件; PreferredSizeWidget 小组件作为一个抽象接口

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

Flutter 遇到的坑

Navigator.of(context).push() RefreshIndicator在ListView条目较少时不触发下拉刷新 RefreshIndicator是根据下拉时的偏移量触发刷新,当条目较少时(未占满一个屏幕...如果大于等于3个tab,这个有bug,最好不用 当前tab切到任意非相邻tab(如:第一个tab切换到第三个),会报错 class ArticleListPageState extends State...在StatelessWidget或者StatefulWidget中的参数必须使用final定义,否则Dart Analysis会报warning,因为StatelessWidget是不可变的,StatefulWidget...实例本身是不可变的,并将其可变状态存储在由createState方法创建的单独State对象中,或者存储在该State所订阅的对象中,例如StreamChangeNotifier对象,其引用存储在StatefulWidget...包装一下, 原来的是这样: return new Scaffold(       appBar: new AppBar(         title: new Text("搜索"

1.6K20

Flutter 绘制探索 5 | 深入分析重绘范围 RepaintBoundary | 七日打卡

这个系列便是对 Flutter 绘制的探索,通过测试、调试及源码分析来给出一些在绘制时被忽略从未知晓的东西,而有些要点如果被忽略,就很可能出现问题。...测试案例 如下,通过一个 SingleChildScrollView 包含一个自定义的画板组件。并在 ShapePainter#paint 中打印绘制日志,页面中并未涉及任何的刷新逻辑。...: AppBar(), body: SingleChildScrollView( child: Column( children: [...从这可以看出这是列表滑动组件的默认行为,RepaintBoundary 并没有那么昂贵。 ? 可以做一个测试,将 SingleChildScrollView 替换成 ListView 。...当然这些只是我遇到的,当你自定义的绘制出现卡顿频繁重绘时,也要注意一下。 ---- 通过本文,应该对 Flutter 中的绘制范围有了更深的认识。

3.6K31

Flutter跨平台移动端开发丨SingleChildScrollView、ListView......

---- SingleChildScrollView(可滑动 View) SingleChildScrollView 类似 Android 中的 scrollview ,且同样的只可包含有一个子元素...RepaintBoundary 时,在滚动过程中可以避免重绘,如果此列表项需要自己维护 KeepAlive 状态,那么此参数需为 false) addSemanticIndexes:表示是否给子元素添加索引...ListView.builder 当 listview 的列表项较多数量未知时,就需要使用 ListView.builder 来构建列表了 import 'package:flutter/material.dart...ListView 分页加载 工程 yaml 文件中要添加 english_words 的依赖 # The following adds the Cupertino Icons font to your...RepaintBoundary 时,在滚动过程中可以避免重绘,如果此列表项需要自己维护 KeepAlive 状态,那么此参数需为 false) addSemanticIndexes:表示是否给子元素添加索引

8.6K51

Flutter:使用复选框进行下拉多选

可以通过选中/取消选中与其关联的复选框来选择取消选择一个选项。 当按下升高的按钮时,将显示多选对话框。它让用户在编程中选择他们最喜欢的主题。所选主题将作为筹码显示在屏幕上。...以下是我们的应用程序的运行方式: 构建自定义多选小部件 创建一个名为MultiSelect的可重用小部件,它可以获取选项列表(您可以对这些项目进行硬编码从数据库/API 中获取它们): // Multi...}); } } @override Widget build(BuildContext context) { return Scaffold( appBar...button to open the multi-select dialog ElevatedButton( child: const Text('选出最喜欢的技术...但是,如果您有紧急任务并且只想尽快进行多选,那么使用第三方插件是一个不错的选择。

3K20

自定义View概述

在前面已经提到了,使用ExpansionPanelList.radio()每次只能打开一个Item,当有一个item处于打开状态时在点击其他item就没有效果了,所以在这里我们依然要借助于ExpansionPanelList...: AppBar( title: Text("ExpansionPanelList"), ), body: SingleChildScrollView...简单的步骤 ---- 新建继承于CustomPainter实现paint()和shouldRepaint()方法 在paint方法中绘制你想要的内容 借助于 CustomPaint Widget来构建自己的...画布canvas 画布是一个矩形区域,我们可以控制其每一像素来绘制我们想要的内容 canvas 拥有多种绘制点、线、路径、矩形、圆形、以及添加图像的方法,结合这些方法我们可以绘制出千变万化的画面。...虽然,画布可以画这些东西,但是决定这些图形颜色、粗细表现的还是画笔。 画笔Paint Paint非常好理解,就是我们用来画图形的工具,我们可以设置画笔的颜色、粗细、是否抗锯齿、笔触形状以及作画风格。

73631

Flutter开发-可滚动组件

如果需要在两个方向上收缩包装(在滚动轴和横轴)例如 dialog或者 pop-up菜单,在这种情况下,可以用SingleChildScrollView包裹孩子ListBody。...当可滚动组件滚动时,将列表项包裹在RepaintBoundary中可以避免列表项重绘,但是当列表项重绘的开销非常小(如一个颜色块,或者一个较短的文本)时,不添加RepaintBoundary反而会更高效...下面我们看一个例子:奇数行添加一条蓝色下划线,偶数行添加一条绿色下划线。...SliverGridDelegate是一个抽象,定义了GridView Layout相关接口,子类需要通过实现它们来实现具体的布局算法。...return Material( child: CustomScrollView( slivers: [ //AppBar,包含一个导航栏

4.4K20

Flutter混编工程之异常处理

再进入_debugReportException中一探究竟,会发现,应用层的异常被catch之后,都是通过FlutterError.reportError来处理的。...: AppBar( title: const Text('出错了,请稍后再试'), ), body: SingleChildScrollView(...stack: stack, ), ); }, ); } 封装 下面我们将前面的异常处理方式都合并到一起,并针对EngineGroup的多入口处理,封装一个...: AppBar( title: const Text('出错了,请稍后再试'), ), body: SingleChildScrollView...上报 在Flutter侧,我们只是获取了异常的相关信息,如果需要上报,那么我们需要借助Channel,桥接的Native,使用Bugly其它平台进行上报,我们可以借助Pigeon来进行处理,还不熟悉的朋友可以参考我前面的文章

84610

flutter系列之:创建一个内嵌的navigation

简介 我们在flutter中可以使用Navigator.push或者Navigator.pushNamed方法来向Navigator中添加不同的页面,从而达到页面调整的目的。...比如我们有一个主页面app的Navigator,然后里面有一个匹配好友的功能,这个功能有多个页面,因为匹配好友功能的多个页面实际上是一个完整的流程,所以这些页面需要被放在一个子Navigator中,并和主...super.key, }); @override Widget build(BuildContext context) { return Scaffold( appBar...: _buildAppBar(), body: SingleChildScrollView( child: Column( mainAxisSize: MainAxisSize.min...NavigatorState>(); 这里的_onGenerateRoute方法,跟主路由也是很类似的,主要定义的是子路由中页面的跳转: Route _onGenerateRoute(RouteSettings

20010

Flutter入门指北(Part 8)之Sliver 组件及NestedScrollView

SliverToBoxAdapter 还记得上节最后的代码中,有使用 SliverToBoxAdapter 这个部件,这个部件只需要传入一个 child 属性。...SliverPadding 那么在 CustomScrollView 中部件之间如何设置间距呢,可能会想到用 SliverToBoxAdapter 包裹一个 Padding 来处理,当然没问题。...SliverPersistentHeaderDelegate 需要提供一个最大值,最小值,展示内容,以及更新部件条件 比如我们需要展示一个最大高度 300,最小高度 100,居中的文字,那么我们可以这么写这个代理...SliverAppBar pinned: true, floating: true, // 因为 SliverPersistentHeaderDelegate 是一个抽象...糟透了的翻译 X 2:最常用的情况,就是在其 headerSliverBuilder 中使用携带 TabBar 的 SliverAppBar(就是使用 SliverAppBar 的 bottom 属性添加

2K30

Flutter | 滚动组件,ListView,GridVIew等

当组件内容超过当前显示视口(ViewPort)时,如果没有特殊处理,Flutter 就会提示 Overflow 错误,为此,Flutter 提供了多种可滚动组件,用于显示列表和长布局; 可滚动组件都直接间接的包含一个...风格的滚动指示器(滚动条),如果要给可滚动组件添加滚动条,只需要将 Scroolbar 作为可滚动组件的任意一个父级组件即可,如: Scrollbar( child: SingleChildScrollView...,或者一个较短的文本) 时,不添加 RepaintBoundary 反而会更加高效。...,then 是异步执行完成的回调 还有问题可以参考这篇文章 最终的效果如下: 添加固定列表头 很多时候我们需要给列表添加一个固定表头,比如实现一个商品列表,就需要在列表添加一个 商品列表 标题 以往的经验告诉我...ListView 以填充屏幕剩余空间的方法

8.4K20
领券