项目结构

本项目代表了JSGuru中Flutter项目的结构。它旨在帮助其他开发者和项目经理更好地理解项目结构,并了解项目结构。在此将解释目录结构、导航、状态管理等。

目录结构

  • assets
    • 此处存储图像、翻译文件、自定义字体文件、HTML 文件。

/lib

  • 配置目录

    • 表示我们可以找到用于导航的文件的目录。
    • 文件 router_delegate.dart 是导航最重要的文件。
  • 常量

    • 这里包含了从API路径、项目中使用的字符串到资源路径的一切,这样我们可以在整个项目中重用它们。
  • features(功能)

    • core目录代表了应用程序的认证部分。例如登录、注册
    • 项目的视觉部分将分为功能。例如,个人资料、主页等。
    • 如果“个人资料屏幕”有“编辑个人资料屏幕”,它将在 profile/screens/edit_profile_screen.dart 中找到。
  • l10n

    • 我们使用此目录存储应用程序的其他语言。
  • 模型

    • 我们将其用于存储通用模型,我们可以在应用程序中使用它们。
  • 样式

    • 文本、颜色、小部件的所有样式,都可以重用的,都应该在这里找到。
    • 这里的通用深色和浅色主题也被定义了。
  • utils

    • 包含在整个应用程序中使用的助手、服务、UI 工具、混合。
  • widgets(小部件)

    • 这里存储我们自己的自定义小部件,它们将在应用程序中使用。

导航

对于我们的项目,我们使用 Flutter Navigation 2.0 和 cubit 状态管理。要编辑和设置新屏幕,最重要的文件是 router_delegate.dart (/lib/config/router/) 文件和 pages 目录 (/lib/config/router/pages)。在 router_delegate 中,我们需要定义哪个页面将根据 cubit_state 进行导航。例如:pages = [ const LoginPage(), if (authState.myRoute == MyRoute.signup) const SignUpPage( // onSignUp: onLogin ) ]; } 我们还需要在 pages 目录中首先创建每个屏幕,在其中我们通过唯一的键值扩展 Page widget,并返回带有我们自己创建的 Screen 的 MaterialPageRoute。我们使用 Page,因为 Navigation 2.0 是与 Page widget 一起工作的。例如:class LoginPage extends Page {

const LoginPage() : super(key: const ValueKey(‘LoginPage’));

@override Route createRoute(BuildContext context) { return MaterialPageRoute( settings: this, builder: (_) => BlocProvider( create: (context) => LoginCubit(), child: const LoginScreen(), )); } }

推荐资源:https://medium.com/flutter/learning-flutters-new-navigation-and-routing-system-7c9068155ade https://docs.google.com/document/d/1Q0jx0l4-xymph9O6zLaOY4d_f7YFpNWX_eGbzYxr9wY/edit

本地化

在 l10n 目录 (lib/l10n) 中,我们为特定语言创建 .arb 文件。应该为每种语言指定和翻译应用程序中应重用的每个常量文本。例如:在英语 (app_en.arb) 中:{ “welcomeTitle”:”Welcome”, “@welcomeTitle”: { “description”: “First message in the app” } } 在德语 (app_de.arb) 中:{ “welcomeTitle”: “Willkommen” }

如果我们想在应用程序中使用此本地化,它看起来像这样:Text(AppLocalizations.of(context)!.welcomeTitle),

推荐资源:https://flutterdart.cn/docs/development/accessibility-and-localization/internationalization

状态管理

在 Flutter 应用中,我们使用 Cubit 作为我们的状态管理。我们将其分为两类,例如全局和本地 cubits。全局 cubits 代表扩散到整个应用程序的状态。在我们的例子中,它是 RouteCubit 和 AuthCubit。因此,如果我们更改了这两个 Cubits 的状态,它将影响导航。

推荐链接:https://medium.com/flutterdevs/cubit-state-management-flutter-d372ec0044f7

####### 此项目的其他有用链接 https://pub.dev/packages/flutter_native_splash – 用于启动屏

####### 克隆项目并在其上工作 在克隆项目后要做的第一件事是在您的终端中运行此命令“git config core.hooksPath ./.githooks”。

####### 在启动应用程序之前,您需要使用下一个命令生成路由 flutter packages pub run build_runner build

GitHub

查看 Github