CN116635828A - Flutter Web应用程序与宿主程序通信方法、计算机设备 - Google Patents
Flutter Web应用程序与宿主程序通信方法、计算机设备 Download PDFInfo
- Publication number
- CN116635828A CN116635828A CN202180003533.3A CN202180003533A CN116635828A CN 116635828 A CN116635828 A CN 116635828A CN 202180003533 A CN202180003533 A CN 202180003533A CN 116635828 A CN116635828 A CN 116635828A
- Authority
- CN
- China
- Prior art keywords
- message
- communication component
- response message
- communication
- web application
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Transfer Between Computers (AREA)
Abstract
本公开是关于一种Flutter Web应用程序与宿主程序通信方法、计算机设备。该方法包括:获取所述Flutter Web应用程序与所述宿主程序之间的通信模式,所述通信模式包括WebSocket通信模式和/或JavaScript通信模式;根据所述通信模式,通过第一通信组件与所述宿主程序进行通信,所述第一通信组件设置在所述Flutter Web应用程序之内且基于预设的信息格式来实现信息交互。本实施例可以利用Flutter框架可设置通道的特点,通过设置第一通信组件可以使Flutter Web应用程序与宿主程序建立通信通道,经由通信通道进行通信可以提高消息监听和传输的效率,从而提升Flutter框架的适用范围。
Description
本公开涉及通信技术领域,尤其涉及一种Flutter Web应用程序与宿主程序通信方法、计算机设备。
Flutter是用于跨平台的UI开发框架,可以运行在Android系统、iOS系统和Windows和Web等平台上,其具有快速开发的特性以及跨平台跨多端的特性。实际应用中,Flutter程序可以编译为Flutter Web程序,然后将Flutter Web程序内置到与各种平台(比如Windows/Linux/Mac/Android系统/iOS系统/Web)的宿主程序中。Flutter Web程序混合原生Web的功能,可以利用Web程序与宿主程序进行交互通信。然而,Flutter框架的一些特点(如通道channel)则无法直接应用到Flutter Web程序。
发明内容
本公开提供一种Flutter Web应用程序与宿主程序通信方法、计算机设备,以解决相关技术的不足。
根据本公开实施例的第一方面,提供一种Flutter Web应用程序与宿主程序通信方法,所述宿主程序包括以下至少一种Android系统、iOS系统、Windows系统或者Web程序,用于为所述Flutter Web应用程序提供可运行的环境;所述方法包括:
获取所述Flutter Web应用程序与所述宿主程序之间的通信模式,所述通信模式包括WebSocket通信模式和/或JavaScript通信模式;
根据所述通信模式,通过第一通信组件与所述宿主程序进行通信,所述第一通信组件设置在所述Flutter Web应用程序之内且基于预设的信息格式来实现信息交互。
可选地,所述预设的信息格式包括以下至少一种方法:初始化参数init、发送消息sendMessage、异步发送消息sendMessageAsync和监听消息onReceiveMessage。
可选地,根据所述通信模式,通过第一通信组件与所述宿主程序进行通信,包括:
当所述通信模式为WebSocket通信模式时,所述Flutter Web应用程序选择第一通信组件,并通过所述第一通信组件与所述宿主程序进行通信。
可选地,所述Flutter Web应用程序通过所述第一通信组件与所述宿主程序进行通信,包括:
所述Flutter Web应用程序向所述第一通信组件发送第一消息,以使所述第一通信组件将所述第一消息转换成第二消息并将所述第二消息发送给所述宿主程序;所述宿主程序根据所述第二消息生成第一响应消息并发送给所述第一通信组件;所述第一消息和所述第二响应信息采用Flutter数据格式实现,所述第二消息和所述第一响应消息采用JavaScript数据格式实现;
所述Flutter Web应用程序获取所述第一通信组件返回的第二响应消息。
可选地,所述Flutter Web应用程序通过所述第一通信组件与所述宿主程序进行通信,包括:
所述Flutter Web应用程序获取所述第一通信组件发送的第四消息,所述第四消息由所述第一通信组件将来自所述宿主程序的第三消息转换得到;
所述Flutter Web应用程序响应于所述第四消息生成第三响应消息并将所述第三响应消息发送给所述第一通信组件,以使所述第一通信组件将所述第三响应消息转换成第四响应消息并发送给所述宿主程序;
所述第四消息和所述第三响应信息采用Flutter数据格式实现,所述第三消息和所述第四响应消息采用JavaScript数据格式实现。
可选地,所述第一通信组件包括所述Flutter Web应用程序中Flutter端提供给所述宿主程序中JavaScript端所调用的接口,以转换Flutter端的Flutter数据格式和JavaScript端的JavaScript数据格式。
可选地,根据所述通信模式,通过第一通信组件与所述宿主程序进行通信,包括:
当所述通信模式为JavaScript通信模式时,所述Flutter Web应用程序选择第一通信组件和第二通信组件,通过所述第一通信组件和所述第二通信组件与所述宿主程序进行通信;
所述第一通信组件设置在所述Flutter Web应用程序之内且基于预设的信息格式来实现信息交互;所述第二通信组件设置在所述宿主程序之内且基于预设的信息格式来实现信息交互。
可选地,所述Flutter Web应用程序通过所述第一通信组件和所述第二通信组件与所 述宿主程序进行通信,包括:
所述Flutter Web应用程序向所述第一通信组件发送第一消息,以使所述第一通信组件将所述第一消息转换成第二消息并将所述第二消息发送给第二通信组件,所述第二通信组件将所述第二消息转换成第三消息并发送给所述宿主程序;所述宿主程序根据所述第三消息生成第一响应消息并发送给所述第二通信组件,以使所述第二通信组件将所述第一响应消息转换成第二响应消息并发送给所述第一通信组件;所述第一通信组件将所述第二响应消息转换成第三响应消息;所述第一消息和所述第三响应信息采用Flutter数据格式实现,所述第二消息和所述第二响应消息采用JavaScript数据格式实现,所述第三消息和所述第一响应消息采用宿主程序的数据格式实现;
所述Flutter Web应用程序获取所述第一通信组件返回的第三响应消息。
可选地,所述Flutter Web应用程序通过所述第一通信组件和所述第二通信组件与所述宿主程序进行通信,包括:
所述Flutter Web应用程序获取所述第一通信组件发送的第四消息,所述第四消息由所述第一通信组件将来自第二通信组件的第五消息转换得到,所述第五消息由所述第二通信组件将来自所述宿主程序的第六消息转换得到;
所述Flutter Web应用程序响应于所述第四消息生成第四响应消息并将所述第四响应消息发送给所述第一通信组件,以使所述第一通信组件将所述第四响应消息转换成第五响应消息并发送给所述第二通信组件,以及所述第二通信组件将所述第五响应消息转换成第六响应消息后发送给所述宿主程序;
所述第四消息和所述第四响应信息采用Flutter数据格式实现,所述第五消息和所述第五响应消息采用JavaScript数据格式实现;所述第六消息和所述第六响应消息采用宿主程序的数据格式实现。
可选地,所述第二通信组件包括封装Dart脚本库而获得的接口,以转换JavaScript端的JavaScript数据格式和宿主程序对应数据格式。
根据本公开实施例的第二方面,提供一种通信方法,应用于Flutter Web应用程序,所述方法包括:
获取所述Flutter Web应用程序与宿主程序之间的通信模式,所述通信模式包括WebSocket通信模式和/或JavaScript通信模式;
根据所述通信模式,通过第一通信组件与所述宿主程序进行通信,所述第一通信组件设置在所述Flutter Web应用程序之内且基于预设的信息格式来实现信息交互。
可选地,所述预设的信息格式包括以下至少一种方法:初始化参数init、发送消息sendMessage、异步发送消息sendMessageAsync和监听消息onReceiveMessage。
可选地,当所述通信模式为WebSocket通信模式时,所述Flutter Web应用程序通过所述第一通信组件与所述宿主程序进行通信,包括:
向所述第一通信组件发送第一消息,以使所述第一通信组件将所述第一消息转换成第二消息并将所述第二消息发送给所述宿主程序;
获取所述宿主程序返回的第一响应消息并转换成第二响应消息,获得第二响应消息。
可选地,当所述通信模式为WebSocket通信模式时,所述Flutter Web应用程序通过所述第一通信组件与所述宿主程序进行通信,包括:
获取所述第一通信组件发送的第四消息,所述第四消息由所述第一通信组件将来自所述宿主程序的第三消息转换得到;
响应于所述第四消息生成第三响应消息并将所述第三响应消息发送给所述第一通信组件,以使所述第一通信组件将所述第三响应消息转换成第四响应消息并发送给所述宿主程序;
所述第四消息和所述第三响应信息采用Flutter数据格式实现,所述第三消息和所述第四响应消息采用JavaScript数据格式实现。
可选地,当所述通信模式为JavaScript通信模式时,根据所述通信模式,通过第一通信组件与所述宿主程序进行通信,包括:
向所述第一通信组件发送第一消息,以使所述第一通信组件将所述第一消息转换成第二消息并将所述第二消息发送给第二通信组件;
获取所述第二通信组件发送第二响应信息并将所述第二响应消息转换成第三响应消息;
获取所述第一通信组件返回的第三响应消息;
所述第一消息和所述第三响应信息采用Flutter数据格式实现,所述第二消息和所述第二响应消息采用JavaScript数据格式实现。
可选地,当所述通信模式为JavaScript通信模式时,根据所述通信模式,通过第一通信组件与所述宿主程序进行通信,包括:
获取所述第一通信组件发送的第四消息,所述第四消息由所述第一通信组件将来自第二通信组件的第五消息转换得到;
响应于所述第四消息生成第四响应消息并将所述第四响应消息发送给所述第一通信组件,以使所述第一通信组件将所述第四响应消息转换成第五响应消息并发送给所述第二通信组件;
所述第四消息和所述第四响应信息采用Flutter数据格式实现,所述第五消息和所述第五响应消息采用JavaScript数据格式实现。
根据本公开实施例的第三方面,提供一种计算机设备,包括:
处理器;
用于存储所述处理器可执行的计算机程序的存储器;
其中,所述处理器被配置为执行所述存储器中的计算机程序,以实现如第一方面任一项所述的方法。
根据本公开实施例的第四方面,提供一种计算机可读存储介质,当所述存储介质中的可执行的计算机程序由处理器执行时,能够实现如第一方面任一项所述的方法。
本公开的实施例提供的技术方案可以包括以下有益效果:
由上述实施例可知,本公开实施例提供的方案可以将Flutter Web应用程序加载到宿主程序,所述宿主程序包括以下至少一种Android系统、iOS系统、Windows系统或者Web程序,用于为所述Flutter Web应用程序提供可运行的环境;Flutter Web应用程序可以获取与宿主程序之间的通信模式,所述通信模式包括WebSocket通信模式和/或JavaScript通信模式;然后,根据所述通信模式,通过第一通信组件与所述宿主程序进行通信,所述第一通信组件设置在所述Flutter Web应用程序之内且基于预设的信息格式来实现信息交互。这样,本实施例可以利用Flutter框架可设置通道的特点,通过设置第一通信组件可以使Flutter Web应用程序与宿主程序建立通信通道,经由通信通道进行通信可以提高消息监听和传输的效率,从而提升Flutter框架的适用范围。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。
图1是根据一示例性实施例示出的一种Flutter Web应用程序的应用架构示意图。
图2是根据一示例性实施例示出的一种通信模式的流程图。
图3是根据一示例性实施例示出的另一种通信模式的流程图。
图4是根据一示例性实施例示出的一种Flutter Web应用程序与宿主程序通信方法的流程图。
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性所描述的实施例并不代表与本公开相一致的所有实施例。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的装置例子。需要说明的是,在不冲突的情况下,下述的实施例及实施方式中的特征可以相互组合。
为解决上述技术问题,本公开实施例提供了一种Flutter Web应用程序与宿主程序通信方法,图1是根据一示例性实施例示出的一种Flutter Web应用程序和宿主程序的通信架构示意图。参见图1,该Flutter Web应用程序3可以由Flutter应用程序1经过编译步骤2得到。然后,Flutter Web应用程序3被加载到宿主程序5和宿主程序7中,分别形成寄生程序6和寄生程序8。
在一实施例中,宿主程序5可以采用原生程序实现,其中原生程序也叫Native程序,例如Windows系统、Android系统和iOS系统等等。上述Native程序作为宿主程序时,可以为上述Flutter Web应用程序3提供一个可运行的环境,上述可运行的环境也可称之为容器。实际应用中,容器可以是一段代码或者一个框架等。当宿主程序5为原生程序时,其容器可以采用浏览器内核(如图1中的WebBrowser即WEB程序)实现。
在一实施例中,宿主程序7可以采用非原生程序实现,例如Web程序(如图1中的Web)等。上述Web程序作为宿主程序时,可以为上述Flutter Web应用程序3提供一个可运行的环境即容器。
继续参见图1,本实施例中将Flutter Web应用程序3加载到宿主程序5和宿主程序7之后,Flutter Web应用程序3与宿主程序5和宿主程序7分别进行通信时可能会因为不同的通信机制而感知到宿主程序5和宿主程序7属于不同的平台或寄生到不同的宿主。为避免上述情况,本实施例对Flutter Web应用程序和宿主程序作部分改进,从而使Flutter Web应用程序同时满足Native程序和Web程序的使用场景,最终达到对不同平台或宿主无感知的效果。
本实施例中,Flutter Web应用程序内设置有第一通信组件,该第一通信组件设置在Flutter Web应用程序之内且基于预设的信息格式来实现信息交互。其中,预设的信息格式包括以下至少一种方法:初始化参数init、发送消息sendMessage、异步发送消息sendMessageAsync和监听消息onReceiveMessage,结构如下:
IMessenger
+init()
+sendMessage():string
+sendMessageAsync():string
+onReceiveMessage()。
本实施例中Flutter Web应用程序和宿主程序之间可以基于预设的信息格式收发数据,有利于提升传输效率。并且,第一通信组件包括Flutter端提供给宿主程序中JavaScript端所调用的接口,即Flutter端需要提供JavaScript端调用的接口(称为FlutterInterface,FI),代码如下所示:
这样,Flutter Web应用程序通过第一通信组件可以与宿主程序进行通信。其中,上述宿主程序可以采用图1中的Web程序、Windows系统、Android系统程序和iOS系统程序等实现。此时,Flutter Web应用程序可以通过第一通信组件与宿主程序可以建立WebSocket通道,通过该WebSocket通道可以实现消息监听和消息发送。或者说,在WebSocket通信模式下,Flutter Web应用程序可以通过第一通信组件与宿主程序进行通信,流程如图2所示。
参见图2,当Flutter Web应用程序向宿主程序发送消息,包括:Flutter Web应用程序向第一通信组件(即XMessage)发送第一消息。第一通信组件XMessage将第一消息转换成第二消息并将第二消息发送给宿主程序。宿主程序根据第二消息生成第一响应消息并发送给第一通信组件。第一通信组件将第一响应消息转换成第二响应消息。Flutter Web应用程序获取第一通信组件返回的第二响应消息。其中,第一消息和第二响应信息采用Flutter数据格式实现,第二消息和第一响应消息采用JavaScript数据格式实现。这样,Flutter Web应用程序通过第一通信组件完成与宿主程序的一次请求消息和接收消息的操作。
继续参见图2,当宿主程序向Flutter Web应用程序发送消息,包括:
Flutter Web应用程序获取第一通信组件发送的第四消息,该第四消息由第一通信组件将来自宿主程序的第三消息转换得到。Flutter Web应用程序可以响应于第四消息生成第三响应消息并将第三响应消息发送给第一通信组件。第一通信组件第三响应消息转换成第四响应消息并发送给宿主程序。这样,Flutter Web应用程序可以完成宿主程序的一次请求消息响应操作。
另外,WebSocket本身具有长链接的特点,所以本实施例比较容易实现消息的发送和监听,因此可以提高两者消息发送和消息监听的效率。
在一实施例中,宿主程序内设置有第二通信组件,该第二通信组件设置在宿主程序之内且基于预设的信息格式来实现信息交互,其中预设的信息格式与第一通信组件的信息格式相同。该第二通信组件包括封装Dart脚本库而获得的接口,以转换JavaScript端的JavaScript数据格式和宿主程序对应数据格式。即Flutter端发送到JavaScript端的接口(称为JavaScriptInterface,JSI)。
并且,这部分通过封装dart的js库来实现。
封装dart的js库的封装代码实现如下:
这样,Flutter Web应用程序通过第一通信组件和第二通信组件可以与宿主程序进行通信。其中,上述宿主程序可以为图1中的Web程序、Windows系统、Android系统程序和iOS系统程序等。此时,Flutter Web应用程序可以与宿主程序可以建立JavaScript通信通道,通过该JavaScript通信通道可以实现消息监听和消息发送。或者说,在JavaScript通信模式下,Flutter Web应用程序通过第一通信组件和第二通信组件与宿主程序进行通信,流程如图3所示。
参见图3,当Flutter Web应用程序向宿主程序发送消息,包括:
Flutter Web应用程序向Flutter Web应用程序中的第一通信组件发送第一消息。第一通信组件可以将第一消息转换成第二消息并将第二消息发送给第二通信组件。第二通信组件可以将第二消息转换成第三消息并发送给宿主程序。宿主程序可以根据第三消息生成第一响应消息并将第一响应消息发送给第二通信组件。第二通信组件可以将第一响应消息转换成第二响应消息并将第二响应消息发送给第一通信组件。第一通信组件可以将第二响应消息转换成第三响应消息并将第三响应消息发送给Flutter Web应用程序。Flutter Web应用程序可以获取第一通信组件返回的第三响应消息。第一消息和第三响应信息采用Flutter数据格式实现,第二消息和第二响应消息采用JavaScript数据格式实现,第三消息和第一响应消息采用宿主程序的数据格式实现。这样,这样,Flutter Web应用程序通过第一通信组件和第二通信组件完成与宿主程序的一次请求消息和接收消息的操作。
继续参见图3,当宿主程序向Flutter Web应用程序发送消息,包括:宿主程序可以向第二通信组件发送第六消息。第二通信组件将来自所述宿主程序的第六消息转换成第五消息并将第五消息发送给第一通信组件。第一通信组件可以将第五消息转换成第四消息并将第四消息发送给Flutter Web应用程序。Flutter Web应用程序可以响应于接收到第四消息生成第四响应消息并将第四响应消息发送给第一通信组件。第一通信组件将第四响应消息转换成第五响应消息并第五响应信息发送给第二通信组件。第二通信组件将第五响应消息转换成第六响应消息后发送给宿主程序。这样,Flutter Web应用程序可以通过第一通信组件和第二通信组件完成宿主程序的一次请求消息响应操作。
上述实施例的内容介绍了WebSocket通信模式和JavaScript通信模式的内容,可理解的是,在图1所示的架构内,Flutter Web应用程序内可以存储预设配置信息,该预设配置信息内包括WebSocket通信模式和JavaScript通信模式。因此,Flutter Web应用 程序可以获取预设配置信息中的通信模式,然后根据通信模式与宿主程序建立通信连接,并基于上述通信连接与宿主进行通信。也就是说,Flutter Web应用程序可以通过第一通信组件以及第一通信组件和第二通信组件与宿主程序进行通信。由于第一通信组件和第二通信组件的存在,Flutter Web应用程序可以无感知的与各宿主程序进行通信,提高了通信效果。或者说,对于Flutter的开发人员或者维护人员来说,由于第一通信组件和第二通信组件的存在,其仅需要在Flutter端开发程序或者维护程序即可,无需为适应宿主程序作相应的工作,使开发用户或者维护人员无感于宿主程序的类型,提升效率。
基于图1所示的架构,本公开实施例提供了一种Flutter Web应用程序与宿主程序通信方法,参见图4,所述方法包括:
在步骤41中,获取所述Flutter Web应用程序与所述宿主程序之间的通信模式,所述通信模式包括WebSocket通信模式和/或JavaScript通信模式;
在步骤42中,根据所述通信模式,通过第一通信组件与所述宿主程序进行通信,所述第一通信组件设置在所述Flutter Web应用程序之内且基于预设的信息格式来实现信息交互。
本公开实施例提供的方案中Flutter Web应用程序可以选择通信模式,即选择第一通信组件以及第一通信组件和第二通信组件与宿主程序进行通信。本实施例中通过设置第一通信组件可以使Flutter Web应用程序与宿主程序建立WebSocket通信;以及通过第一通信组件和第二通信组件与宿主程序进行JavaScript通信,从而使Flutter Web应用程序适用于不同的平台,达到对不同平台无感知的效果。
在一实施例中,所述预设的信息格式包括以下至少一种方法:初始化参数init、发送消息sendMessage、异步发送消息sendMessageAsync和监听消息onReceiveMessage。
在一实施例中,根据所述通信模式,通过第一通信组件与所述宿主程序进行通信,包括:
当所述通信模式为WebSocket通信模式时,所述Flutter Web应用程序选择第一通信组件,并通过所述第一通信组件与所述宿主程序进行通信。
在一实施例中,所述Flutter Web应用程序通过所述第一通信组件与所述宿主程序进行通信,包括:
所述Flutter Web应用程序向所述第一通信组件发送第一消息,以使所述第一通信组件将所述第一消息转换成第二消息并将所述第二消息发送给所述宿主程序;所述宿 主程序根据所述第二消息生成第一响应消息并发送给所述第一通信组件;所述第一消息和所述第二响应信息采用Flutter数据格式实现,所述第二消息和所述第一响应消息采用JavaScript数据格式实现;
所述Flutter Web应用程序获取所述第一通信组件返回的第二响应消息。
在一实施例中,所述Flutter Web应用程序通过所述第一通信组件与所述宿主程序进行通信,包括:
所述Flutter Web应用程序获取所述第一通信组件发送的第四消息,所述第四消息由所述第一通信组件将来自所述宿主程序的第三消息转换得到;
所述Flutter Web应用程序响应于所述第四消息生成第三响应消息并将所述第三响应消息发送给所述第一通信组件,以使所述第一通信组件将所述第三响应消息转换成第四响应消息并发送给所述宿主程序;
所述第四消息和所述第三响应信息采用Flutter数据格式实现,所述第三消息和所述第四响应消息采用JavaScript数据格式实现。
在一实施例中,所述第一通信组件包括所述Flutter Web应用程序中Flutter端提供给所述宿主程序中JavaScript端所调用的接口,以转换Flutter端的Flutter数据格式和JavaScript端的JavaScript数据格式。
在一实施例中,根据所述通信模式,通过第一通信组件与所述宿主程序进行通信,包括:
当所述通信模式为JavaScript通信模式时,所述Flutter Web应用程序选择第一通信组件和第二通信组件,通过所述第一通信组件和所述第二通信组件与所述宿主程序进行通信;
所述第一通信组件设置在所述Flutter Web应用程序之内且基于预设的信息格式来实现信息交互;所述第二通信组件设置在所述宿主程序之内且基于预设的信息格式来实现信息交互。
在一实施例中,所述Flutter Web应用程序通过所述第一通信组件和所述第二通信组件与所述宿主程序进行通信,包括:
所述Flutter Web应用程序向所述第一通信组件发送第一消息,以使所述第一通信组件将所述第一消息转换成第二消息并将所述第二消息发送给第二通信组件,所述第 二通信组件将所述第二消息转换成第三消息并发送给所述宿主程序;所述宿主程序根据所述第三消息生成第一响应消息并发送给所述第二通信组件,以使所述第二通信组件将所述第一响应消息转换成第二响应消息并发送给所述第一通信组件;所述第一通信组件将所述第二响应消息转换成第三响应消息;所述第一消息和所述第三响应信息采用Flutter数据格式实现,所述第二消息和所述第二响应消息采用JavaScript数据格式实现,所述第三消息和所述第一响应消息采用宿主程序的数据格式实现;
所述Flutter Web应用程序获取所述第一通信组件返回的第三响应消息。
在一实施例中,所述Flutter Web应用程序通过所述第一通信组件和所述第二通信组件与所述宿主程序进行通信,包括:
所述Flutter Web应用程序获取所述第一通信组件发送的第四消息,所述第四消息由所述第一通信组件将来自第二通信组件的第五消息转换得到,所述第五消息由所述第二通信组件将来自所述宿主程序的第六消息转换得到;
所述Flutter Web应用程序响应于所述第四消息生成第四响应消息并将所述第四响应消息发送给所述第一通信组件,以使所述第一通信组件将所述第四响应消息转换成第五响应消息并发送给所述第二通信组件,以及所述第二通信组件将所述第五响应消息转换成第六响应消息后发送给所述宿主程序;
所述第四消息和所述第四响应信息采用Flutter数据格式实现,所述第五消息和所述第五响应消息采用JavaScript数据格式实现;所述第六消息和所述第六响应消息采用宿主程序的数据格式实现。
在一实施例中,所述第二通信组件包括封装Dart脚本库而获得的接口,以转换JavaScript端的JavaScript数据格式和宿主程序对应数据格式。
基于图1所示的架构,本公开实施例提供了一种通信方法,应用于Flutter Web应用程序,所述方法包括:
获取所述Flutter Web应用程序与宿主程序之间的通信模式,所述通信模式包括WebSocket通信模式和/或JavaScript通信模式;
根据所述通信模式,通过第一通信组件与所述宿主程序进行通信,所述第一通信组件设置在所述Flutter Web应用程序之内且基于预设的信息格式来实现信息交互。
在一实施例中,所述预设的信息格式包括以下至少一种方法:初始化参数init、 发送消息sendMessage、异步发送消息sendMessageAsync和监听消息onReceiveMessage。
在一实施例中,当所述通信模式为WebSocket通信模式时,所述Flutter Web应用程序通过所述第一通信组件与所述宿主程序进行通信,包括:
向所述第一通信组件发送第一消息,以使所述第一通信组件将所述第一消息转换成第二消息并将所述第二消息发送给所述宿主程序;
获取所述宿主程序返回的第一响应消息并转换成第二响应消息,获得第二响应消息。
在一实施例中,当所述通信模式为WebSocket通信模式时,所述Flutter Web应用程序通过所述第一通信组件与所述宿主程序进行通信,包括:
获取所述第一通信组件发送的第四消息,所述第四消息由所述第一通信组件将来自所述宿主程序的第三消息转换得到;
响应于所述第四消息生成第三响应消息并将所述第三响应消息发送给所述第一通信组件,以使所述第一通信组件将所述第三响应消息转换成第四响应消息并发送给所述宿主程序;
所述第四消息和所述第三响应信息采用Flutter数据格式实现,所述第三消息和所述第四响应消息采用JavaScript数据格式实现。
在一实施例中,当所述通信模式为JavaScript通信模式时,根据所述通信模式,通过第一通信组件与所述宿主程序进行通信,包括:
向所述第一通信组件发送第一消息,以使所述第一通信组件将所述第一消息转换成第二消息并将所述第二消息发送给第二通信组件;
获取所述第二通信组件发送第二响应信息并将所述第二响应消息转换成第三响应消息;
获取所述第一通信组件返回的第三响应消息;
所述第一消息和所述第三响应信息采用Flutter数据格式实现,所述第二消息和所述第二响应消息采用JavaScript数据格式实现。
在一实施例中,当所述通信模式为JavaScript通信模式时,根据所述通信模式,通过第一通信组件与所述宿主程序进行通信,包括:
获取所述第一通信组件发送的第四消息,所述第四消息由所述第一通信组件将来自第二通信组件的第五消息转换得到;
响应于所述第四消息生成第四响应消息并将所述第四响应消息发送给所述第一通信组件,以使所述第一通信组件将所述第四响应消息转换成第五响应消息并发送给所述第二通信组件;
所述第四消息和所述第四响应信息采用Flutter数据格式实现,所述第五消息和所述第五响应消息采用JavaScript数据格式实现。
需要说明的是,本实施例中示出的方法与上述图1所示实施例的内容相匹配,可以参考上述程序实施例的内容,在此不再赘述。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件程序实现时,可以全部或部分地以计算机程序产品的形式实现。该计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行该计算机指令时,全部或部分地产生按照本公开实施例中的流程或功能。该计算机可以是通用计算机、专用计算机、计算机网络或者其他可编程装置。该计算机指令可以存储在计算机可读存储介质中。该计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包括一个或多个可用介质集成的服务器、数据中心等数据存储设备。该可用介质可以是磁性介质(例如,软盘、磁盘、磁带)、光介质(例如,数字视频光盘(digital video disc,DVD))、或者半导体介质(例如固态硬盘(solid state drives,SSD))等。
本公开的一些实施例提供了一种计算机可读存储介质(例如,非暂态计算机可读存储介质),该计算机可读存储介质中存储有计算机程序指令,计算机程序指令在处理器上运行时,使得计算机执行如上述实施例中任一实施例所述的数据处理方法,例如所述的数据处理方法中的一个或多个步骤。
示例性的,上述计算机可读存储介质可以包括,但不限于:磁存储器件(例如,硬盘、软盘或磁带等),光盘(例如,CD(Compact Disk,压缩盘)、DVD(Digital Versatile Disk,数字通用盘)等),智能卡和闪存器件(例如,EPROM(Erasable Programmable Read-Only Memory,可擦写可编程只读存储器)、卡、棒或钥匙驱动器等)。本公开描述的各种计算机可读存储介质可代表用于存储信息的一个或多个设备和/或其它机器可读存储介质。术语“机器可读存储介质”可包括但不限于,无线信道和能够存储、包含和/或承载指令和/或数据的各种其它介质。
本公开实施例中所提到的处理器可以是中央处理器(Central Processing Unit,CPU),通用处理器,数字信号处理器(Digital Signal Processor,DSP),专用集成电路(Application-Specific Integrated Circuit,ASIC),现场可编程门阵列(Field Programmable Gate Array,FPGA)或者其他可编程逻辑器件、晶体管逻辑器件、硬件部件或者其任意组合。其可以实现或执行结合本公开所描述的各种示例性的逻辑方框和模块。处理器也可以是实现计算功能的组合,例如包含一个或多个微处理器组合,DSP和微处理器的组合等等。
此外,本公开实施例所提到的存储器可以是随机存取存储器(Random Access Memory,RAM)、闪存、只读存储器(Read Only Memory,ROM)、可擦除可编程只读存储器(Erasable Programmable ROM,EPROM)、电可擦可编程只读存储器(Electrically EPROM,EEPROM)、寄存器、硬盘、移动硬盘、只读光盘(CD-ROM)或者本领域熟知的任何其它形式的存储介质。
本领域技术人员在考虑说明书及实践这里公开的公开后,将容易想到本公开的其它实施方案。本公开旨在涵盖任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由下面的权利要求指出。
应当理解的是,本公开并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本公开的范围仅由所附的权利要求来限制。
Claims (18)
- 一种Flutter Web应用程序与宿主程序通信方法,其特征在于,所述宿主程序包括以下至少一种Android系统、iOS系统、Windows系统或者Web程序,用于为所述Flutter Web应用程序提供可运行的环境;所述方法包括:获取所述Flutter Web应用程序与所述宿主程序之间的通信模式,所述通信模式包括WebSocket通信模式和/或JavaScript通信模式;根据所述通信模式,通过第一通信组件与所述宿主程序进行通信,所述第一通信组件设置在所述Flutter Web应用程序之内且基于预设的信息格式来实现信息交互。
- 根据权利要求1所述的方法,其特征在于,所述预设的信息格式包括以下至少一种方法:初始化参数init、发送消息sendMessage、异步发送消息sendMessageAsync和监听消息onReceiveMessage。
- 根据权利要求1所述的方法,其特征在于,根据所述通信模式,通过第一通信组件与所述宿主程序进行通信,包括:当所述通信模式为WebSocket通信模式时,所述Flutter Web应用程序选择第一通信组件,并通过所述第一通信组件与所述宿主程序进行通信。
- 根据权利要求3所述的方法,其特征在于,所述Flutter Web应用程序通过所述第一通信组件与所述宿主程序进行通信,包括:所述Flutter Web应用程序向所述第一通信组件发送第一消息,以使所述第一通信组件将所述第一消息转换成第二消息并将所述第二消息发送给所述宿主程序;所述宿主程序根据所述第二消息生成第一响应消息并发送给所述第一通信组件;所述第一消息和所述第二响应信息采用Flutter数据格式实现,所述第二消息和所述第一响应消息采用JavaScript数据格式实现;所述Flutter Web应用程序获取所述第一通信组件返回的第二响应消息。
- 根据权利要求3所述的方法,其特征在于,所述Flutter Web应用程序通过所述第一通信组件与所述宿主程序进行通信,包括:所述Flutter Web应用程序获取所述第一通信组件发送的第四消息,所述第四消息由所述第一通信组件将来自所述宿主程序的第三消息转换得到;所述Flutter Web应用程序响应于所述第四消息生成第三响应消息并将所述第三响应消息发送给所述第一通信组件,以使所述第一通信组件将所述第三响应消息转换成第四响应消息并发送给所述宿主程序;所述第四消息和所述第三响应信息采用Flutter数据格式实现,所述第三消息和所述 第四响应消息采用JavaScript数据格式实现。
- 据权利要求1~5任一项所述的方法,其特征在于,所述第一通信组件包括所述Flutter Web应用程序中Flutter端提供给所述宿主程序中JavaScript端所调用的接口,以转换Flutter端的Flutter数据格式和JavaScript端的JavaScript数据格式。
- 根据权利要求1所述的方法,其特征在于,根据所述通信模式,通过第一通信组件与所述宿主程序进行通信,包括:当所述通信模式为JavaScript通信模式时,所述Flutter Web应用程序选择第一通信组件和第二通信组件,通过所述第一通信组件和所述第二通信组件与所述宿主程序进行通信;所述第一通信组件设置在所述Flutter Web应用程序之内且基于预设的信息格式来实现信息交互;所述第二通信组件设置在所述宿主程序之内且基于预设的信息格式来实现信息交互。
- 据权利要求7所述的方法,其特征在于,所述Flutter Web应用程序通过所述第一通信组件和所述第二通信组件与所述宿主程序进行通信,包括:所述Flutter Web应用程序向所述第一通信组件发送第一消息,以使所述第一通信组件将所述第一消息转换成第二消息并将所述第二消息发送给第二通信组件,所述第二通信组件将所述第二消息转换成第三消息并发送给所述宿主程序;所述宿主程序根据所述第三消息生成第一响应消息并发送给所述第二通信组件,以使所述第二通信组件将所述第一响应消息转换成第二响应消息并发送给所述第一通信组件;所述第一通信组件将所述第二响应消息转换成第三响应消息;所述第一消息和所述第三响应信息采用Flutter数据格式实现,所述第二消息和所述第二响应消息采用JavaScript数据格式实现,所述第三消息和所述第一响应消息采用宿主程序的数据格式实现;所述Flutter Web应用程序获取所述第一通信组件返回的第三响应消息。
- 据权利要求7所述的方法,其特征在于,所述Flutter Web应用程序通过所述第一通信组件和所述第二通信组件与所述宿主程序进行通信,包括:所述Flutter Web应用程序获取所述第一通信组件发送的第四消息,所述第四消息由所述第一通信组件将来自第二通信组件的第五消息转换得到,所述第五消息由所述第二通信组件将来自所述宿主程序的第六消息转换得到;所述Flutter Web应用程序响应于所述第四消息生成第四响应消息并将所述第四响应消息发送给所述第一通信组件,以使所述第一通信组件将所述第四响应消息转换成第五响应消息并发送给所述第二通信组件,以及所述第二通信组件将所述第五响应消息转 换成第六响应消息后发送给所述宿主程序;所述第四消息和所述第四响应信息采用Flutter数据格式实现,所述第五消息和所述第五响应消息采用JavaScript数据格式实现;所述第六消息和所述第六响应消息采用宿主程序的数据格式实现。
- 据权利要求7所述的方法,其特征在于,所述第二通信组件包括封装Dart脚本库而获得的接口,以转换JavaScript端的JavaScript数据格式和宿主程序对应数据格式。
- 一种通信方法,其特征在于,应用于Flutter Web应用程序,所述方法包括:获取所述Flutter Web应用程序与宿主程序之间的通信模式,所述通信模式包括WebSocket通信模式和/或JavaScript通信模式;根据所述通信模式,通过第一通信组件与所述宿主程序进行通信,所述第一通信组件设置在所述Flutter Web应用程序之内且基于预设的信息格式来实现信息交互。
- 根据权利要求11所述的方法,其特征在于,所述预设的信息格式包括以下至少一种方法:初始化参数init、发送消息sendMessage、异步发送消息sendMessageAsync和监听消息onReceiveMessage。
- 根据权利要求11所述的方法,其特征在于,当所述通信模式为WebSocket通信模式时,所述Flutter Web应用程序通过所述第一通信组件与所述宿主程序进行通信,包括:向所述第一通信组件发送第一消息,以使所述第一通信组件将所述第一消息转换成第二消息并将所述第二消息发送给所述宿主程序;获取所述宿主程序返回的第一响应消息并转换成第二响应消息,获得第二响应消息。
- 根据权利要求11所述的方法,其特征在于,当所述通信模式为WebSocket通信模式时,所述Flutter Web应用程序通过所述第一通信组件与所述宿主程序进行通信,包括:获取所述第一通信组件发送的第四消息,所述第四消息由所述第一通信组件将来自所述宿主程序的第三消息转换得到;响应于所述第四消息生成第三响应消息并将所述第三响应消息发送给所述第一通信组件,以使所述第一通信组件将所述第三响应消息转换成第四响应消息并发送给所述宿主程序;所述第四消息和所述第三响应信息采用Flutter数据格式实现,所述第三消息和所述第四响应消息采用JavaScript数据格式实现。
- 根据权利要求11所述的方法,其特征在于,当所述通信模式为JavaScript通信 模式时,根据所述通信模式,通过第一通信组件与所述宿主程序进行通信,包括:向所述第一通信组件发送第一消息,以使所述第一通信组件将所述第一消息转换成第二消息并将所述第二消息发送给第二通信组件;获取所述第二通信组件发送第二响应信息并将所述第二响应消息转换成第三响应消息;获取所述第一通信组件返回的第三响应消息;所述第一消息和所述第三响应信息采用Flutter数据格式实现,所述第二消息和所述第二响应消息采用JavaScript数据格式实现。
- 根据权利要求11所述的方法,其特征在于,当所述通信模式为JavaScript通信模式时,根据所述通信模式,通过第一通信组件与所述宿主程序进行通信,包括:获取所述第一通信组件发送的第四消息,所述第四消息由所述第一通信组件将来自第二通信组件的第五消息转换得到;响应于所述第四消息生成第四响应消息并将所述第四响应消息发送给所述第一通信组件,以使所述第一通信组件将所述第四响应消息转换成第五响应消息并发送给所述第二通信组件;所述第四消息和所述第四响应信息采用Flutter数据格式实现,所述第五消息和所述第五响应消息采用JavaScript数据格式实现。
- 一种计算机设备,其特征在于,包括:处理器;用于存储所述处理器可执行的计算机程序的存储器;其中,所述处理器被配置为执行所述存储器中的计算机程序,以实现如权利要求1~16任一项所述的方法。
- 一种计算机可读存储介质,其特征在于,当所述存储介质中的可执行的计算机程序由处理器执行时,能够实现如权利要求1~16任一项所述的方法。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/CN2021/132484 WO2023092292A1 (zh) | 2021-11-23 | 2021-11-23 | Flutter Web应用程序与宿主程序通信方法、计算机设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116635828A true CN116635828A (zh) | 2023-08-22 |
Family
ID=86538548
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202180003533.3A Pending CN116635828A (zh) | 2021-11-23 | 2021-11-23 | Flutter Web应用程序与宿主程序通信方法、计算机设备 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN116635828A (zh) |
WO (1) | WO2023092292A1 (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116795356B (zh) * | 2023-08-21 | 2023-11-24 | 山东为农信息科技有限公司 | Flutter与原生平台的混合开发方法、系统及装置 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH07244644A (ja) * | 1994-03-04 | 1995-09-19 | Mitsubishi Electric Corp | エージェント管理システム |
CN107861754B (zh) * | 2017-11-30 | 2020-12-01 | 阿里巴巴(中国)有限公司 | 数据封装、处理方法、装置及电子设备 |
CN110659028B (zh) * | 2019-09-30 | 2023-02-28 | 北京达佳互联信息技术有限公司 | 数据处理系统、方法、装置、电子设备及存储介质 |
CN113419712A (zh) * | 2021-06-30 | 2021-09-21 | 京东方科技集团股份有限公司 | 跨平台的应用生成方法、跨平台应用调用方法、开发装置 |
-
2021
- 2021-11-23 CN CN202180003533.3A patent/CN116635828A/zh active Pending
- 2021-11-23 WO PCT/CN2021/132484 patent/WO2023092292A1/zh active Application Filing
Also Published As
Publication number | Publication date |
---|---|
WO2023092292A1 (zh) | 2023-06-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107678778B (zh) | 基于Hybrid的兼容方法、适配件、运行装置及系统 | |
CN109145238B (zh) | 一种卡片显示方法、装置及移动设备 | |
CN111158659B (zh) | 自动驾驶应用程序在不同开发平台间对接的方法 | |
JP2013505510A (ja) | スマート・カードをベースにしたブラウジング・システムおよびスマート・カードをベースにしたブラウジング方法およびそのためのスマート・カード | |
US20080147909A1 (en) | Remote USB protocol for a heterogeneous system | |
CN112764946B (zh) | 跨进程数据传输方法、装置、电子设备和存储介质 | |
CN113990354B (zh) | 基于Linux的音频控制方法、装置、设备和存储介质 | |
US10810024B2 (en) | Redirection method and apparatus, and system | |
CN110855686B (zh) | 一种spi协议通信方法、系统、设备及计算机存储介质 | |
CN113297566A (zh) | 沙箱实现方法、装置、设备和存储介质 | |
CN112532585A (zh) | 一种进程间报文传输的方法、设备及介质 | |
CN116635828A (zh) | Flutter Web应用程序与宿主程序通信方法、计算机设备 | |
CN114168460A (zh) | 混合开发中前端代码的远程调试方法、设备及存储介质 | |
CN112154417A (zh) | 经由仿真网络通信信道在应用的单机版本和基于Web的版本之间共享代码库 | |
JP5039946B2 (ja) | クライアント装置およびサーバ装置の間の通信を中継する技術 | |
CN114035967A (zh) | 一种基于服务器的资源共享渲染方法和装置 | |
CN113301004A (zh) | 数据处理方法、装置、通信方法和单网卡虚拟机 | |
CN114675914B (zh) | 虚拟桌面的图像传输方法、装置、电子设备及存储介质 | |
CN111459819B (zh) | 软件测试方法及装置、电子设备、计算机可读介质 | |
CN110333914B (zh) | 一种用于执行目标操作的方法与设备 | |
CN108235822B (zh) | 虚拟sim卡的实现方法及装置、存储介质、电子设备 | |
CN113296876A (zh) | 虚拟机的设备直通方法、设备及存储介质 | |
CN107454124B (zh) | 设备自动化方法及装置 | |
CN114237758B (zh) | 通信连接方法、装置、电子设备及计算机可读存储介质 | |
CN111399932A (zh) | 调用dll的方法、系统、浏览器的处理方法和浏览器 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |