[Flutter 基础] - Flutter 目录结构及关键文件pubspec.yaml的介绍

该篇文章的核心是去介绍一下Flutter项目目录结构以及主要文件和文件夹,特别是pubspec.yaml文件。担心有些小伙伴再最开始学习flutter的时候会不熟悉Android studio。所以就啰嗦几句简单介绍一下如何通过Android studio来创建一个flutter项目。如果不需要的可以直接跳过这部分就好了。

创建Flutter项目

通过Android studio去创建Flutter项目。 选中Flutter项目,SDK地址一般都是默认你自己配好的,如果没有就通过文件选择,选择flutter解压后的地址。 点击下一步: 输入完内容之后,点击创建。则会生成一个这样的项目目录结构:

项目结构解析

1. lib

lib是flutter项目的核心文件夹,所有的Dart相关代码都是这个文件夹下面的 Main.dart 是项目入口,通过这个文件中的main方法启动App

csharp 复制代码
void main() {
  runApp(const MyApp());
}
2. test/

test文件夹是和单元测试相关的,学flutter阶段的话,可以不用去考虑这个文件夹下的内容。

3. ios
  • 存放原生平台代码,用于定制化配置(如图标、权限、签名)
  • 更改App图标:os/Runner/Assets.xcassets/AppIcon.appiconset
  • 添加权限:ios/Runner/Info.plist
4. android
  • 存放原生平台代码,用于定制化配置(如图标、权限、签名)。

  • 如果需要修改App图标:则替换android/app/src/main/res/mipmap*文件中对应的icon。

    xml 复制代码
     <application
            android:label="flutter_demo"
            android:name="${applicationName}"
            android:icon="@mipmap/ic_launcher"> <!-- App图标 -->
    </manifest>
  • 如果需要添加权限:则更改 android/app/src/main/AndroidManifest.xml文件

    xml 复制代码
    <manifest xmlns:android="http://schemas.android.com/apk/res/android">
        <application
            android:label="flutter_demo"
            android:name="${applicationName}"
            android:icon="@mipmap/ic_launcher">
            <!-- 添加权限 -->
            <uses-permission android:name="android.permission.INTERNET" />
            ...
    </manifest>
5. pubspec.yaml

Flutter项目很重要的一个配置文件,包括依赖管理,资源,主题等。 依赖管理:

例:

yaml 复制代码
name: flutter_demo # 项目的名称
description: "A new Flutter project." #项目的描述
publish_to: 'none' # 这个默认是none值,是如果你的个人项目想要发不到pub.dev仓库,需要删除这行
version: 1.0.0+1   # 项目的版本号,格式为:x.y.z+[build number]
dependencies: # 依赖管理模块
  flutter: any
  http: ^1.0.0    # 网络请求库
  provider: ^6.0.0 # 状态管理库
  
  my_package: #允许添加github上的一些库
    git:
      url: https://github.com/username/repo.git # 这个也可以是一下公司内部版本库地址
      ref: main
      path: packages/my_package  # 可选子目录
  my_local_package: 
    path: ../my_local_package # 还可以设置当前项目的模块作为依赖
  
dev_dependencies: #只有在开发阶段才会拉取的依赖
  flutter_test:
    sdk: flutter
  mockito: ^5.0.0  # 单元测试辅助库
​
dependency_overrides: # 需要覆盖的依赖
  http:
    git:
      url: https://github.com/your-repo/http.git
      ref: dev
​
flutter:
  uses-material-design: true # 开启使用Material的设计,在Material的组件中可是与其相关的一些icon
  fonts:  # 可以设置自己的字体, 支持配置多套字体
    - family: MyFont #字体的命名
      fonts:
        - asset: assets/fonts/MyFont-Regular.ttf # 字体的存放路径
        
  assets:  # 资源文件路径配置
    - assets/images/ #路径,文件名字可以自定义
    - assets/configs/  #路径,文件名字可以自定义
