FlutterWeb 和 WebView 原生交互调用
需要创建两个工程,一个是FlutterWeb工程最终打包成Web页面,一个是Flutter原生工程承载一个WebView用来加载Web页面。这样做的好处在于只需要一种语言开发iOS和Android不用对接两次,可以直接使用社区Flutter原生工程的插件,只需要封装给Web调用。
创新互联建站自2013年起,先为团风等服务建站,团风等地企业,进行企业商务咨询服务。为团风企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。
FlutterWeb工程pubspec.yaml添加依赖
Flutter原生工程pubspec.yaml添加依赖
创建一个 toast_channel.dart,定义一个类实现 JavascriptChannel 重写name指定channel名称和onMessageReceived指定调用函数
在WebView的 javascriptChannels 配置上定义的Channel
创建一个 native_channel.dart ,定义一个外部函数通过 @JS("调用的channel和函数名") 注解指定调用的原生函数(JavascriptChannel固定名称为postMessage)
需要使用的地方直接调用
创建一个 js_function.dart,存放被原生调用的函数名称
将要提供给原生调用的函数,通过 js.context[原生调用名称] = 函数 开放给外部调用
如果在FlutterWeb工程要使用这个函数也可以使用@JS注解
WebView 创建时会回调 onWebViewCreated 获得 WebViewController ,WebViewController 调用 runJavascript 会执行JS函数无返回值,调用 runJavascriptReturningResult 会执行JS函数有返回值。
FutureBuilder获取WebViewController, 需要使用的地方直接调用
使用 HTML,CSS,Canvas 和 SVG 元素来渲染。
缺点:会存在不同平台效果不一样。
优点:不加载canvaskit默认使用系统字体,加载过程没有多余开销。
需要用到wasm,WebAssembly 要求需要浏览器支持,WebView Android需要最低需要57,Safari iOS 需要最低需要 11。
缺点:canvaskit 有7m大默认地址在国外首次加载耗时;中文会加载字体库默认地址在国外加载慢。
优点:性能更好,渲染效果一致。
--web-renderer=auto 默认移动端浏览器选择 HTML,桌面端浏览器选择 CanvasKit。
--web-renderer=html 使用 HTML 渲染器
--web-renderer=canvaskit 使用 CanvasKit 渲染器
综上所诉推荐移动端使用HTML渲染更合适,在编译和打包时指定渲染器 --web-renderer=html 。
--debug 模式构建的 Web 应用没有被压缩,且 Tree-shaking 没有执行。
--profile 模式构建的 Web 应用没有被压缩,但 Tree-shaking 执行了。
--release 模式构建的 Web 应用被压缩了,并且 Tree-shaking 执行了
运行命令
flutter run web --dart-define=FLUTTER_WEB_CANVASKIT_URL=./canvaskit/ --web-renderer=html
flutter run web --dart-define=FLUTTER_WEB_CANVASKIT_URL=./canvaskit/ --web-renderer=html --profile
打包命令
flutter build web --dart-define=FLUTTER_WEB_CANVASKIT_URL=./canvaskit/ --web-renderer=html --release
Flutter 通过后台截图生成图片的方式实现高德地图变更maker图标颜色和size
高德地图flutter sdk制作标记点的maker,对于移动端不支持size和颜色变更,顾采用传递自制的uint8list来实现。
web前端未来将会有什么样的发展趋势?
趋势一:更加移动优先
响应式设计显然是目前Web前端开发领域的主要趋势之一,并且这一趋势在未来还将持续一段时间。虽然现在的响应式设计大部分还是以PC版优先,然而如果有一天我们把PC版放到比移动版次要的位置上,也没有什么好奇怪的。因为,目前许多Web前端开发者已经开始转向以移动优先方案来做他们的响应式设计和开发,这就象征着一个重大转变,值得我们跟进的。
趋势二:更多使用快速原型开发工具
众多Web前端开发者从2016年开始尝试使用快速原型开发工具,而在2018年将是这种技术真正爆发的一年。“UXpin、Webflow、Invision以及其它许多快速原型开发工具,让设计师不用写一行代码,就能为网站和服务快速创建低保真和高保真原型,便于设计师衡量它们的可用性和美观性。” Web设计师Jamie Leeson says如是说,“许多工具也允许你在浏览器中设计原型并从工具里真正启动网站自身。”
不管未来前端发展方向如何,可以肯定的是未来前端人才需求依旧很大。想学前端开发专业的机构也很多,你可以去线下试听课程了解一下,例如北大青鸟、南京中博软件学院、南京课工场等等都有试听课程的!
在flutter中,从后台调取的数据是拼音,怎么把它转换成汉字呢???求代码
想要在WPS表格中把汉字转换成拼音或小写字母,只需要运用模块代码编辑功能就能轻松解决,具体操作方法如下:
步骤1、打开要转换成拼音的excel表格,按“Alt+F11”组合键,进入Visual Basic编辑状态。也就是看到的这个灰色的编辑界面。
步骤2、执行“插入→模块”命令,插入一个新模块。再双击插入的模块,进入模块代码编辑状态。
步骤3、看到如下界面。
步骤4、把下面的所有内容复制,粘贴到步骤4中的空白处。
Function pinyin(p As String) As String
i = Asc(p)
Select Case i
Case -20319 To -20318: pinyin = "a "
Case -20317 To -20305: pinyin = "ai "
Case -20304 To -20296: pinyin = "an "
Case -20295 To -20293: pinyin = "ang "
Case -20292 To -20284: pinyin = "ao "
Case -20283 To -20266: pinyin = "ba "
Case -20265 To -20258: pinyin = "bai "
Case -20257 To -20243: pinyin = "ban "
Case -20242 To -20231: pinyin = "bang "
Case -20230 To -20052: pinyin = "bao "
Case -20051 To -20037: pinyin = "bei "
Case -20036 To -20033: pinyin = "ben "
Case -20032 To -20027: pinyin = "beng "
Case -20026 To -20003: pinyin = "bi "
Case -20002 To -19991: pinyin = "bian "
Case -19990 To -19987: pinyin = "biao "
Case -19986 To -19983: pinyin = "bie "
Case -19982 To -19977: pinyin = "bin "
Case -19976 To -19806: pinyin = "bing "
Case -19805 To -19785: pinyin = "bo "
Case -19784 To -19776: pinyin = "bu "
Case -19775 To -19775: pinyin = "ca "
Case -17721 To -17704: pinyin = "he "
Case -17703 To -17702: pinyin = "hei "
Case -17701 To -17698: pinyin = "hen "
Case -17697 To -17693: pinyin = "heng "
Case -17692 To -17684: pinyin = "hong "
Case -17683 To -17677: pinyin = "hou "
Case -17676 To -17497: pinyin = "hu "
步骤5、按下ALT+Q关闭Visual Basic编辑窗口,返回Excel编辑状态。
步骤6、选中转换后的拼音需要放在哪个列,例如要把B列的第2行的内容转换成拼音,放在D列的第2个单元格,输入公式:=getpy(B2),这里的B2,是指源头单元格的坐标。
步骤7、如果要去除拼音之间的空格。去掉空格的拼音放在E列,如果这个未去掉空格的数据原来在D2单元格,去掉空格之后的拼音放在E2单元格,则在E2单元格输: =SUBSTITUTE(D2," ","")。
FlutterJsonBeanFactory插件json使用
使用注解@JSONField
其中name: "list"的list就是后台返回字段名称,deserialize(默认true)是否参与fromJson解析,serialize(默认true)是否参与tojson,
比如包含如下json
可以解析出来list中map的所有字段,并且每个list的map字段不同或者为null问题有会做出处理
helper文件内容
直接传递上面生成的entity就可以自动根据map解析出对应实例,并自动赋值
网络请求实例
dio请求部分
这些操作完成后自动生成如下文件
@JSONField作用在Field时,其name不仅定义了输入key的名称,为了防止后台返回数据不规范,但是flutter端需要按照驼峰命名
a_b_c_entity_helper.dart类提供了eitity类的tojson和fromjson代理方法
json_convert_content.dart提供了json_convert_content.dart.fromJsonAsT方法 根据泛型来解析json成对象
flutter应用长时间在后台,点开黑屏
重新打开即可。
因为软件在后台时间过长,软件会出现一个黑屏动画,就需要重启软件即可恢复。
网页名称:flutter对接后台,flutter 后端交互
地址分享:http://scyingshan.cn/article/dsgihij.html