热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

flutter嵌入HTML5页面,Flutter与JS的双向调用、Flutter中Widget与Html混合加载

题记——执剑天涯,从你的点滴积累开始,所及之处,必精益求精。Flutter是谷歌推出的最新的移动开发框架。如下图所示,上部分

题记

—— 执剑天涯,从你的点滴积累开始,所及之处,必精益求精。

Flutter是谷歌推出的最新的移动开发框架。

如下图所示,上部分的轮播图是使用 Flutter Widget 构建的,下面的博客内容是使用 插件加载的 Html 内容。

f7bd841e353224795dd037002c62489d.gif

这种效果的应用场景 如商品详情页面。

1 前言

小编的性格是用不合适,就去造个轮子,在Flutter 中加载 Html 的以有的插件多多少少满足不了小编的需求,所以小编造了个 flutter_fai_webview 插件,用来处理 Flutter 与 Html 的双向交互。

2 Demo 实现

首先是这个Demo的主体是使用Scaffold来构建的,当然也需要注意要导包的,代码如下

import 'package:flutter/material.dart';

import 'dart:async';

import 'package:flutter_fai_webview/flutter_fai_webview.dart';

import 'package:flutter_swiper/flutter_swiper.dart';

/// 混合页面加载

/// 一般用于商品详情页面的添加

/// 如这里的上半部分是 Flutter Widget 内容 下半部分是 WebView

class DefaultHexRefreshPage2 extends StatefulWidget {

@override

MaxUrlHexRefreshState createState() => MaxUrlHexRefreshState();

}

class MaxUrlHexRefreshState extends State {

String htmlUrl = "https://blog.csdn.net/zl18603543572";

//原生 发送给 Flutter 的消息

String message = "--";

@override

Widget build(BuildContext context) {

return Scaffold(

///标题

appBar: buildAppBar(context),

///页面主体

body: buildFaiWebViewWidget(),

);

}

... ...

}

标题就是一个 AppBar 然后来实时显示 message 内容 ,代码如下:

///标题部分

AppBar buildAppBar(BuildContext context) {

return AppBar(

leading: IconButton(

onPressed: () {

Navigator.pop(context);

},

icon: Icon(Icons.arrow_back_ios),

),

title: Container(

padding: EdgeInsets.only(left: 10, right: 10),

height: 28,

alignment: Alignment(0, 0),

color: Color.fromARGB(90, 0, 0, 0),

child: Text(

message,

style: TextStyle(color: Colors.white, fontSize: 12),

),

),

);

}

然后页面主体部分就是构建的我们的 FaiWebViewWidget 部分:

/// WebView 部分

Container buildFaiWebViewWidget() {

return Container(

child: FaiWebViewWidget(

///下拉刷新

onRefresh: _onRefresh,

//头

headerWidget: buildHeaderWidget(),

//webview 加载网页链接

url: htmlUrl,

//webview 加载信息回调

callback: callBack,

//输出日志

isLog: false,

),

);

}

_onRefresh 就是配置的下拉刷新的回调,如果不需要下拉刷新功能,不配置即可,是可选参数配置:

///如果你需要的话就使用

Future _onRefresh() async {

return await Future.delayed(Duration(seconds: 1), () {

print('refresh');

});

}

属性 headerWidget 用来配置 顶部的 Widget 部分,在这里构建了一个轮播图:

flutter_swiper: ^1.1.6

这里是随机的几个图片

List imageList = [

"https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1603893462481&di=d4c8e6e88762f5a65aec40c02dd8a93b&imgtype=0&src=http%3A%2F%2Fattachments.gfan.com%2Fforum%2Fattachments2%2Fday_110320%2F11032021067b907d3ed754dd93.jpg",

"https://ss1.bdstatic.com/70cFuXSh_Q1YnxGkpoWK1HF6hhy/it/u=1603365312,3218205429&fm=26&gp=0.jpg",

"https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1603893511117&di=661e0441ef2e37676944b61714dc66d5&imgtype=0&src=http%3A%2F%2Ff.hiphotos.baidu.com%2Fzhidao%2Fpic%2Fitem%2Fd1a20cf431adcbefe30c97d9aeaf2edda3cc9f31.jpg"

];

///可滑动的 视图

///在 WebView 上方