关键字段的说明
  • name: 项目的名称

  • description: 项目简介

  • version: 项目的版本号

    • 项目版本号,格式为 x.y.z+[build number]
    • x.y.z:语义化版本(主版本.次版本.修订)。
    • build number:构建号(如 1.0.0+1)。
  • publish_to :指定包的发布位置,防止意外发布到 pub.dev

    • none:不发布到任何位置(默认)。
    • pub.dev:发布到公共仓库。
    • 自定义地址:发布到私有仓库(如 https://your-private-repo.com
  • dependencies:依赖管理,支持pub.dev官方库版本依赖,github等公共管理库依赖,当前项目子模块等依赖

    • Pub.dev库依赖。

      yaml 复制代码
       provider: ^6.0.0 # 状态管理库
    • Github公共库依赖

      yaml 复制代码
       my_package: #允许添加github上的一些库
          git:
            url: https://github.com/username/repo.git # 这个也可以是一下公司内部版本库地址
            ref: main
            path: packages/my_package  # 可选子目录
    • 当前项目子模块依赖

      yaml 复制代码
        my_local_package: 
          path: ../my_local_package # 还可以设置当前项目的模块作为依赖
  • dev_dependencies : 只有在开发阶段才会拉取的依赖。使用规则和dependencies一致

  • dependency_overrides: 项目都会有很多依赖,比如多个项目依赖了同一个插件,但是版本不一样,可以去覆盖,支持的规则和dependencies一致。

  • uses-material-design: 默认是true,开启material设计的支持。开启了之后可以直接去使用一些material风格的icon之类的。

  • fonts: 可以设置项目自定义字体,支持配置多种字体。具体配置可以参考:

    yaml 复制代码
      fonts:  # 可以设置自己的字体, 支持配置多套字体
        - family: MyFont #字体的命名
          fonts:
            - asset: assets/fonts/MyFont-Regular.ttf # 字体的存放路径
  • assets: 资源文件的配置路径,项目刚创建的时候可能没有这个文件夹,需要手动创建,在项目的根目录下。

    bash 复制代码
      assets:  # 资源文件路径配置
        - assets/images/ #路径,文件名字可以自定义
        - assets/configs/  #路径,文件名字可以自定义
6. pubspec.lock

执行flutter pub get命令的时候根据pubspec.yaml中配置的三块dependences生成的,主要是用于锁定每个依赖的版本号,需要提交到版本控制。

以上就是Flutter项目目录结构的一个简要说明。感谢您耐心看到最后,如果不对的地方欢迎指正。

相关推荐
千里马学框架3 天前
一起学 Android 14:ShellTransition 屏幕旋转过程深度剖析
android·智能手机·性能优化·framework·性能·屏幕旋转·rotation
美狐美颜SDK开放平台3 天前
开发直播APP时如何接入视频美颜SDK?开发流程与注意事项
android·人工智能·计算机视觉·音视频·直播美颜sdk
AFinalStone3 天前
Android7 SystemUI源码解析(七)Keyguard锁屏模块深度解析
android·systemui
致远ccc3 天前
Google Play 上架前如何测试 App?多国家 Android 环境测试
android·app测试·googleplay·多国家应用测试
ttyyttemo4 天前
Kotlin 协程中的 Job 结构化并发与取消
android
sun0077004 天前
tbox 4g/5g切换,导致wan ip 改变,导致车机旧网络不可用。需要重启车机才行
android
其实防守也摸鱼4 天前
内网穿透与反向代理:原理、工具与实战指南
android·大数据·运维·安全·网络安全·自动化·渗透
AFinalStone4 天前
Android7 SystemUI 源码解析(四)NavigationBar 导航栏与 SystemBars
android·systemui
JMchen4 天前
属性动画原理与高级动画实现
android·kotlin·canvas
AFinalStone4 天前
Android7 SystemUI 源码解析(二)启动流程深度解析
android·systemui