rwadurian/frontend/mobile-app/CLAUDE.md

28 KiB

RWA Android App - Claude Code 开发指南

项目概述

Flutter 移动端应用,采用 3层 Clean Architecture + Riverpod 架构。

  • Presentation: Pages + Widgets + Providers (Riverpod)
  • Domain: Entities + UseCases + Repository接口
  • Data: Models + DataSources + Repository实现

初始化任务

任务1: 创建目录结构

lib/ 下执行以下结构创建:

lib/
├── main.dart                     # 保留,后续修改
├── main_development.dart         # 新建
├── main_production.dart          # 新建
├── app.dart                      # 新建
├── bootstrap.dart                # 新建
│
├── core/
│   ├── constants/
│   │   ├── app_constants.dart
│   │   ├── api_endpoints.dart
│   │   ├── storage_keys.dart
│   │   └── chain_constants.dart
│   │
│   ├── errors/
│   │   ├── exceptions.dart
│   │   ├── failures.dart
│   │   └── error_handler.dart
│   │
│   ├── network/
│   │   ├── dio_client.dart
│   │   ├── api_interceptors.dart
│   │   ├── network_info.dart
│   │   └── api_response.dart
│   │
│   ├── blockchain/
│   │   ├── web3_client.dart
│   │   ├── wallet_utils.dart
│   │   ├── mnemonic_utils.dart
│   │   ├── transaction_utils.dart
│   │   └── chain_config.dart
│   │
│   ├── storage/
│   │   ├── secure_storage.dart
│   │   ├── local_storage.dart
│   │   └── cache_manager.dart
│   │
│   ├── utils/
│   │   ├── validators.dart
│   │   ├── formatters.dart
│   │   ├── date_utils.dart
│   │   ├── number_utils.dart
│   │   ├── clipboard_utils.dart
│   │   └── logger.dart
│   │
│   ├── extensions/
│   │   ├── context_extensions.dart
│   │   ├── string_extensions.dart
│   │   ├── num_extensions.dart
│   │   └── list_extensions.dart
│   │
│   ├── theme/
│   │   ├── app_theme.dart
│   │   ├── app_colors.dart
│   │   ├── app_text_styles.dart
│   │   ├── app_shadows.dart
│   │   ├── app_gradients.dart
│   │   └── app_dimensions.dart
│   │
│   └── di/
│       └── injection_container.dart
│
├── features/
│   ├── auth/
│   │   ├── data/
│   │   │   ├── datasources/
│   │   │   │   ├── auth_local_datasource.dart
│   │   │   │   └── auth_remote_datasource.dart
│   │   │   ├── models/
│   │   │   │   ├── wallet_model.dart
│   │   │   │   ├── mnemonic_model.dart
│   │   │   │   └── user_model.dart
│   │   │   └── repositories/
│   │   │       └── auth_repository_impl.dart
│   │   ├── domain/
│   │   │   ├── entities/
│   │   │   │   ├── wallet_entity.dart
│   │   │   │   ├── mnemonic_entity.dart
│   │   │   │   └── user_entity.dart
│   │   │   ├── repositories/
│   │   │   │   └── auth_repository.dart
│   │   │   └── usecases/
│   │   │       ├── create_wallet.dart
│   │   │       ├── import_wallet.dart
│   │   │       ├── generate_mnemonic.dart
│   │   │       ├── verify_mnemonic.dart
│   │   │       ├── backup_mnemonic.dart
│   │   │       └── check_login_status.dart
│   │   └── presentation/
│   │       ├── providers/
│   │       │   ├── auth_provider.dart
│   │       │   ├── wallet_provider.dart
│   │       │   └── mnemonic_provider.dart
│   │       ├── pages/
│   │       │   ├── splash_page.dart
│   │       │   ├── onboarding_page.dart
│   │       │   ├── create_wallet_page.dart
│   │       │   ├── backup_mnemonic_page.dart
│   │       │   ├── verify_mnemonic_page.dart
│   │       │   ├── wallet_created_page.dart
│   │       │   └── import_wallet_page.dart
│   │       └── widgets/
│   │           ├── mnemonic_grid.dart
│   │           ├── mnemonic_word_chip.dart
│   │           ├── address_display_card.dart
│   │           └── wallet_type_selector.dart
│   │
│   ├── ranking/
│   │   ├── data/
│   │   │   ├── datasources/
│   │   │   │   └── ranking_remote_datasource.dart
│   │   │   ├── models/
│   │   │   │   ├── ranking_item_model.dart
│   │   │   │   └── ranking_list_model.dart
│   │   │   └── repositories/
│   │   │       └── ranking_repository_impl.dart
│   │   ├── domain/
│   │   │   ├── entities/
│   │   │   │   ├── ranking_item_entity.dart
│   │   │   │   └── ranking_type.dart
│   │   │   ├── repositories/
│   │   │   │   └── ranking_repository.dart
│   │   │   └── usecases/
│   │   │       ├── get_daily_ranking.dart
│   │   │       ├── get_weekly_ranking.dart
│   │   │       └── get_monthly_ranking.dart
│   │   └── presentation/
│   │       ├── providers/
│   │       │   └── ranking_provider.dart
│   │       ├── pages/
│   │       │   └── ranking_page.dart
│   │       └── widgets/
│   │           ├── ranking_tab_bar.dart
│   │           ├── ranking_filter_bar.dart
│   │           ├── ranking_list_item.dart
│   │           └── ranking_crown_badge.dart
│   │
│   ├── mining/
│   │   ├── data/
│   │   │   ├── datasources/
│   │   │   │   ├── mining_local_datasource.dart
│   │   │   │   └── mining_remote_datasource.dart
│   │   │   ├── models/
│   │   │   │   ├── mining_status_model.dart
│   │   │   │   ├── hash_power_model.dart
│   │   │   │   └── mining_reward_model.dart
│   │   │   └── repositories/
│   │   │       └── mining_repository_impl.dart
│   │   ├── domain/
│   │   │   ├── entities/
│   │   │   │   ├── mining_status_entity.dart
│   │   │   │   ├── hash_power_entity.dart
│   │   │   │   └── mining_reward_entity.dart
│   │   │   ├── repositories/
│   │   │   │   └── mining_repository.dart
│   │   │   └── usecases/
│   │   │       ├── start_mining.dart
│   │   │       ├── stop_mining.dart
│   │   │       ├── get_mining_status.dart
│   │   │       ├── get_hash_power.dart
│   │   │       └── claim_mining_reward.dart
│   │   └── presentation/
│   │       ├── providers/
│   │       │   ├── mining_provider.dart
│   │       │   └── hash_power_provider.dart
│   │       ├── pages/
│   │       │   └── mining_page.dart
│   │       └── widgets/
│   │           ├── mining_status_circle.dart
│   │           ├── hash_power_card.dart
│   │           ├── team_power_card.dart
│   │           └── mining_control_button.dart
│   │
│   ├── trading/
│   │   ├── data/
│   │   │   ├── datasources/
│   │   │   │   └── trading_remote_datasource.dart
│   │   │   ├── models/
│   │   │   │   ├── balance_model.dart
│   │   │   │   ├── transaction_model.dart
│   │   │   │   └── exchange_rate_model.dart
│   │   │   └── repositories/
│   │   │       └── trading_repository_impl.dart
│   │   ├── domain/
│   │   │   ├── entities/
│   │   │   │   ├── balance_entity.dart
│   │   │   │   ├── transaction_entity.dart
│   │   │   │   ├── token_type.dart
│   │   │   │   └── transaction_status.dart
│   │   │   ├── repositories/
│   │   │   │   └── trading_repository.dart
│   │   │   └── usecases/
│   │   │       ├── get_balance.dart
│   │   │       ├── calculate_settlement.dart
│   │   │       ├── exchange_dst_to_usdt.dart
│   │   │       └── get_transaction_history.dart
│   │   └── presentation/
│   │       ├── providers/
│   │       │   ├── trading_provider.dart
│   │       │   └── balance_provider.dart
│   │       ├── pages/
│   │       │   ├── trading_page.dart
│   │       │   └── transaction_history_page.dart
│   │       └── widgets/
│   │           ├── balance_card.dart
│   │           ├── token_selector.dart
│   │           ├── settlement_button.dart
│   │           └── exchange_button.dart
│   │
│   ├── deposit/
│   │   ├── data/
│   │   │   ├── datasources/
│   │   │   │   └── deposit_remote_datasource.dart
│   │   │   ├── models/
│   │   │   │   ├── deposit_address_model.dart
│   │   │   │   └── deposit_record_model.dart
│   │   │   └── repositories/
│   │   │       └── deposit_repository_impl.dart
│   │   ├── domain/
│   │   │   ├── entities/
│   │   │   │   ├── deposit_address_entity.dart
│   │   │   │   ├── chain_network.dart
│   │   │   │   └── deposit_record_entity.dart
│   │   │   ├── repositories/
│   │   │   │   └── deposit_repository.dart
│   │   │   └── usecases/
│   │   │       ├── get_deposit_address.dart
│   │   │       ├── confirm_deposit.dart
│   │   │       └── get_deposit_records.dart
│   │   └── presentation/
│   │       ├── providers/
│   │       │   └── deposit_provider.dart
│   │       ├── pages/
│   │       │   └── deposit_page.dart
│   │       └── widgets/
│   │           ├── network_tab_bar.dart
│   │           ├── qr_code_card.dart
│   │           ├── address_copy_card.dart
│   │           └── confirm_deposit_button.dart
│   │
│   ├── planting/
│   │   ├── data/
│   │   │   ├── datasources/
│   │   │   │   └── planting_remote_datasource.dart
│   │   │   ├── models/
│   │   │   │   ├── planting_order_model.dart
│   │   │   │   ├── location_model.dart
│   │   │   │   └── planting_price_model.dart
│   │   │   └── repositories/
│   │   │       └── planting_repository_impl.dart
│   │   ├── domain/
│   │   │   ├── entities/
│   │   │   │   ├── planting_order_entity.dart
│   │   │   │   ├── location_entity.dart
│   │   │   │   └── planting_config_entity.dart
│   │   │   ├── repositories/
│   │   │   │   └── planting_repository.dart
│   │   │   └── usecases/
│   │   │       ├── get_planting_price.dart
│   │   │       ├── calculate_max_quantity.dart
│   │   │       ├── get_provinces.dart
│   │   │       ├── get_cities.dart
│   │   │       └── submit_planting.dart
│   │   └── presentation/
│   │       ├── providers/
│   │       │   ├── planting_provider.dart
│   │       │   └── location_provider.dart
│   │       ├── pages/
│   │       │   ├── planting_quantity_page.dart
│   │       │   └── planting_location_page.dart
│   │       └── widgets/
│   │           ├── quantity_selector.dart
│   │           ├── price_info_card.dart
│   │           ├── province_dropdown.dart
│   │           ├── city_dropdown.dart
│   │           ├── location_warning.dart
│   │           └── confirm_planting_dialog.dart
│   │
│   ├── profile/
│   │   ├── data/
│   │   │   ├── datasources/
│   │   │   │   ├── profile_local_datasource.dart
│   │   │   │   └── profile_remote_datasource.dart
│   │   │   ├── models/
│   │   │   │   ├── profile_model.dart
│   │   │   │   ├── community_info_model.dart
│   │   │   │   ├── referral_model.dart
│   │   │   │   └── earnings_model.dart
│   │   │   └── repositories/
│   │   │       └── profile_repository_impl.dart
│   │   ├── domain/
│   │   │   ├── entities/
│   │   │   │   ├── profile_entity.dart
│   │   │   │   ├── community_entity.dart
│   │   │   │   ├── referral_entity.dart
│   │   │   │   ├── earnings_entity.dart
│   │   │   │   └── community_level.dart
│   │   │   ├── repositories/
│   │   │   │   └── profile_repository.dart
│   │   │   └── usecases/
│   │   │       ├── get_profile.dart
│   │   │       ├── update_profile.dart
│   │   │       ├── update_avatar.dart
│   │   │       ├── get_community_info.dart
│   │   │       ├── get_referral_list.dart
│   │   │       ├── get_earnings_summary.dart
│   │   │       └── claim_earnings.dart
│   │   └── presentation/
│   │       ├── providers/
│   │       │   ├── profile_provider.dart
│   │       │   ├── community_provider.dart
│   │       │   └── earnings_provider.dart
│   │       ├── pages/
│   │       │   ├── profile_page.dart
│   │       │   ├── edit_profile_page.dart
│   │       │   ├── referral_list_page.dart
│   │       │   └── earnings_detail_page.dart
│   │       └── widgets/
│   │           ├── profile_header.dart
│   │           ├── avatar_widget.dart
│   │           ├── community_stats_card.dart
│   │           ├── referral_item.dart
│   │           ├── earnings_card.dart
│   │           ├── countdown_timer.dart
│   │           ├── claim_button.dart
│   │           ├── community_level_badge.dart
│   │           └── avatar_picker_sheet.dart
│   │
│   ├── security/
│   │   ├── data/
│   │   │   ├── datasources/
│   │   │   │   └── security_local_datasource.dart
│   │   │   └── repositories/
│   │   │       └── security_repository_impl.dart
│   │   ├── domain/
│   │   │   ├── repositories/
│   │   │   │   └── security_repository.dart
│   │   │   └── usecases/
│   │   │       ├── setup_google_auth.dart
│   │   │       ├── verify_google_auth.dart
│   │   │       ├── change_password.dart
│   │   │       └── bind_email.dart
│   │   └── presentation/
│   │       ├── providers/
│   │       │   └── security_provider.dart
│   │       ├── pages/
│   │       │   ├── google_auth_page.dart
│   │       │   ├── change_password_page.dart
│   │       │   └── bind_email_page.dart
│   │       └── widgets/
│   │           └── security_option_tile.dart
│   │
│   └── home/
│       └── presentation/
│           ├── providers/
│           │   └── navigation_provider.dart
│           ├── pages/
│           │   └── home_shell_page.dart
│           └── widgets/
│               └── bottom_nav_bar.dart
│
├── shared/
│   ├── widgets/
│   │   ├── buttons/
│   │   │   ├── primary_button.dart
│   │   │   ├── secondary_button.dart
│   │   │   ├── text_button.dart
│   │   │   └── icon_button.dart
│   │   ├── cards/
│   │   │   ├── info_card.dart
│   │   │   ├── stat_card.dart
│   │   │   └── gradient_card.dart
│   │   ├── dialogs/
│   │   │   ├── confirm_dialog.dart
│   │   │   ├── warning_dialog.dart
│   │   │   ├── success_dialog.dart
│   │   │   └── loading_dialog.dart
│   │   ├── inputs/
│   │   │   ├── text_input.dart
│   │   │   ├── password_input.dart
│   │   │   ├── search_input.dart
│   │   │   └── dropdown_input.dart
│   │   ├── loading/
│   │   │   ├── loading_indicator.dart
│   │   │   ├── shimmer_loading.dart
│   │   │   └── full_screen_loading.dart
│   │   ├── lists/
│   │   │   ├── empty_state.dart
│   │   │   ├── error_state.dart
│   │   │   └── pull_to_refresh.dart
│   │   ├── app_bar/
│   │   │   ├── custom_app_bar.dart
│   │   │   └── transparent_app_bar.dart
│   │   └── misc/
│   │       ├── copy_text.dart
│   │       ├── countdown_text.dart
│   │       ├── badge_widget.dart
│   │       └── divider_with_text.dart
│   ├── providers/
│   │   ├── app_state_provider.dart
│   │   ├── connectivity_provider.dart
│   │   └── locale_provider.dart
│   └── mixins/
│       ├── loading_mixin.dart
│       └── toast_mixin.dart
│
├── l10n/
│   ├── app_localizations.dart
│   ├── arb/
│   │   ├── app_zh.arb
│   │   └── app_en.arb
│   └── l10n.dart
│
└── routes/
    ├── app_router.dart
    ├── route_names.dart
    ├── route_paths.dart
    └── route_guards.dart

