flutter视图的简单介绍

Flutter移动应用:视图(PageView,GridView)

主要属性

创新新互联,凭借10多年的成都做网站、成都网站设计经验,本着真心·诚心服务的企业理念服务于成都中小企业设计网站有近千家案例。做网站建设,选成都创新互联

//创建一个带 title 的 item

//通过传入 length 多少个来创建多少个 item

Flutter 在body中设置TabBar和TabBarView

最近在开发中想实现一个AppBar下面有选项卡,来回切换的页面功能,百度了很多没有和自己需求符合的,网上大都是返回的Scaffold,使用系统的Appbar,添加至.bottom中,但是现在项目中用的是自定义的Appbar,不想破坏系统的统一封装。

所以在body 中实现TabBar 和 TabBarView,开始使用Column一直不行,只能显示一个,但是在body里面同时放置 TabBar 和 TabBarView需要注意

TabBarView 的父 Widget 必须知道宽高才能布局,否则,会报错:BoxConstraints forces an infinite height.

使用 Column + Expanded 即可:

注:还有设置tabbar的tab背景颜色,tabbar中的tab的背景颜色取的实际是AppBar的主题色,所以我们将tabbar放在Material中来重置了主题色,变成我们想要的背景色.

buildTabBar为创建TabBar的方法:

buildBodyView创建视图方法:

Flutter初始化

新建一个Flutter工程,android模块。

1,只有一个Activity组件,它是Dart层绘制Widget的容器。

2,Application配置FlutterApplication。

应用Application配置io.flutter.app.FlutterApplication类,App首次启动时,初始化。

调用FlutterMain.startInitialization()方法。

initConfig方法,从AndroidManfest.xml配置的applicaion节点获取meta-data数据,初始化以下默认值。

这些值都是使用中用到的name,例如,抽取apk中asset资源时,flutter_assets打包目录,打包产物data名称。

initResources方法, 初始化资源。

在Flutter打包apk的asset目录下,包括fluttter_asset目录/资源项,将资源从apk中抽取,保存在 Context.getDir("flutter", 0) 目录下。

/data/user/0/包名/app_flutter目录。

在目录中创建一个时间戳文件,根据apk版本和包信息记录的lastUpdateTime更新时间,第二次启动时,若apk未更新,不需要再次抽取。

加载so库,libflutter.so,System.loadLibrary()。

主页面继承FlutterActivity,配置启动模式singleTop。

FlutterActivity类在io.flutter.app包, (区别io.flutter.embedding.android包), 组件生命周期委托给FlutterActivityDelegate类。

组件启动,onCreate方法。

FlutterMain.ensureInitializationComplete方法,确保资源成功抽取完成,创建FlutterView视图(io.flutter.view),继承SurfaceView类,setContentView方法,设置组件主布局即FlutterView视图。

最后,根据Bundle路径,runBundle()加载运行,

调用FlutterView的runFromBundle方法,入口点在dart的main方法,

通过FlutterNativeView,调用FlutterJNI的native方法。

nativeRunBundleAndSnapshotFromLibrary方法。

任重而道远

Flutter基础篇——常用Widget

对于初学flutter的朋友来说,要知道,flutter的UI万物皆Widget。

flutter所写的页面的结构可以被看成套娃,一层套一层,一层套一层,一层套一层。。。。。。

Flutter Widget采用现代响应式框架构建,这是从 React 中获得的灵感,中心思想是用widget构建你的UI。 Widget描述了他们的视图在给定其当前配置和状态时应该看起来像什么。当widget的状态发生变化时,widget会重新构建UI,Flutter会对比前后变化的不同, 以确定底层渲染树从一个状态转换到下一个状态所需的最小更改。

Text : 该 widget 可让创建一个带格式的文本。

Row 、 Column : 这些具有弹性空间的布局类Widget可让您在水平( Row )和垂直( Column )方向上创建灵活的布局。

Stack :取代线性布局 (和Android中的LinearLayout相似),Stack允许子 widget 堆叠, 你可以使用 Positioned 来定位他们相对于 Stack 的上下左右四条边的位置。

Container : Container 可让您创建矩形视觉元素。 您可以为 Container 装饰一个 BoxDecoration , 如 background、一个边框、或者一个阴影。 Container 也可以具有边距(margins)、填充(padding)和应用于其大小的约束(constraints)。另外, Container 可以使用矩阵在三维空间中对其进行变换。

具体的演示见我另外的博客

有一部分Widget都有一个 child 属性,用于容纳唯一的子Widget。

例如:Container、Center、Padding、Align等Widget。

还有一部分Widget允许存在多个子Widget,用 children 作为属性。

例如:Row、Column、Stack等Widget。

在StatefulWidget调用createState之后,框架将新的状态插入树种,然后调用状态对象的initState。子类化State可以重写initState,以完成仅需要一次执行的工作。当然在initState的实现中需要调用super.initState

当一个状态对象不再需要时,框架调用状态对象的dispose。也可以通过覆盖dispose方法来执行清理工作。

OVER~


标题名称:flutter视图的简单介绍
标题链接:http://azwzsj.com/article/dsgohgj.html