OpenHarmony实战开发-如何使用Web预渲染实现功能介绍。

652 篇文章 4 订阅
647 篇文章 6 订阅

介绍

为了便于大家在使用本案例集时能够更详细的了解各个案例,本案例基于Web预渲染实现了案例介绍功能,即应用右下角的问号icon。

效果图预览

在这里插入图片描述
使用说明

  1. 因为直接加载的线上README,因此本功能需联网使用
  2. 点击icon,即会弹出对应案例的README
  3. 按钮可拖动
  4. 返回或下拉bindSheet上方的dragBar可隐藏帮助页

案例适配说明

为确保案例正确显示其README,请确保entry模块的依赖中@ohos/xxx中的xxx与案例目录名相同

实现思路

1.使用Stack承载Navigation,从而使得icon能够在应用的各个案例(NavDestination承载)上显示。

Stack() {
  Navigation(this.pageStack) {
  //...
  }
  // 帮助功能:在每个案例的右下角添加“帮助”功能
  HelperView()
}

2.使用BindSheet+WebView加载仓上各模块README。

build() {
  Image($r("app.media.help"))
    .bindSheet($$this.isShowReadMe, this.buildReadMeSheet(), {
      //...
  })
}

@Builder
buildReadMeSheet(): void {
  //...
}

3.使用webview预渲染提升用户体验,复用webview实例减少资源占用。

@Builder
function WebBuilder(data: Data) {
  Web({ src: data.url, controller: data.controller })
    .onPageBegin(() => {
      data.controller.onActive();
    })
}

const wrap: WrappedBuilder<Data[]> = wrapBuilder<Data[]>(WebBuilder);

export class NWebNodeController extends NodeController {
  private rootNode: BuilderNode<Data[]> | null = null;

  makeNode(uiContext: UIContext): FrameNode | null {
    if (this.rootNode) {
      return this.rootNode.getFrameNode();
    }
    return null; // 返回null控制动态组件脱离绑定节点
  }

  initWeb(url: string, uiContext: UIContext, controller: WebviewController) {
    if (this.rootNode) {
      return;
    }
    this.rootNode = new BuilderNode(uiContext);
    this.rootNode.build(wrap, { url: url, controller: controller });
  }
}

interface CurrentNode {
  url: string | null;
  webController: webview.WebviewController | null;
  nWebController: NWebNodeController | null;
}

/**
 * 复用webview
 */
function loadUrl(url: string): void {
  if (currentNode.webController) {
    currentNode.url = url;
    currentNode.webController.loadUrl(url);
  }
}

const currentNode: CurrentNode = { url: null, nWebController: null, webController: null };
        
/**
 * 创建web实例,如果已经存在web实例,复用
 * @param url
 * @param uiContext
 */
export function createNWeb(url: string, uiContext: UIContext): void {
  if (currentNode.webController && currentNode.nWebController && currentNode.url !== url) {
    loadUrl(url);
    return;
  }
  clearHelperWeb();
  let baseNode = new NWebNodeController();
  let controller = new webview.WebviewController();
  // 初始化自定义web组件
  baseNode.initWeb(url, uiContext, controller);
  currentNode.url = url;
  currentNode.webController = controller;
  currentNode.nWebController = baseNode;
}

/**
 * 获取NodeController
 */
export function getNWeb(url: string, uiContext: UIContext): NWebNodeController | null {
  if (currentNode.url != url) {
    loadUrl(url);
  }
  return currentNode.nWebController;
}

/**
 * 停止页面加载:当url频繁切换时使用
 */
export function stopWebLoad(): void {
  if (currentNode.url && currentNode.webController) {
    currentNode.webController.stop();
  }
}

4.监听NavPathStack的变更,及时切换url

onPageStackChange(): void {
  if (!this.pageStack.size()) {
    this.helperUrl = HelperConstants.HELPER_URL_HOME;
  } else {
    const size: number = this.pageStack.size();
    let moduleName: string = this.pageStack.getAllPathName()[size-1].split('/')[1];
    this.helperUrl = HelperConstants.HELPER_URL_PROTOTYPE.replace("{placeholder}", moduleName);
  }
}

为了帮助大家更深入有效的学习到鸿蒙开发知识点,小编特意给大家准备了一份全套最新版的HarmonyOS NEXT学习资源,获取完整版方式请点击→HarmonyOS教学视频:https://docs.qq.com/doc/DZVVBYlhuRkZQZlB3

HarmonyOS教学视频:语法ArkTS、TypeScript、ArkUI等…视频教程

在这里插入图片描述
在这里插入图片描述

鸿蒙生态应用开发白皮书V2.0PDF: 获取完整版白皮书方式请点击→https://docs.qq.com/doc/DZVVkRGRUd3pHSnFG?u=a42c4946d1514235863bb82a7b2ac128

在这里插入图片描述

鸿蒙 (Harmony OS)开发学习手册→https://docs.qq.com/doc/DZVVBYlhuRkZQZlB3

一、入门必看

1.应用开发导读(ArkTS)
2………
在这里插入图片描述

二、HarmonyOS 概念→https://docs.qq.com/doc/DZVVBYlhuRkZQZlB3

1.系统定义
2.技术架构
3.技术特性
4.系统安全
5…

在这里插入图片描述

三、如何快速入门?→https://docs.qq.com/doc/DZVVBYlhuRkZQZlB3

1.基本概念
2.构建第一个ArkTS应用
3…

在这里插入图片描述

四、开发基础知识→https://docs.qq.com/doc/DZVVBYlhuRkZQZlB3

1.应用基础知识
2.配置文件
3.应用数据管理
4.应用安全管理
5.应用隐私保护
6.三方应用调用管控机制
7.资源分类与访问
8.学习ArkTS语言
在这里插入图片描述

五、基于ArkTS 开发→https://docs.qq.com/doc/DZVVBYlhuRkZQZlB3

1.Ability开发
2.UI开发
3.公共事件与通知
4.窗口管理
5.媒体
6.安全
7.网络与链接
8.电话服务
9.数据管理
10.后台任务(Background Task)管理
11.设备管理
12.设备使用信息统计
13.DFX
14.国际化开发
15.折叠屏系列
在这里插入图片描述

更多了解更多鸿蒙开发的相关知识可以参考:https://docs.qq.com/doc/DZVVBYlhuRkZQZlB3

  • 15
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值