任务2: 创建与 lib 同级的目录

在项目根目录 rwa_android_app/ 下创建:

rwa_android_app/
├── lib/                          # (任务1已创建)
│
├── assets/                       # 📦 资源文件
│   ├── images/                   # 图片资源
│   │   ├── logo/
│   │   ├── backgrounds/
│   │   ├── avatars/
│   │   └── illustrations/
│   ├── icons/                    # 图标资源
│   │   ├── nav/                  # 导航图标
│   │   ├── tokens/               # 代币图标(USDT/DST/BNB等)
│   │   └── actions/              # 操作图标
│   ├── fonts/                    # 字体文件
│   └── lottie/                   # Lottie动画
│       ├── mining_animation.json # 挖矿动画
│       └── success_animation.json# 成功动画
│
├── test/                         # 🧪 测试
│   ├── unit/                     # 单元测试
│   │   ├── core/
│   │   ├── features/
│   │   │   ├── auth/
│   │   │   ├── mining/
│   │   │   ├── ranking/
│   │   │   ├── trading/
│   │   │   ├── deposit/
│   │   │   ├── planting/
│   │   │   ├── profile/
│   │   │   └── security/
│   │   └── mocks/
│   ├── widget/                   # Widget测试
│   └── integration/              # 集成测试
│
├── integration_test/             # E2E测试
│   └── app_test.dart
│
├── scripts/                      # 脚本
│   ├── build_android.sh
│   ├── build_ios.sh
│   └── generate_icons.sh
│
├── android/                      # (flutter create 已生成)
├── ios/                          # (flutter create 已生成)
├── web/                          # (flutter create 已生成)
├── linux/                        # (flutter create 已生成)
├── macos/                        # (flutter create 已生成)
├── windows/                      # (flutter create 已生成)
├── pubspec.yaml                  # (需更新)
├── analysis_options.yaml         # (保留)
├── README.md                     # (保留)
└── CLAUDE.md                     # (本文件)

