扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
升级后implements ActivityAware后会有实现onAttachedToEngine方法,FlutterPluginBinding.getFlutterEngine().getRenderer().getBitmap();
创新互联主要从事成都做网站、网站设计、外贸营销网站建设、网页设计、企业做网站、公司建网站等业务。立足成都服务无棣,十余年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:028-86922220
新建一个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方法。
任重而道远
对于一些复杂或不规则的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的准备工作以及画布画笔的功能,具体实战请看下一篇博客。
FlutterViewController *www = [FlutterViewController new]; dart 1.22.1 直接初始化 然后报错,有知道是怎么解决的没
-[__NSCFBoolean objectForKey:]: unrecognized selector sent to instance 0x7fff8019dd18
① 创建原生视图,可提供外界调用的方法 / 属性等。
② 创建遵守 FlutterPlatformViewFactory协议的 NSObject class 类
③ 创建遵守 FlutterPlatformView 协议的 NSObject class 类
④ 在 Appdelegate 中注册
创建个通信 dart 文件
dart 文件中使用:
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流