Widget buildHeaderWidget() {

return Container(

height: 200.0,

child: new Swiper(

// 横向

scrollDirection: Axis.horizontal,

// 布局构建

itemBuilder: (BuildContext context, int index) {

return new Image.network(

imageList[index],

fit: BoxFit.fill,

);

},

//条目个数

itemCount: imageList.length,

// 自动翻页

autoplay: true,

//点击事件

onTap: (index) {

print(" 点击 " + index.toString());

},

// 相邻子条目视窗比例

viewportFraction: 1,

// 布局方式

//layout: SwiperLayout.STACK,

// 用户进行操作时停止自动翻页

autoplayDisableOnInteraction: true,

// 无线轮播

loop: true,

//当前条目的缩放比例

scale: 1,

),

);

}

以小编的性格,要实现百万Demo随时复制粘贴肯定是需要源码的

当然以小编的性格,肯定是要有视频录制的,目前正在录制中,你可以关注一下 西瓜视频 — 早起的年轻人 随后会上传

本文同步分享在 博客“早起的年轻人”(CSDN)。

如有侵权,请联系 support@oschina.cn 删除。

本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。



推荐阅读
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • 使用正则表达式爬取36Kr网站首页新闻的操作步骤和代码示例
    本文介绍了使用正则表达式来爬取36Kr网站首页所有新闻的操作步骤和代码示例。通过访问网站、查找关键词、编写代码等步骤,可以获取到网站首页的新闻数据。代码示例使用Python编写,并使用正则表达式来提取所需的数据。详细的操作步骤和代码示例可以参考本文内容。 ... [详细]
  • [翻译]PyCairo指南裁剪和masking
    裁剪和masking在PyCairo指南的这个部分,我么将讨论裁剪和masking操作。裁剪裁剪就是将图形的绘制限定在一定的区域内。这样做有一些效率的因素࿰ ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文介绍了九度OnlineJudge中的1002题目“Grading”的解决方法。该题目要求设计一个公平的评分过程,将每个考题分配给3个独立的专家,如果他们的评分不一致,则需要请一位裁判做出最终决定。文章详细描述了评分规则,并给出了解决该问题的程序。 ... [详细]
  • 原文地址:https:www.cnblogs.combaoyipSpringBoot_YML.html1.在springboot中,有两种配置文件,一种 ... [详细]
  • javascript  – 概述在Firefox上无法正常工作
    我试图提出一些自定义大纲,以达到一些Web可访问性建议.但我不能用Firefox制作.这就是它在Chrome上的外观:而那个图标实际上是一个锚点.在Firefox上,它只概述了整个 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 树莓派语音控制的配置方法和步骤
    本文介绍了在树莓派上实现语音控制的配置方法和步骤。首先感谢博主Eoman的帮助,文章参考了他的内容。树莓派的配置需要通过sudo raspi-config进行,然后使用Eoman的控制方法,即安装wiringPi库并编写控制引脚的脚本。具体的安装步骤和脚本编写方法在文章中详细介绍。 ... [详细]
  • 本文介绍了pack布局管理器在Perl/Tk中的使用方法及注意事项。通过调用pack()方法,可以控制部件在显示窗口中的位置和大小。同时,本文还提到了在使用pack布局管理器时,应注意将部件分组以便在水平和垂直方向上进行堆放。此外,还介绍了使用Frame部件或Toplevel部件来组织部件在窗口内的方法。最后,本文强调了在使用pack布局管理器时,应避免在中间切换到grid布局管理器,以免造成混乱。 ... [详细]
  • Java图形化计算器设计与实现
    本文介绍了使用Java编程语言设计和实现图形化计算器的方法。通过使用swing包和awt包中的组件,作者创建了一个具有按钮监听器和自定义界面尺寸和布局的计算器。文章还分享了在图形化界面设计中的一些心得体会。 ... [详细]
  • 今日份分享:Flutter自定义之旋转木马
    今日份分享:Flutter自定义之旋转木马-先上图,带你回到童年时光:效果分析子布局按照圆形顺序放置且平分角度子布局旋转、支持手势滑动旋转、快速滑动抬手继续旋转、自动旋转支持X轴旋 ... [详细]
  • 我用Tkinter制作了一个图形用户界面,有两个主按钮:“开始”和“停止”。请您就如何使用“停止”按钮终止“开始”按钮为以下代码调用的已运行功能提供建议 ... [详细]
  • 第一步:PyQt4Designer设计程序界面该部分设计类同VisvalStudio内的设计,改下各部件的objectName!设计 ... [详细]
author-avatar
平凡书生518
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有