成都网站建设设计

将想法与焦点和您一起共享

flutterview,flutterview deprecated

Flutter插件升级后FlutterView.getBitmap()找不到了

升级后implements ActivityAware后会有实现onAttachedToEngine方法,FlutterPluginBinding.getFlutterEngine().getRenderer().getBitmap();

创新互联主要从事成都做网站、网站设计、外贸营销网站建设、网页设计、企业做网站、公司建网站等业务。立足成都服务无棣,十余年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:028-86922220

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 自定义 View 介绍

对于一些复杂或不规则的UI,我们可能无法使用现有的 Widget 组合去实现,比如需要一个带动画的进度条,

又或者是一个特殊形状的多边形等等,当然有时候我们可以直接用图片去实现,但是并没有达到我们想要

的效果,反而会让我们产生不良的体验。

几乎所有的UI系统都会提供一个自绘UI的接口,这个接口通常会提供一块2D画布Canvas,Canvas内部封装了

一些基本绘制的API,开发者可以通过Canvas绘制各种自定义图形。在Flutter中,提供了一个CustomPaint Widget,

它可以结合一个画笔CustomPainter来实现绘制自定义图形。

我们看看 CustomPaint 构造函数:

1.painter: 背景画笔,会显示在子节点后面;

2.foregroundPainter: 前景画笔,会显示在子节点前面

3.size:当child为null时,代表默认绘制区域大小,如果有child则忽略此参数,画布尺寸则为child尺寸。如果有child但是想指定画布为特定大小,可以使用SizeBox包裹CustomPaint实现。

4.isComplex:是否复杂的绘制,如果是,Flutter会应用一些缓存策略来减少重复渲染的开销。

5.willChange:和isComplex配合使用,当启用缓存时,该属性代表在下一帧中绘制是否会改变。

可以看到,绘制时我们需要提供前景或者背景画笔,两者也可以同时提供,

我们的画笔需要继承 CustomPainter 类,我们在画笔类中实现真正的绘制逻辑。

顾名思义画布的意思,我们绘制布局当然是在一张画布上进行绘制,画布为我们绘制图形提供了很多方法。(熟悉画布的就无需再看了)

在绘制之前我们需要准备画笔 Paint,就如画画一样,你用什么笔就能画什么样的画,在Paint中,

我们可以配置画笔的各种属性如粗细、颜色、样式等。如:

好了,继承CustomPainter类,然后准备好画笔,就可以在画布上尽情的挥洒了!

写的挺简单的,就是介绍了一下自定义view的准备工作以及画布画笔的功能,具体实战请看下一篇博客。

flutter 1.22.1 初始化FlutterViewController 报错

FlutterViewController *www = [FlutterViewController new];     dart 1.22.1 直接初始化 然后报错,有知道是怎么解决的没

-[__NSCFBoolean objectForKey:]: unrecognized selector sent to instance 0x7fff8019dd18

关于 FLutter显示原生视图 View(iOS 篇)并交互

① 创建原生视图,可提供外界调用的方法 / 属性等。

② 创建遵守 FlutterPlatformViewFactory协议的 NSObject class 类

③ 创建遵守 FlutterPlatformView 协议的 NSObject class 类

④ 在 Appdelegate 中注册

创建个通信 dart 文件

dart 文件中使用:


当前文章:flutterview,flutterview deprecated
网页链接:http://chengdu.cdxwcx.cn/article/dsepegs.html