HarmonyOSBaseLibs/README.md

378 行
7.3 KiB
Markdown

2024-05-07 17:41:21 +08:00
# 基础开发工具包
2024-10-14 16:02:55 +08:00
2024-05-07 17:41:21 +08:00
```shell
ohpm install @szyx/sdk_base
```
## 1.[utils](./src/main/ets/utils)
### 1.1.[AppStorageHelper](./src/main/ets/utils/AppStorageHelper.ets)
2024-10-14 16:02:55 +08:00
2024-05-07 17:41:21 +08:00
> 缓存工具类,运行时存储,应用停止运行后清空
```typescript
import { AppStorageHelper } from '@szyx/sdk_base/Index'
// 存储string数据
AppStorageHelper.save(StorageKeys.CLIENT_ID, d)
2024-10-14 16:02:55 +08:00
// 获取存储的strign数据
2024-05-07 17:41:21 +08:00
let d = AppStorageHelper.get(StorageKeys.CLIENT_ID)
2024-10-10 20:12:49 +08:00
// 删除指定存储
AppStorageHelper.delete(StorageKeys.CLIENT_ID)
2024-05-07 17:41:21 +08:00
```
### 1.2.[PreferencesHelper](./src/main/ets/utils/PreferencesHelper.ets)
2024-10-14 16:02:55 +08:00
2024-05-07 17:41:21 +08:00
> 永久存储类,应用停止后也不会清空
> 需要验证,更新应用会不会被清理
> 可存储类型 `number | string | boolean | Array<number> | Array<string> | Array<boolean> | Uint8Array`
```typescript
import { PreferencesHelper } from '@szyx/sdk_base/Index'
2024-10-14 16:02:55 +08:00
2024-05-07 17:41:21 +08:00
// 存储数据
PreferencesHelper.put(StorageKeys.CLIENT_ID, value)
2024-10-14 16:02:55 +08:00
// 获取存储的数据
2024-05-07 17:41:21 +08:00
PreferencesHelper.get(StorageKeys.CLIENT_ID).then(res => {
console.log('>>>>>', res)
2024-10-10 20:12:49 +08:00
})
2024-10-14 16:02:55 +08:00
// 删除存储的数据
2024-10-10 20:12:49 +08:00
PreferencesHelper.delete(StorageKeys.CLIENT_ID).then(() => {
console.log('>>>>>')
2024-05-07 17:41:21 +08:00
})
```
### 1.3.[ToolsHelper](./src/main/ets/utils/ToolsHelper.ets)
2024-10-14 16:02:55 +08:00
2024-05-07 17:41:21 +08:00
> 常用方法工具栏
> 基础方法
2024-10-14 16:02:55 +08:00
2024-05-07 17:41:21 +08:00
#### 1.3.1.弹出Toast提示
```typescript
import { ToolsHelper } from '@szyx/sdk_base';
2024-10-14 16:02:55 +08:00
2024-05-07 17:41:21 +08:00
ToolsHelper.showMessage('Hello Word!')
```
2024-10-14 16:02:55 +08:00
#### 1.3.2.打印日志
> 打印格式:`========>${顶层调用栈}::`
```typescript
import { ToolsHelper } from '@szyx/sdk_base';
ToolsHelper.log('Hello Word!')
```
#### 1.3.3.获取调用栈第一个
```typescript
import { ToolsHelper } from '@szyx/sdk_base';
ToolsHelper.getStackKey()
```
#### 1.3.4.获取设备信息
```typescript
import { ToolsHelper } from '@szyx/sdk_base';
ToolsHelper.getDeviceInfo()
```
2024-05-07 17:41:21 +08:00
### 1.4.[ValidatorHelper](./src/main/ets/utils/ValidatorHelper.ets)
2024-10-14 16:02:55 +08:00
2024-05-07 17:41:21 +08:00
> 常用正则
#### 1.4.1.验证手机号
```typescript
import { ValidatorHelper } from '@szyx/sdk_base';
2024-10-14 16:02:55 +08:00
2024-08-30 19:03:07 +08:00
ValidatorHelper.isPhone('13800000000')
2024-05-07 17:41:21 +08:00
```
2024-08-30 19:03:07 +08:00
### 1.5.[AlgorithmHelper](./src/main/ets/utils/AlgorithmHelper.ets)
2024-10-14 16:02:55 +08:00
2024-08-30 19:03:07 +08:00
> 计算相关
#### 1.5.1.验证手机号
```typescript
import { AlgorithmHelper } from '@szyx/sdk_base';
2024-10-14 16:02:55 +08:00
2024-08-30 19:03:07 +08:00
AlgorithmHelper.calculateDistance(x1, y1, x2, y2)
```
### 1.6.[XWebHelper](./src/main/ets/utils/XWebHelper.ets)
2024-10-14 16:02:55 +08:00
2024-05-07 17:41:21 +08:00
> 打开webview页面
```typescript
import { XWebHelper } from '@szyx/sdk_base';
2024-10-14 16:02:55 +08:00
2024-05-07 17:41:21 +08:00
// 必须先引入,否则无法跳转
const XWebview = import('../pages/XWebview');
2024-10-14 16:02:55 +08:00
2024-05-07 17:41:21 +08:00
XWebHelper.openWeb({
url: 'https://www.baidu.com',
title: '百度一下',
})
```
## 2.[Dialog](./src/main/ets/dialog)
2024-10-14 16:02:55 +08:00
2024-05-07 17:41:21 +08:00
### 2.1.弹出list选中弹窗
2024-10-14 16:02:55 +08:00
2024-05-07 17:41:21 +08:00
```typescript
import { XDialogController } from '../dialog/XDialogController';
import { XDialogList } from '../dialog/XDialogList';
2024-10-14 16:02:55 +08:00
@
Component
struct
MyView
{
2024-05-07 17:41:21 +08:00
// 控制器,控制开关
dialogController: XDialogController = {} as XDialogController
2024-10-14 16:02:55 +08:00
build()
{
Column()
{
Button
({ buttonStyle: ButtonStyleMode.TEXTUAL })
{
2024-05-07 17:41:21 +08:00
Image($r('sys.media.ohos_ic_public_more'))
.width(26).height(26)
2024-10-14 16:02:55 +08:00
}
.
width(65)
.onClick(() => {
if (this.dialogController != null) {
this.dialogController.open()
}
})
2024-05-07 17:41:21 +08:00
XDialogList({
// 控制器
controller: this.dialogController,
// 标题(可选)
title: '选择您的操作',
// 选择内容列表
values: ['刷新', '浏览器打开', '分享', '复制地址'],
// 用户选择事件
onSelected: (index: number, value: string) => {
ToolsHelper.showMessage(`用户选择了第${index}个,内容为:${value}`)
},
// 用户取消事件
onCancel: () => {
ToolsHelper.showMessage('用户取消操作')
},
// 是否可取消(点击空白处,或者物理返回键)
autoCancel: true
})
2024-10-14 16:02:55 +08:00
}
.
width('100%').height('100%')
2024-05-07 17:41:21 +08:00
}
}
```
2024-10-14 16:02:55 +08:00
## 3.[网络请求](./src/main/ets/http/HttpHelper.ets)
2024-09-04 11:08:23 +08:00
> 使用时建议二次封装
2024-10-14 16:02:55 +08:00
>
2024-05-07 17:41:21 +08:00
> 参数定义
> ```typescript
> /**
> *
> * @param url url地址
> * @param data 请求参数
> * @param headers 请求头
> * @param apiNo 请求标识,取消请求或者去重使用|考虑做自动重试使用
> * @returns
> */
> ```
### 3.1.get请求
2024-10-14 16:02:55 +08:00
2024-05-07 17:41:21 +08:00
```typescript
2024-10-14 16:02:55 +08:00
HttpHelper.get()
.get<HttpResult<T>>(url.url.startsWith('http') ? url.url : GlobalValue.getInstance().envUrl + url.url,
data ? JSON.stringify(data) : undefined, {
userId: GlobalValue.getInstance().userId,
clientId: GlobalValue.getInstance().getClientId(),
version: ConstantValue.VERSION,
deviceType: '01',
timeStamp: timeStamp + '',
sign: sign,
phoneModel: 'sign',
phoneVersion: 'sign',
phoneBrand: 'HarmonyOS'
}, url.apiNo)
.then((res: HttpResult<T>) => {
if (res.status === '0') {
resolve(res.data as T)
} else {
reject(new Error(res.message))
}
2024-05-07 17:41:21 +08:00
2024-10-14 16:02:55 +08:00
})
.catch((error: Error) => {
reject(error)
})
2024-05-07 17:41:21 +08:00
```
2024-10-14 16:02:55 +08:00
2024-05-07 17:41:21 +08:00
### 3.2.postJson
2024-10-14 16:02:55 +08:00
2024-05-07 17:41:21 +08:00
```typescript
HttpHelper.get()
.post<HttpResult<T>>(url.url.startsWith('http') ? url.url : GlobalValue.getInstance().envUrl + url.url,
data ? JSON.stringify(data) : undefined, {
userId: GlobalValue.getInstance().userId,
clientId: GlobalValue.getInstance().getClientId(),
version: ConstantValue.VERSION,
deviceType: '01',
timeStamp: timeStamp + '',
sign: sign,
phoneModel: 'sign',
phoneVersion: 'sign',
phoneBrand: 'HarmonyOS'
}, url.apiNo)
.then((res: HttpResult<T>) => {
if (res.status === '0') {
resolve(res.data as T)
} else {
reject(new Error(res.message))
}
})
.catch((error: Error) => {
reject(error)
})
```
2024-10-14 16:02:55 +08:00
2024-09-04 11:08:23 +08:00
## 4.[自定义view](./src/main/ets/view)
2024-10-14 16:02:55 +08:00
2024-09-24 17:52:59 +08:00
### 4.1.[LoadingView](./src/main/ets/view/LoadingView.ets)
2024-05-07 17:41:21 +08:00
2024-09-04 11:08:23 +08:00
> 封装了loading的根布局
```tsx
import { LoadingView } from '@szyx/sdk_base'
@State isLoading: boolean = false
build() {
Stack() {
LoadingView({ isLoading: this.isLoading }) {
Column() {
Text('正常布局')
}
.width('100%')
.height('100%')
}
}
}
```
2024-10-14 16:02:55 +08:00
2024-09-24 17:52:59 +08:00
## 5.[Windows](./src/main/ets/utils/WindowHelper.ets)
2024-10-14 16:02:55 +08:00
2024-09-24 17:52:59 +08:00
### 5.1.弹出自定义窗口
> 弹出自定义窗口
```tsx
import { WindowHelper } from '@szyx/sdk_base'
WindowHelper.open({
name: '登录弹窗',
router:'login'
})
WindowHelper.close()
```
### 5.2.设置沉浸式相关
```tsx
// 初始化
import { WindowHelper } from '@szyx/sdk_base';
export default class AppAbility extends UIAbility {
onWindowStageCreate(windowStage: window.WindowStage): void {
windowStage.loadContent('pages/Index', (err) => {
if (err.code) {
hilog.error(0x0000, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err) ?? '');
return;
}
WindowHelper.windowClass = windowStage.getMainWindowSync()
});
GlobalContext.setContext(this.context)
}
}
```
```tsx
// 需要的界面
// 设置是否全屏
WindowHelper.setWindowLayoutFullScreen(true)
// 隐藏状态栏
WindowHelper.hideStatusBar()
// 显示状态栏
2024-10-11 10:31:18 +08:00
WindowHelper.showStatusBar()
// 顶部安全区高度
WindowHelper.topRectHeight()
// 底部安全区高度
WindowHelper.bottomRectHeight()
2024-09-24 17:52:59 +08:00
```
2024-05-07 17:41:21 +08:00
2024-09-04 11:08:23 +08:00
# **** 常见问题
2024-05-07 17:41:21 +08:00