添加微信群,试用软件
复制微信号
关键词:f l u t e r、f l u t e r p l u g i n、p l a t f o r m c h a n e l、m e t h o d c h a n e l、f l u t e r p a c k a g e、f l u t e r插件
f l u t e r是g o g l e使用d a r t语言开发的一套移动应用程序开发框架。它不同于其他开发框架:
(1)由于FLUTER使用aot预编译代码作为机器代码,因此其操作效率更高。
(2)FL u t e r的ui控件不使用底层本机控件,而是由skia渲染引擎绘制。由于它不依赖于底层控件,因此具有良好的多终端一致性。
(3)FL UT r的可扩展性也很强。开发人员可以通过PLUG IN与n a t v e进行通信。
在开发f l u t e r的过程中,空闲鱼经常需要各种n a t i v e能力,例如获取设备信息和使用基本网络库。此时,PLUG IN将用于桥接。本文将详细介绍PL u g i n,希望能对f l u t e r开发人员提供一些帮助。
本文首先介绍了FL u t t t e r p u i n的基本原理,然后解释了p l u g i n所依赖的p l a t f r m c h a n e l,然后对“获取剩余功率p l u i n”进行分解,最后与您分享您之前踩过的坑。
在介绍p l u g i n之前,让我们简要了解一下f l u t e r:
f l u t e r框架包括f r a m e w o r k和e n g i n e,它们在各自的p l a t f r m上运行。
e,i,t,s,e,i,t,s,e,i,t,t,s,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t;它还包括渲染、动画、绘图和手势等基本能力。
e n g i n e是用c语言实现的,包括s k i a(二维图形库);d a r t v m(d a r t r u n t i m e);t e x t(文本呈现)等。
事实上,f l u t e r的上层功能是由e n g i n e提供的。正是通过e n g i n e,f l u t e r平滑了每个p l a t f o r m的微分。我们今天要讨论的插件是由e n g i n e提供的pla t f o r m c h a n e l实现的通信。
从上图中,我们可以看到,fl u t e r a p p是由pl u g i n创建的pl a t f o r m c h a n e l调用的。
p l a t f o r m c h a n e l:
f l u t e r a p(c l i e n t),通过m e t h o d c h a n e l类向p l a t f r m发送呼叫消息;n d r o i d p l a t f r m(h o s t),通过m e t h o d c h a n e l类接收呼叫消息;IO s PL a t f o r m(HO s t)通过f l u t e r m h o d c h n e l类接收呼叫消息。
ps:消息编解码器,它是JSON格式的二进制序列化,因此调用方法的参数类型必须在JSON中可序列化。
ps:方法调用,或反向发送调用消息。
n d r o i d p l a t f o r m
f l u t t e c t v i t y是n d r o i d的项目经理。它记录所有的p lu g i n并将p u g i n绑定到f u t e r v i w。
i o s p l a t f o r m
f l u t e r p d e g a t e是IO的p l u g i n经理。它记录所有PLU IN,并将PLU IN绑定到FL u e v e w c o l e r(默认值为r o t v i e w c o l r)。
首先,我们创建一个plu g i n(fl u t e plu g i n b t e r y v e l)项目。p l u g i n也是一个项目,但p r o j e c y p e是不同的。
(1)单击c r e a e e w p r o j e c t或单击f i e>n e w>p r o j e c t;
(2)在左侧菜单中选择f l u t t e r,然后单击n e x t;
(3)输入p r o j e c t n a m e和p r o j e c t l o c a t n,p r o j e c t y p e并选择“p l u g i n”;
(4)最后,单击f i n i s h。
p r o j e c t y p e:
(一)法律、法规申请;
(2)p l u g i n,将突发泄漏的p i、n d r o i d和i o s应用于f l u t e r;
(3)p a c k a g e,封装d a r t组件,例如“浏览大图片w i d g e t”。
PS:PLUGIN由三个代码组成:DART、ADROID和IOS。
3.2.1 m e h o d c h a n e l:f l u t e r a p呼叫n a t i v a p i s
首先,我们给出一个例子,Me t h o d c h a n n是调用它的唯一方法。i n v o k e m t h od()有两个参数:
(1)方法名称;不能是空的;
(2)调用方法的参数,该参数必须可序列化,并且可以为空。
3.2.2e波幅en引线chphannez姿色quasialgebraic:npha引线its波幅eapifz姿色quasialgebraicu引线引线erphapp
3.3.1 p l u g i n注册
在f l u t e r a c t v i t y的o n c r e a t e()方法中,注册p l u g i n。
(1)c h a n e l名称:必须与f l u t e r a p的c h a n l名称一致;
(2)MET h h a n e l和e v e n t h a n e l都需要通过r g i s t r a r,也就是说,f l i t y;
(3)泥石流的h的nd枸杞er的me引线h大澳dch的ne枸杞,的的,me引线h大澳dc的枸杞h的nd枸杞er;
(4)设置e v e n t c h a n e l,即e v e n t c h a n e l s t r m h a n d l r
3.3.2 m e t h o d c a l h a n d l r和e v e n t c h n e l。s t r e a m h a n l e r
大量的电子邮件;
e v e n t c h a n e l。s t r a m h a n d l e r实现了调用f l u t e r a p的e v e n t c h a n e的n a v e。
m e t h o d c a l h a和l e r:
(1)p u b l i c v o i d o n m e t h o d c a l(m e t h o d c a l c a l,r e s u l s u l);
e v e n t c h a n e l。s t r a m h a n d e r:
(1)Pu b l i c o i d o n l i s t n(o b j e c t o b j,e v e n t c h n e l.e v e n t s i n k);
(2)p u b l i c v o i d o n c a n c e l(o b j e c t o b j);
3.4.1 p l u g i n注册
的p枸杞ug我n登记过程的copd的朦胧诗的的的的ndr大澳我d.只有需要的原件的的pde枸杞eg的引线e(f枸杞u引线引线er的pde枸杞eg的引线e).
f枸杞u引线引线erme引线h大澳dch的ne枸杞的f枸杞u引线ere葡萄en引线ch的ne枸杞的要约的fu引线er葡萄我ewc大澳n引线r大澳枸杞er.
3.4.2 f l u t r s t r a m h a和l e r:
现在我们有了PLUG IN,但是如何将其加载到FLUT r AP项目中呢?
这是PUB。PUB是由d a r t语言提供的一种p a c k a g e s管理工具。
说到p a c k a g e,它有两种类型:
(1)d a r t p a c k a g e s:只包括d a r t代码,例如“浏览大图w i d g e t”。
(2)PL u g i n p a c k a g e s:包含的d a r t代码可以调用n d r o i d和i o s实现的n a t v e a p i s,例如“获取剩余功率p l u g i n”。
(1)编辑p u b s p e c y a m l(在ap根目录下)以管理依赖关系;
(2)mol/m3 f z-拟代数u t e r p apha c k apha g eρg e t,或正则n t e z-拟代数z-拟代数正则j单击p apha c k apha g eρg e t
(3)我mp大澳r引线p的ck的ge,re跑的pp.
管理依赖关系有三种方法:h os t e p a c k a g s、g i t p a c k a g e s、p a t h p a c k a g s。
如果你想让更多人使用你的个人主页,你可以把它发布到个人主页上。o r g
□ h alppρt e d p apha c k apha g eρ:
加载h o s t e d p a c k a g e s:
编辑p u b s p e c y a m l:
如果你的代码不经常更改,或者你不想让别人修改,你可以使用git来管理你的代码。
让我们先创建它吧?一个plu-g-in(fl-u-t-re-m-o-t-e-pa-c-k-a-g-e),将其传输到git,然后键入tag。
正在加载g i t p a c k a g e s:
编辑p u b s p e c y a m l:
ps:REF可以指定一个CMIT、BRAH或TAG。
ps:如果你的代码不需要特殊的场景,你可以直接把p a c k a g e放在本地,这对开发和调试非常方便。
在fl u t e r a p项目(fl u t e r a p p p)的根目录中,我们创建一个文件夹(p l u g i n s),然后将插件(fl u t e r p l u g i n b a t e r p l e v e l)移动到p l u g i n s。
加载p a t h p a c k a g s:
编辑p u b s p e c y a m l:
我们已经在p u b s p e c依赖项中添加了y a ml,但是当你打开ios项目时,你看不到p l u g i n?
此时,有必要执行PODINTALL(或PODUPDATE)。
[s e l f.w i n d o w s e t r o o e w c o l e:[f l u t e r v i w c o l e r o l c]
n i b n a m e:n i l b u n d l e:n i l]];
[s e l f.w i n d o w s e t b a c g r o n d c o r:[u i c o r w i t c o r]
] ;
[s e l f.w i n d o w m a k e k y d v i s i b e]
;
r t u r n[s u p e r a p l i c a o n:p p l i c a o n d i d f i i s h l a u n c h i o n s:l a u n c h o o n s];
}
@恩德
默认情况下,将[g e r a t e p l u g i r a n t r e g i s t r y:s e l f]注册到s e l f。r o t v i e w c o n t r o l r。
因此,有必要初始化r o v i w c o n t r o l e r,然后注册p l u g i n。
启动FL UT ER a p后,n a t v e无法调用FL UT ER?
这是因为PLUGNINCHANEL的初始化大约需要15秒,这是一个异步过程。虽然会显示FL u t e r页面,但PLU g i n c h a n e l尚未初始化,因此此时n a t v e会调用FL u t e r。
idle fish的主页是n a t i v e页面,因此w i n d o w的r o t i e r o o o o r r r r r o t i e r o o o r r r r o u e r o o o r r r r o l e r r o e r r o o o o r r r o l e e r o o o o o r r r o l l l e e e r o o o o r r r r r o o l l l l l l u e e r o r o r o o r o o。我们需要将PLUG IN注册到指定的FL UE v i w c o r。
f l u t e r a p d e g a t e。H
我们需要在一个文件中重写上述两个方法,并返回需要在该方法中指定的文件。
作为应用层的ui框架,底层功能仍然依赖于n a t i v e,因此有许多应用场景中f u t e r a p调用n a t i v e a p is。
在调用PLUG in方法的过程中,可能会遇到传递复杂参数的情况(有时需要传递对象),但PLUG in的参数经过JSO n序列化后是二进制数据,因此参数必须是可序列化的。我认为应该有一个对象映射层来支持对象的传输。
当涉及到传递参数时,plugin有一种非常强大的传递纹理的能力。free fish的FL u t r视频实际上是用n a t i v e播放器播放的,然后TEX t u r e s(纹理)被传递给FL u t r a p。
没有供应的闲置鱼类的做法是什么?如何做到这一点?游手好闲的鱼没有货源。闲置市场规模超过万亿。二手电子商务迎来了循环经济的红利。“校园圈”真的能成为游鱼生长的第二个引擎吗?如果闲置的鱼被恶意退回怎么办?开店时如何提高闲置鱼的暴露率?