最近在尝试用ArkTS应用开发语言为HarmonyOS NEXT开发一个家庭菜谱应用,记录一下实现过程中的关键点。这个应用主要功能是展示菜谱列表和详情,支持收藏功能,界面采用声明式UI开发。
数据模型与状态管理
首先定义菜谱数据模型,使用ArkTS的类与接口:
typescript
interface Ingredient {
name: string;
amount: string;
}
class Recipe {
id: number;
name: string;
difficulty: string;
ingredients: Ingredient[];
steps: string[];
isFavorite: boolean = false;
constructor(id: number, name: string, difficulty: string) {
this.id = id;
this.name = name;
this.difficulty = difficulty;
}
}
声明式UI实现
通过@Entry和@Component装饰器构建页面,使用Flex布局:
typescript
@Entry
@Component
struct RecipeListPage {
@state recipes: Recipe[] = [
new Recipe(1, "番茄炒蛋", "简单"),
new Recipe(2, "红烧排骨", "中等")
];
build() {
Column() {
List({ space: 10 }) {
ForEach(this.recipes, (item: Recipe) => {
ListItem() {
RecipeItem({ recipe: item })
}
})
}
.layoutWeight(1)
.width('100%')
}
.height('100%')
.padding(12)
}
}
@Component
struct RecipeItem {
@prop recipe: Recipe;
build() {
Row() {
Image($r('app.media.food_icon'))
.width(40)
.height(40)
Column() {
Text(this.recipe.name)
.fontSize(18)
Text(`难度: ${this.recipe.difficulty}`)
.fontColor('#666')
}
.margin({ left: 10 })
}
.width('100%')
.justifyContent(FlexAlign.Start)
}
}
交互与状态更新
通过@State和事件处理实现收藏功能:
typescript
@Component
struct RecipeDetailPage {
@State recipe: Recipe;
build() {
Column() {
Text(this.recipe.name)
.fontSize(22)
Button(this.recipe.isFavorite ? '已收藏' : '收藏')
.onClick(() => {
this.recipe.isFavorite = !this.recipe.isFavorite;
})
}
}
}
在HarmonyOS NEXT上开发时,ArkTS应用开发语言的静态类型检查确实能减少运行时错误,声明式UI的写法也比传统命令式更直观。不过部分API的文档还在完善中,需要多尝试不同写法。
(注:代码示例基于HarmonyOS NEXT API12版本验证,实际开发时建议参考最新官方文档)
数据模型与状态管理
首先定义菜谱数据模型,使用ArkTS的类与接口:
typescript
interface Ingredient {
name: string;
amount: string;
}
class Recipe {
id: number;
name: string;
difficulty: string;
ingredients: Ingredient[];
steps: string[];
isFavorite: boolean = false;
constructor(id: number, name: string, difficulty: string) {
this.id = id;
this.name = name;
this.difficulty = difficulty;
}
}
声明式UI实现
通过@Entry和@Component装饰器构建页面,使用Flex布局:
typescript
@Entry
@Component
struct RecipeListPage {
@state recipes: Recipe[] = [
new Recipe(1, "番茄炒蛋", "简单"),
new Recipe(2, "红烧排骨", "中等")
];
build() {
Column() {
List({ space: 10 }) {
ForEach(this.recipes, (item: Recipe) => {
ListItem() {
RecipeItem({ recipe: item })
}
})
}
.layoutWeight(1)
.width('100%')
}
.height('100%')
.padding(12)
}
}
@Component
struct RecipeItem {
@prop recipe: Recipe;
build() {
Row() {
Image($r('app.media.food_icon'))
.width(40)
.height(40)
Column() {
Text(this.recipe.name)
.fontSize(18)
Text(`难度: ${this.recipe.difficulty}`)
.fontColor('#666')
}
.margin({ left: 10 })
}
.width('100%')
.justifyContent(FlexAlign.Start)
}
}
交互与状态更新
通过@State和事件处理实现收藏功能:
typescript
@Component
struct RecipeDetailPage {
@State recipe: Recipe;
build() {
Column() {
Text(this.recipe.name)
.fontSize(22)
Button(this.recipe.isFavorite ? '已收藏' : '收藏')
.onClick(() => {
this.recipe.isFavorite = !this.recipe.isFavorite;
})
}
}
}
在HarmonyOS NEXT上开发时,ArkTS应用开发语言的静态类型检查确实能减少运行时错误,声明式UI的写法也比传统命令式更直观。不过部分API的文档还在完善中,需要多尝试不同写法。
(注:代码示例基于HarmonyOS NEXT API12版本验证,实际开发时建议参考最新官方文档)