任务3: 更新 pubspec.yaml

替换 dependenciesdev_dependencies 部分:

name: rwa_android_app
description: RWA榴莲女皇移动应用
publish_to: 'none'
version: 1.0.0+1

environment:
  sdk: '>=3.2.0 <4.0.0'

dependencies:
  flutter:
    sdk: flutter
  flutter_localizations:
    sdk: flutter

  # 状态管理
  flutter_riverpod: ^2.5.1
  riverpod_annotation: ^2.3.5

  # 路由
  go_router: ^14.2.0

  # 网络
  dio: ^5.4.3+1
  connectivity_plus: ^6.0.3

  # 区块链
  web3dart: ^2.7.3
  bip39: ^1.0.6
  ed25519_hd_key: ^2.3.0
  hex: ^0.2.0

  # 本地存储
  shared_preferences: ^2.2.3
  flutter_secure_storage: ^9.0.0
  hive: ^2.2.3
  hive_flutter: ^1.1.0

  # UI组件
  flutter_svg: ^2.0.10+1
  cached_network_image: ^3.3.1
  shimmer: ^3.0.0
  lottie: ^3.1.0
  qr_flutter: ^4.1.0
  flutter_screenutil: ^5.9.0

  # 工具
  intl: ^0.19.0
  logger: ^2.2.0
  equatable: ^2.0.5
  dartz: ^0.10.1
  uuid: ^4.3.3
  image_picker: ^1.0.7
  permission_handler: ^11.3.1
  url_launcher: ^6.2.6
  share_plus: ^8.0.3

  # 生物识别
  local_auth: ^2.2.0

