flutter卡片展示的简单介绍

Flutter开发--如何布局?

相对于iOS开发,Flutter的布局更具有灵活性,每个页面设计都不一样,相同页面可选择的布局方式也不一样,如果单纯的说应该如何去布局,我觉得不现实,大家可以参考下 Flutter官方的布局教程 。接下来,笔者,通过项目中的一个页面,来一步一步的拆解布局的流程。整个过程,基本上按照拆解、组件封装、具体布局这三步来的。

让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:国际域名空间、虚拟主机、营销软件、网站建设、永善网站维护、网站推广。

根据设计图,可以看出整体可以分成两部分,上面一部分是系统介绍模块,下面一部分是真正的登录内容,因为涉及到叠加,因此考虑用Stack;

系统介绍模块部分:整体也是涉及到叠加,考虑用Stack,分为四部分。最底部渐变色背景用一个contanier,无须指定位置,全视图扩展;载放logo图标在上一层,用Image。最后两个Text同级放在最上层。Image,Text各用Positioned包裹去指定位置。

登录内容模块是最外层是一个Contanier容器,去控制背景色和圆角。然后是一个Column元素,逐行排列。

第一行为Image,

第二行为Text,

第三行可以看成一个小Column,分两块进行布局

第四行可以看成一个小Column,分两块进行布局

第五行可以看作一个TextButton,

第六行可以看作一个Row,分三块进行布局

通过上面这样一步一步的分析后,基本上对大致的布局有了一个了解,最外层的控件大致选对(只要能实现的话,就是复杂度以及效率的问题),然后一步一步的拆解每一行的元素,如果有重复的或者觉得可以封装出来的部分,则进行下一步。

每一行的拆解,大致也是按照这个思路来进行,因此笔者在这里就不做讲解了。

在做到第三第四行的时候,发现这两个很相似,而且设计到一些交互逻辑,笔者就想对第三第四行的这种展示进行封装,觉得今后的布局可能会用到,因此在这一步,可以先把这一块儿抽离出一个控件。利用TextField来实现这种输入操作,具体的实现笔者不再详细的描述了。

经过这一步,整体的规划设计图已经有了,各个组件也都有了,接下来的工作就是组装了。

具体布局设计到一些细节的地方,例如整体Column的居中对齐(crossAxisAlignment)、间隔(Padding或Container包裹,笔者更喜欢用SizedBox占位)、居左居右居中(Align)、点击事件(GestureDetector)以及圆角(BorderRadius)等一些特殊情况。

像第六行row是放在底部的,就可以在第六行前面增加一个Spacer()去填充空白区域。

对文字颜色大小等,可以用TextStyle直接设置。

对于输入框的删除按钮,可以用Offstage这种Flutter特有的控制显示隐藏的控件。

flutter-实现一个简单的展开收起动画

使用Tween动画,改变控件距左距离

展开时,展示菜单控件,动画正向执行;收起后,动画反向执行,隐藏菜单控件;

flutter_inappbrowser和h5交互

需求,app中使用webview和h5交互,根据h5发过来的消息,在屏幕上展示flutter组件,并且可以发送消息给h5。

首先使用的组件是flutter_WebView_plugin,这个组件不能嵌套flutter组件,所以放弃这个组件。

flutter_inappbrowser 可以实现组合布局, 所以选用了此库, GitHub链接

