插件介绍

Veggie Seasons 是一个展示当季水果和蔬菜的 Flutter 应用示例,主要用于演示 Flutter 的 Cupertino 组件在 iOS 风格界面中的应用。该应用通过精美的 UI 设计和直观的交互,帮助用户了解不同季节的时令蔬果,包括它们的营养价值、分类和相关趣事。

在这里插入图片描述

核心功能特点:

  • 季节蔬果展示:根据当前时间自动显示当季可收获的水果和蔬菜
  • 收藏功能:用户可以将喜欢的蔬果添加到收藏夹
  • 搜索功能:支持按名称搜索蔬果
  • 详细信息:查看每种蔬果的详细信息,包括营养价值、分类和有趣的小知识
  • 设置功能:个性化应用设置
  • Cupertino 风格 UI:采用 iOS 风格的组件设计,提供原生体验
  • 状态管理:使用 Provider 进行高效的状态管理
  • 路由导航:使用 GoRouter 实现流畅的页面导航

使用步骤

1. 包的引入

由于这是一个自定义修改版本,需要通过 Git 形式引入。在您的项目的 pubspec.yaml 文件中添加以下依赖配置:

dependencies:
  veggieseasons:
    git:
      url: "https://atomgit.com/"
      path: "packages/veggieseasons/veggieseasons"

然后运行以下命令获取依赖:

flutter pub get

2. 初始化应用

在您的鸿蒙应用中,初始化 Veggie Seasons 应用的核心组件:

import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:veggieseasons/data/app_state.dart';
import 'package:veggieseasons/data/preferences.dart';
import 'package:veggieseasons/styles.dart';

void main() {
  runApp(
    const RootRestorationScope(
      restorationId: 'root',
      child: VeggieApp(),
    ),
  );
}

class VeggieApp extends StatelessWidget {
  const VeggieApp({super.key});

  
  Widget build(BuildContext context) {
    return MultiProvider(
      providers: [
        ChangeNotifierProvider(create: (_) => AppState()),
        ChangeNotifierProvider(create: (_) => Preferences()..load()),
      ],
      child: CupertinoApp(
        theme: Styles.veggieThemeData,
        debugShowCheckedModeBanner: false,
        home: const HomeScreen(),
      ),
    );
  }
}

3. 配置资源

确保您的项目中包含了 Veggie Seasons 所需的资源文件。将 assets 目录下的图片和字体文件复制到您的项目中,并在 pubspec.yaml 中进行配置:

flutter:
  assets:
    - assets/images/
  fonts:
    - family: NotoSans
      fonts:
        - asset: assets/fonts/NotoSans-Regular.ttf
        - asset: assets/fonts/NotoSans-Bold.ttf
          weight: 700

API 调用

AppState 类

AppState 是应用的核心状态管理类,提供了以下主要方法:

获取所有蔬果
final appState = Provider.of<AppState>(context);
List<Veggie> allVeggies = appState.allVeggies;
获取当季蔬果
final appState = Provider.of<AppState>(context);
List<Veggie> availableVeggies = appState.availableVeggies;
获取收藏的蔬果
final appState = Provider.of<AppState>(context);
List<Veggie> favoriteVeggies = appState.favoriteVeggies;
根据 ID 获取单个蔬果
final appState = Provider.of<AppState>(context);
Veggie veggie = appState.getVeggie(1);
搜索蔬果
final appState = Provider.of<AppState>(context);
List<Veggie> searchResults = appState.searchVeggies('apple');
设置收藏状态
final appState = Provider.of<AppState>(context, listen: false);
appState.setFavorite(1, true); // 收藏 ID 为 1 的蔬果
appState.setFavorite(1, false); // 取消收藏

Veggie 类

Veggie 类包含了蔬果的详细信息:

class Veggie {
  final int id;
  final String name;
  final String imageAssetPath;
  final VeggieCategory category;
  final String shortDescription;
  final Color accentColor;
  final List<Season> seasons;
  final int vitaminAPercentage;
  final int vitaminCPercentage;
  final String servingSize;
  final int caloriesPerServing;
  bool isFavorite;
  final List<Trivia> trivia;

  // 构造函数和方法...
}

鸿蒙适配注意事项

1. 屏幕方向配置

确保在鸿蒙应用中正确配置屏幕方向:

import 'package:flutter/services.dart';

void main() {
  WidgetsFlutterBinding.ensureInitialized();
  SystemChrome.setPreferredOrientations([
    DeviceOrientation.portraitUp,
    DeviceOrientation.portraitDown,
  ]);
  runApp(const VeggieApp());
}

2. 资源文件处理

在鸿蒙系统中,资源文件的处理方式可能有所不同。确保您的图片和字体文件路径在鸿蒙环境中能够正确访问。

3. 权限处理

如果应用需要访问设备存储或其他权限,请确保在鸿蒙应用的配置文件中正确声明这些权限。

4. 状态恢复

Veggie Seasons 使用了 Flutter 的状态恢复机制,确保应用在重新启动后能够恢复到之前的状态。在鸿蒙环境中,您可能需要额外配置以确保状态恢复功能正常工作。

总结

Veggie Seasons 是一个优秀的 Flutter 示例应用,展示了如何使用 Cupertino 组件构建 iOS 风格的界面,以及如何使用 Provider 和 GoRouter 等库进行状态管理和路由导航。通过将其适配到鸿蒙系统,您可以学习到如何在开源鸿蒙平台上开发具有原生体验的跨平台应用。

该应用的核心功能包括展示当季蔬果、收藏管理、搜索功能和详细信息查看,为用户提供了一个直观、美观的蔬果信息查询工具。通过遵循本指南,您可以轻松地将 Veggie Seasons 集成到您的鸿蒙应用中,并根据需要进行自定义修改。

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.csdn.net

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