dev_dependencies:
  flutter_test:
    sdk: flutter
  flutter_lints: ^3.0.2
  
  # 代码生成
  build_runner: ^2.4.9
  riverpod_generator: ^2.4.0
  freezed: ^2.5.2
  freezed_annotation: ^2.4.1
  json_serializable: ^6.7.1
  hive_generator: ^2.0.1

  # 测试
  mocktail: ^1.0.3

flutter:
  uses-material-design: true
  
  assets:
    - assets/images/
    - assets/images/logo/
    - assets/images/backgrounds/
    - assets/images/avatars/
    - assets/images/illustrations/
    - assets/icons/
    - assets/icons/nav/
    - assets/icons/tokens/
    - assets/icons/actions/
    - assets/lottie/

核心文件内容模板

app_colors.dart

位置: lib/core/theme/app_colors.dart

import 'package:flutter/material.dart';

class AppColors {
  AppColors._();

  // 主色调 - 金黄色系
  static const Color primary = Color(0xFFD4A84B);
  static const Color primaryLight = Color(0xFFF5E6C8);
  static const Color primaryDark = Color(0xFFB8923F);
  
  // 背景色
  static const Color background = Color(0xFFFAF8F5);
  static const Color cardBackground = Color(0xFFFFFDF8);
  static const Color surface = Color(0xFFFFFFFF);
  
