1作者: flfljh7 个月前
# 在 HarmonyOS Next 中开发一个简单的通用标题导航栏 <p>在日常的页面开发中,大多数页面都需要一个标题栏来显示导航控件和页面信息。为每个页面重复编写这些代码效率低下,并且会导致实现不一致。本指南演示了如何创建一个可重用的标题组件。</p> <p>## 步骤 1:创建 NavBar 组件</p> <p>创建一个新的 ArkTS 文件,使用 `@Component` 装饰的自定义组件:</p> ``` import Utils from &quot;..&#x2F;..&#x2F;..&#x2F;common&#x2F;utils&#x2F;Utils&quot;; @Component export struct NavBar { &#x2F;&#x2F; 组件实现将在此处 } ``` <p>## 步骤 2:实现组件属性和 UI</p> <p>添加属性并构建标题 UI:</p> ``` import Utils from &quot;..&#x2F;..&#x2F;..&#x2F;common&#x2F;utils&#x2F;Utils&quot;; @Component export struct NavBar { @Prop title: string = &#x27;&#x27;; &#x2F;&#x2F; 标题文本 @Prop backImg: string = &#x27;&#x27;; &#x2F;&#x2F; 自定义返回按钮图标路径 @Prop bgColor: string = &#x27;#FFFFFF&#x27;;&#x2F;&#x2F; 标题背景颜色 @Prop customBack?: () =&gt; void; &#x2F;&#x2F; 自定义返回按钮处理程序 @Prop mode: string = &#x27;center&#x27;; &#x2F;&#x2F; 标题对齐方式:&#x27;center&#x27; 或 &#x27;left&#x27; build() { Row() { &#x2F;&#x2F; 返回按钮部分 Row() { Image(this.backImg || Utils.getImgPath(&#x27;home&#x2F;adult_page_back_black.png&#x27;)) .width(Utils.getVp(48)) .height(Utils.getVp(48)) .objectFit(ImageFit.Cover) } .onClick(() =&gt; { &#x2F;&#x2F; 如果提供了自定义处理程序,则使用自定义处理程序,否则使用默认的返回导航 this.customBack ? this.customBack() : router.back(); }) &#x2F;&#x2F; 标题部分 Row() { Text(this.title) .fontColor(&#x27;#191B27&#x27;) .fontSize(Utils.getVp(33)) .fontWeight(FontWeight.Bold) .textAlign(this.mode === &#x27;center&#x27; ? TextAlign.Center : TextAlign.Start) .width(&#x27;100%&#x27;) } .margin({ left: this.mode === &#x27;center&#x27; ? 0 : Utils.getVp(20) }) .flexShrink(1) &#x2F;&#x2F; 允许收缩以适应内容 .height(&#x27;100%&#x27;) } .width(&#x27;100%&#x27;) .padding({ left: Utils.getVp(32), right: Utils.getVp(32) }) .height(Utils.getVp(88)) .backgroundColor(this.bgColor) } } ``` <p>## 步骤 3:在父视图中使用组件</p> <p>### 居中对齐标题示例:</p> ``` import { NavBar } from &#x27;.&#x2F;component&#x2F;NavBar&#x27;; @Entry @Component struct ParentPage { build() { Column() { NavBar({ title: &#x27;页面标题&#x27;, mode: &#x27;center&#x27; }) &#x2F;&#x2F; 页面内容在这里 } .width(&#x27;100%&#x27;) .height(&#x27;100%&#x27;) } } ``` <p>### 左对齐标题示例:</p> ``` import { NavBar } from &#x27;.&#x2F;component&#x2F;NavBar&#x27;; @Entry @Component struct ParentPage { build() { Column() { NavBar({ title: &#x27;页面标题&#x27;, mode: &#x27;left&#x27; }) &#x2F;&#x2F; 页面内容在这里 } .width(&#x27;100%&#x27;) .height(&#x27;100%&#x27;) } } ``` <p>## 自定义选项</p> <p>1. *自定义图标*:使用图像路径传递 `backImg` 属性</p> ``` NavBar({ title: &#x27;设置&#x27;, backImg: Utils.getImgPath(&#x27;icons&#x2F;custom_back.png&#x27;) }) ``` <p>2. *自定义背景*:更改标题颜色</p> ``` NavBar({ title: &#x27;个人资料&#x27;, bgColor: &#x27;#F5F5F5&#x27; }) ``` <p>3. *自定义返回操作*:覆盖默认导航</p> ``` NavBar({ title: &#x27;结账&#x27;, customBack: () =&gt; { &#x2F;* 自定义逻辑 *&#x2F; } }) ``` <p>## 主要特性</p> - *响应式设计*:使用 `Utils.getVp()` 适应不同的屏幕尺寸 - *灵活的布局*:标题对齐选项(居中/左对齐) - *可定制*:支持自定义图标、颜色和行为 - *一致的 UI*:确保应用程序中统一的标题外观 - *易于集成*:基于 props 的简单配置 <p>此实现提供了一个可重用的、可定制的标题组件,消除了代码重复,并确保在整个 HarmonyOS Next 应用程序中提供一致的导航体验。</p>
1作者: flfljh7 个月前
# 开发 Flutter 插件支持 HarmonyOS 的详细指南 ## 0. 环境搭建 *前提条件*:配置 HarmonyOS Flutter 环境 *参考*:[HarmonyOS Flutter 环境搭建指南](https://juejin.cn/post/7317214081261207603) *注意*:下载和编译引擎非常耗时。如有需要,可申请预构建的引擎。 ------ ## 1. 获取原始插件代码 ``` git clone <原始插件仓库> ``` ------ ## 2. 生成 OHOS 目录 ``` # 选项 1:直接生成(可能失败) flutter create -t plugin --platforms ohos # 选项 2:创建演示项目并复制 flutter create -t plugin --platforms ohos demo cp -r demo/ohos ./ ``` ------ ## 3. 配置本地依赖 在 `pubspec.yaml` 中添加本地依赖: ``` dependencies: your_plugin: path: ../path_to_plugin ``` ![iwEcAqNwbmcDAQTRCQAF0QS4BrDBDM9ETs38UAcIagyL5gAAB9IGLKvECAAJomltCgAL0gALGaw.png_620x10000q90](https://p.ipic.vip/kjme9r.jpg) ## 4. 构建插件包 ```bash flutter build hap \ --local-engine-src-path /path/to/ohos_flutter/src \ --local-engine ohos_release_arm64 ``` *成功输出*: ```markdown √ Built build/hap/release/entry-release.hap (XX.XMB) ``` ------ ## 5. 验证生成的文件 构建成功后: ![1](https://p.ipic.vip/6k3z3k.png) ## 6. 找到插件 HAR 包 插件输出目录: ```markdown your_plugin/ohos/build/outputs/ └── har └── your_plugin_ohos.har # 插件包 ``` ![2](https://p.ipic.vip/2cjnbx.png) ## 7. 将 HAR 添加到演示项目 将 HAR 复制到演示项目: bash ```bash cp your_plugin_ohos.har demo_portal/module/ohos/libs/ ``` ------ ![3](https://p.ipic.vip/n9sgfo.png) ## 8. 配置 HAR 依赖 ![4](https://p.ipic.vip/wlkxik.png) ## 9. 初始化插件 ![5](https://p.ipic.vip/ee33ah.png) ## 10. 测试插件功能 ![6](https://p.ipic.vip/4fy0hk.png) ![7](https://p.ipic.vip/w30wew.png) ## 11. 开发原生实现 按照以下步骤进行原生开发: 1. 分析现有的 iOS/Android 原生逻辑 2. 在 `ohos/src/main/cpp/` 中创建 HarmonyOS 等效代码 3. 实现平台接口:cpp
1作者: ottaborra7 个月前
我注意到,如果真要说有什么普遍适用的、贯穿所有领域、关于自律、关于动力的建议,那一定是:成长。<p>简单明了。<p>成长的过程是如此微妙,很容易被忽略,远看似乎微不足道,但长期下来却会追上你。我注意到,我从前点餐都会紧张到满头大汗,到现在可以和任何人侃侃而谈。但这并非有意识地实现的,而是在经历了无数次失败、平庸的体验,以及我从未想过会带来任何结果的交流之后才发生的。至少从我的经验来看,它绝对不是线性的。所以我很好奇,大家认为最好的成长方式是什么?