[

flutter加载h5很卡

flutter加载h5很卡的解决方法如下:

一种临时解决方案,在切换动画加载完毕后,再去构造 WebView,这样从用户角度上看,就不会有路由切换动画的卡顿了。class WebViewPage extends StatefulWidget {undefined

final String uri;

WebViewPage({undefined

@required this.uri,

}) : assert(uri != null);

@override

_WebViewPageState createState() = _WebViewPageState();

}

class _WebViewPageState extends State {undefined

WebViewController _controller;

bool _animationCompleted = false;

@override

Widget build(BuildContext context) {undefined

// 主要是下面的代码

var route = ModalRoute.of(context);

if (route != null !_animationCompleted) {undefined

void handler(status) {undefined

if (status == AnimationStatus.completed) {undefined

route.animation.removeStatusListener(handler);

setState(() {undefined

_animationCompleted = true;

});

}

}

route.animation.addStatusListener(handler);

}

return Scaffold(

title: widget.title,

backgroundColor: Colors.white,

body: _animationCompleted

? WebView(

initialUrl: 'about:blank',

onWebViewCreated: (WebViewController webViewController) {undefined

_controller = webViewController;

_loadHtmlFromAssets();

},

)

: Container(),

);

}

_loadHtmlFromAssets() async {undefined

var uri = Uri.dataFromString(

await rootBundle.loadString(widget.uri),

mimeType: 'text/html',

encoding: Encoding.getByName('utf-8'),

).toString();

_controller.loadUrl(uri);

}

}

Fluent是目前国际上比较流行的商用CFD软件包,在美国的市场占有率为60%,凡是和流体、热传递和化学反应等有关的工业均可使用。

它具有丰富的物理模型、先进的数值方法和强大的前后处理功能,在航空航天、汽车设计、石油天然气和涡轮机设计等方面都有着广泛的应用。

FLUENT软件包含基于压力的分离求解器、基于密度的隐式求解器、基于密度的显式求解器,多求解器技术使FLUENT软件可以用来模拟从不可压缩到高超音速范围内的各种复杂流场。

FLUENT软件包含非常丰富、经过工程确认的物理模型,由于采用了多种求解方法和多重网格加速收敛技术,因而FLUENT能达到最佳的收敛速度和求解精度。

灵活的非结构化网格和基于解的自适应网格技术及成熟的物理模型,可以模拟高超音速流场、传热与相变、化学反应与燃烧、多相流、旋转机械、动/变形网格、噪声、材料加工等复杂机理的流动问题。

Flutter快速上手8:基础布局之辅助布局

水平垂直居中布局。类似Container设置alignment

固定宽高布局,类似Container设置了宽高

宽高比布局。

四、FractionallySizedBox

百分比布局。

这里注意百分比布局外层一定是一个有大小的容器(如SizedBox、Container),否则会报错。

卡片布局。

本地Flutter 2.10.1,Mac版Android Studio Bumblebee | 2021.1.1 Patch 2

我是小栗子,初学Flutter ,文章会根据学习进度不定时更新,请多多指教~~

Flutter 之 Sliver 系列控件

SliverAppBar 控件,一个 MD 的 AppBar 。属性和 AppBar 类似,但做的效果比 AppBar 更加强大。相同的属性具体可以看 Flutter 之 Scaffold 控件 , 里面有 AppBar 控件的介绍。那么还有些没有的属性:

结合 elevation 使用,当elevation 不为 0 的时候,是否显示阴影

AppBar 展开时候的高度

true 的时候下滑AppBar优先滑动展示,展示完成后才给滑动控件滑动

snap 为 true, 则 floating 也要为 true 。true 的时候根据手指松开的位置展开或者收缩AppBar

appBar 收缩到最小高度的时候 appBar 是否可见

SliverAppBar 往往做为 CustomScrollView 的第一个子元素,根据滚动控件的偏移量或者浮动的位置来改变 SliverAppBar 的高度。所以具体用法如下

另外在上面设计到 FlexibleSpaceBar 控件,FlexibleSpaceBar 有个 collapseMode 属性

为 Sliver 系列控件添加一个 padding 。如给上面 SliverAppBar 添加一个 Padding 。

多行多列的列表控件,相当于 Android 的 GridView,有两个属性

SliverChildDelegate,这里有两种方式创建

SliverGridDelegate,也是有两种方式创建

结合上面展示效果

和上面 delegate 属性一样,需要创建一个 SliverChildDelegate 。

比 SliverList 多一个 itemExtent 属性,设置 item 的高度 。item 里面的子控件无法再改动高度。

上面 SliverAppBar 就是结合 SliverPersistentHeader 实现的效果,SliverPersistentHeader 需要一个 SliverPersistentHeaderDelegate 。 实现 SliverPersistentHeaderDelegate 有 4 个方法需要重写

至于效果,具体效果具体分析。

有一个 Widget 属性,主要作用是在 CustomScrollView 里面添加多种不同布局的样式。

占满一屏或者比一屏更多的布局,

滑动剩余部分展示的布局


文章名称:flutter卡片展示的简单介绍
文章转载:http://ybzwz.com/article/dsddhih.html