  // 文字色
  static const Color textPrimary = Color(0xFF333333);
  static const Color textSecondary = Color(0xFF666666);
  static const Color textHint = Color(0xFF999999);
  static const Color textOnPrimary = Color(0xFFFFFFFF);
  
  // 功能色
  static const Color success = Color(0xFF52C41A);
  static const Color warning = Color(0xFFFFAA00);
  static const Color error = Color(0xFFFF4D4F);
  static const Color info = Color(0xFF1890FF);
  
  // 边框色
  static const Color border = Color(0xFFE8E8E8);
  static const Color divider = Color(0xFFF0F0F0);
  
  // 排行榜皇冠色
  static const Color crownGold = Color(0xFFFFD700);
  static const Color crownSilver = Color(0xFFC0C0C0);
  static const Color crownBronze = Color(0xFFCD7F32);
}

failures.dart

位置: lib/core/errors/failures.dart

import 'package:equatable/equatable.dart';

abstract class Failure extends Equatable {
  final String message;
  const Failure(this.message);
  
  @override
  List<Object> get props => [message];
}

class ServerFailure extends Failure {
  const ServerFailure([super.message = '服务器错误']);
}

class NetworkFailure extends Failure {
  const NetworkFailure([super.message = '网络连接失败']);
}

class CacheFailure extends Failure {
  const CacheFailure([super.message = '缓存错误']);
}

class AuthFailure extends Failure {
  const AuthFailure([super.message = '认证失败']);
}

class WalletFailure extends Failure {
  const WalletFailure([super.message = '钱包操作失败']);
}

class BlockchainFailure extends Failure {
  const BlockchainFailure([super.message = '区块链交互失败']);
}

UseCase 基类

位置: lib/core/usecases/usecase.dart

import 'package:dartz/dartz.dart';
import '../errors/failures.dart';

abstract class UseCase<Type, Params> {
  Future<Either<Failure, Type>> call(Params params);
}

class NoParams {
  const NoParams();
}

MCP 工具使用规范

从 UIPro 获取 UI 代码

当需要获取 Figma 设计的 UI 代码时:

  1. 调用 UIPro MCP 获取 Widget 代码
  2. 将代码放入对应的 features/[module]/presentation/widgets/ 目录
  3. 执行以下适配:
    • 替换硬编码颜色 → AppColors.xxx
    • 替换硬编码文字 → context.l10n.xxx
    • 替换硬编码尺寸 → AppDimensions.xxx.w .h (screenutil)
    • 添加 Riverpod ref.watch() / ref.read() 状态绑定

示例适配

UIPro 原始代码:

Container(
  color: Color(0xFFD4A84B),
  child: Text('挖矿中', style: TextStyle(color: Colors.white)),
)

适配后:

Container(
  color: AppColors.primary,
  child: Text(context.l10n.miningInProgress, style: AppTextStyles.bodyWhite),
)

开发顺序

按以下顺序开发各模块:

优先级 模块 说明
P0 core/ 基础设施 (theme, errors, network, blockchain, storage)
P0 shared/widgets/ 公共组件
P1 features/auth/ 钱包创建/导入 (入口)
P1 features/home/ 底部导航 Shell
P2 features/mining/ 矿机 (核心功能)
P2 features/ranking/ 龙虎榜
P2 features/trading/ 交易
P2 features/profile/ 个人中心
P3 features/deposit/ 充值
P3 features/planting/ 认种
P3 features/security/ 安全设置
P4 routes/ 路由配置
P4 l10n/ 国际化

路由配置

路由路径定义 (lib/routes/route_paths.dart):

class RoutePaths {
  RoutePaths._();
  
  // Auth
  static const splash = '/';
  static const onboarding = '/onboarding';
  static const createWallet = '/auth/create';
  static const backupMnemonic = '/auth/backup-mnemonic';
  static const verifyMnemonic = '/auth/verify-mnemonic';
  static const walletCreated = '/auth/wallet-created';
  static const importWallet = '/auth/import';
  
  // Main tabs
  static const ranking = '/ranking';
  static const mining = '/mining';
  static const trading = '/trading';
  static const profile = '/profile';
  
  // Sub pages
  static const editProfile = '/profile/edit';
  static const referralList = '/profile/referrals';
  static const earningsDetail = '/profile/earnings';
  static const deposit = '/deposit';
  static const plantingQuantity = '/planting/quantity';
  static const plantingLocation = '/planting/location';
  static const googleAuth = '/security/google-auth';
  static const changePassword = '/security/password';
  static const bindEmail = '/security/email';
  static const transactionHistory = '/trading/history';
}

命名规范

类型 命名规则 示例
文件 snake_case mining_page.dart
PascalCase MiningPage
变量/方法 camelCase getMiningStatus()
常量 camelCase 或 SCREAMING_SNAKE primaryColorAPI_BASE_URL
Provider camelCase + Provider miningProvider
Entity PascalCase + Entity MiningStatusEntity
Model PascalCase + Model MiningStatusModel
UseCase PascalCase (动词+名词) GetMiningStatus

当前任务

初始化项目结构

  1. 创建 lib/ 目录结构
  2. 创建 assets/ 目录结构
  3. 更新 pubspec.yaml
  4. 运行 flutter pub get
  5. 实现 core/theme/ 基础文件
  6. 实现 core/errors/ 基础文件