一、创建一个Flutter工程

1.1 命令行创建

首先我们找一个空目录用来专门存放flutter项目,然后在路径中直接输入cmd:

使用 flutter create <projectname> 命令创建flutter项目:

创建成功:

进入项目根目录中,执行 flutter run 命令运行项目:

接下来把项目拖入VSCode就可以继续编辑flutter代码了

1.2 Android Studio创建

这里其实已经在Flutter入门教程(二)开发环境搭建中已经讲解过了,这里再汇总一下

打开已经安装好的Android Studio,创建项目:

注意:这里如果没有Flutter选项,请安装Flutter插件,小白已在Flutter入门教程(二)开发环境搭建中讲解

输入好以下信息后,点击【Finish】完成创建:

在Android Studio中打开并运行(这里有三种方式可以运行):

二、工程目录分析

不管通过什么方式创建flutter工程,目录都是一样的:

目录中只有如下几个值得注意,其他不用管:

android:存放android平台相关代码

ios:存放ios平台相关代码

lib:flutter代码,即dart文件(我们编写的代码存放位置)

test:存放测试代码

pubspec.yaml:配置文件,存放一些第三方的依赖资源

我们在学习flutter入门,其实也可以不用管前两个,我们重点放在lib文件夹和pubspec.yaml文件,也就是存放我们代码编辑的位置。

2.1 main.dart文件

打开lib文件夹可以看到只有一个main.dart文件,它是整个项目的入口文件,运行后大家都能看到demo效果,我们直接把这个文件内容干掉,不用看他代码,后续篇章会逐步讲解。咱们现在还是以最经典的《Hello World》开始吧~

首先我们必须引入一个 Material UI组件库:

 import 'package:flutter/material.dart';

注意:; 必须要!(语法规范)

引入这个包后,既然它是一个入口文件,我们就来写一个入口函数main

 void main() {
   runApp(const MyApp());
 }

也可以改写成箭头函数:

 void main()=>runApp(MyApp());

这里调用runApp方法返回MyApp主页面,也就是说我们展示出来的UI界面都写在MyApp类中,现在就创建一个MyApp类:

//创建MyApp类,继承至StatelessWidget
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
//重写方法
@override
//build方法返回一个页面控件
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar( //页面导航栏
title: const Text('My First Flutter Demo'),
),
body: const Center( //页面内容
child: Text("Hello World"),
),
),
);
}
}
  • class 关键字创建MyApp类
  • extends 表示继承,MyApp继承自 StatelessWidget(无状态控件,以后会讲)
  • @override 表示重构里边的方法
  • build 方法返回一个MaterialApp窗口控件
  • home就是整个窗口内容,appBar是页面导航部分,body是导航下方内容区域

懵不懵?懵就对了,不懵就不是入门了,结构语法基本就是这样的格式,慢慢就熟悉了。保存运行看效果:

当然,也可以单独把home拆出来,效果也是一样的:

class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: const MyHome(),
);
}
}
class MyHome extends StatelessWidget {
const MyHome({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('My First Flutter Demo'),
),
body: const Center(
child: Text("Hello World"),
),
);
}
}

简单的一个Hello World程序就完成了,下面来说说pubspec.yaml文件

2.2 pubspec.yaml文件

.yaml 文件是一个标记性语言,它类似于JSON、XML

在flutter项目中pubspec.yaml文件是用来进行包管理的,在我们需要引入第三方库或者插件时候,就可以放在这个文件夹中,类似于VUE、Node项目中的package.json文件。但是两者引包方式是有区别的:

  • node中通过npm install 方式下载包
  • flutter中通过flutter packages get 方式下载包

pubspec.yaml文件默认配置如下:

# 项目名称:pg_demo_test(*)
name: pg_demo_test # 项目描述信息
description: A new Flutter project. publish_to: 'none' # 应用版本信息
version: 1.0.0+1 # 添加flutter和dart版本控制
environment:
sdk: ">=2.16.1 <3.0.0" # 依赖包(所有依赖会编译到项目中)
dependencies:
flutter:
sdk: flutter # 依赖包(运行期间的包)
dev_dependencies:
flutter_test:
sdk: flutter
flutter_lints: ^1.0.0 # flutter相关配置
flutter:
uses-material-design: true

这里面的配置项有很多,这里针对几个重要的再做一个简单的描述和注意项:

name配置项

name配置项是项目app应用名称,作用就在用于引入其他dart文件时需要使用,比如:

import 'package:pg_demo_test/libo/gf_button.dart';

这里pg_demo_test就是此应用名称,注意当你name字段修改,所有引入文件对应的名字也要更改

environment配置项

该配置项对flutter和dart进行了版本控制

environment:
sdk: ">=2.16.1 <3.0.0"

这里表示该应用只能在高于或大于2.16.1,低于3.0.0的SDK上运行,当然我们也可以自己更更改它:

environment:
sdk: ">=2.16.1 <3.0.0"
flutter: "版本号"

dependencies 和 dev_dependencies配置项

这两个配置项都是该应用程序所需要的以来包、库,区别在于:

  • dependencies下面的依赖包会编译到项目中
  • dev_dependencies下面的依赖包仅用于运行期间

这里的依赖包来源可以是:

pub.dev 网站上的第三方库

dependencies:
flutter:
sdk: flutter
getwidget: ^2.0.5
animated_background: ^2.0.0
cupertino_icons: ^1.0.2

这三个就是引用的第三方库。需要注意的是空格缩进

git安装

dependencies:
libo:
git:
url: git://github.com/libo/test.git

本地库

dependencies:
my_package:
path: ../my_package

自己封装的库

dependencies:
flutter:
sdk: flutter
bloc:
hosted:
name: test
url: http....
version: ^0.0.0

flutter配置项

默认有一个 uses-material-design: true 配置,可以使用Material中资源,根据注释信息,它还有assetsplugin字段:

flutter:
uses-material-design: true
assets:
plugin:

assets用于配置静态资源(图片、字体...)

图片配置:

flutter:
uses-material-design: true
assets:
- images/1.png # images下面1.png资源
- images # images路径下所有资源

字体配置:

flutter:
uses-material-design: true
assets:
- family: family_name
fonts:
- asset:fonts/aa.ttf
- asset:fonts/bb.ttf
family与fonts是一个整体,列表的一项

*****注意:本系列均参照Flutter官网进行整理*****

Flutter入门教程(四)第一个flutter项目解析的更多相关文章

  1. Flutter入门教程(一)Flutter简介

    这是Flutter系列第一篇文章,后续会持续更新Flutter相关知识,本篇就主要对于Flutter技术做一个简单的入门介绍 一.Flutter简介 Flutter是谷歌的移动UI框架,可以快速在iO ...

  2. 无废话ExtJs 入门教程四[表单:FormPanel]

    无废话ExtJs 入门教程四[表单:FormPanel] extjs技术交流,欢迎加群(201926085) 继上一节内容,我们在窗体里加了个表单.如下所示代码区的第28行位置,items:form. ...

  3. SpringBoot入门教程(二)CentOS部署SpringBoot项目从0到1

    在之前的博文<详解intellij idea搭建SpringBoot>介绍了idea搭建SpringBoot的详细过程, 并在<CentOS安装Tomcat>中介绍了Tomca ...

  4. PySide——Python图形化界面入门教程(四)

    PySide——Python图形化界面入门教程(四) ——创建自己的信号槽 ——Creating Your Own Signals and Slots 翻译自:http://pythoncentral ...

  5. Elasticsearch入门教程(四):Elasticsearch文档CURD

    原文:Elasticsearch入门教程(四):Elasticsearch文档CURD 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接: ...

  6. RabbitMQ入门教程(四):工作队列(Work Queues)

    原文:RabbitMQ入门教程(四):工作队列(Work Queues) 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https:/ ...

  7. JasperReports入门教程(四):多数据源

    JasperReports入门教程(四):多数据源 背景 在报表使用中,一个页面需要打印多个表格,每个表格分别使用不同的数据源是很常见的一个需求.假如我们现在有一个需求如下:需要在一个报表同时打印所有 ...

  8. Flutter入门教程(二)开发环境搭建

    学习Flutter,首先需要搭建好Flutter的开发环境,下面我将一步步带领大家搭建开发环境并且成功运行flutter项目. Flutter环境配置主要有这几点: 系统配置要求 Java环境 Flu ...

  9. Flutter学习之路---------第一个Flutter项目

    Flutter是谷歌的移动UI框架,可以快速在iOS和Android上构建高质量的原生用户界面. Flutter可以与现有的代码一起工作.在全世界,Flutter正在被越来越多的开发者和组织使用,并且 ...

随机推荐

  1. Maven打包异常:Failed to execute goal org.apache.maven.plugins:maven-war-plugin:2.2:war

    出现下面异常,因为默认web.xml在  src/main/webapp  下所以才出现找不到的异常. 我的项目结构为 解决办法①:  在pom.xml里面制定 web位置即可 //先确保打包方式为w ...

  2. 初识html及网络爬虫概念

    网络爬虫 HTML超文本标记语言 HTTP协议 简单的网络请求 python模块模拟浏览器发送请求 爬虫小案例 爬虫简介 我们一般情况 都是通过浏览器正常访问服务端获取资源浏览器展示给用户看 爬虫 模 ...

  3. JZ-062-二叉查找树的第 K 个结点

    二叉查找树的第 K 个结点 题目描述 给定一棵二叉搜索树,请找出其中的第k小的结点. 题目链接: 二叉查找树的第 K 个结点 代码 /** * 标题:二叉查找树的第 K 个结点 * 题目描述 * 给定 ...

  4. nginx 配置 https,及加载配置文件夹

    首先需要去申请一个域名签名证书,在腾讯云,阿里云都有免费版,然后下载下来按如下配置,请根据自己路径更改 server { listen 80; server_name xxx.xxx.cn; root ...

  5. 解决移动端ios网页端收起键盘导致的页面空白问题

    一句代码就搞定了,只要失焦的时候把窗口滚动位置设置到(0,0)就行了 <input type="text" onblur="window.scrollTo(0, 0 ...

  6. ElasticSearch7.3 学习之倒排索引揭秘及初识分词器(Analyzer)

    一.倒排索引 1. 构建倒排索引 例如说有下面两个句子doc1,doc2 doc1:I really liked my small dogs, and I think my mom also like ...

  7. Spring系列26:Spring AOP 通知与顺序详解

    本文内容 如何声明通知 如何传递参数到通知方法中 多种通知多个切面的通知顺序 多个切面通知的顺序源码分析与图解 声明通知 Spring中有5种通知,通过对应的注解来声明: @BeforeBefore ...

  8. 2022 年最受瞩目的新特性 CSS @layer 到底是个啥?

    步入 2022,CSS 的新特性层出不穷,而最近在 CSS 圈最受瞩目的新特性,非 CSS @layer 莫属. 本文,将用最简洁的语言,快速让读者们搞懂,到底什么是 CSS @layer 新规范. ...

  9. Mybatis执行流程浅析

    从三个主要的对象SqlSessionFactoryBuilder->SqlSessionFactory->SqlSession说起 inputStream = Resources.getR ...

  10. 定位一个oom问题

    当系统出现oom问题时,我们一般的定位思路是怎样的? 系统OOM常见的原因有: 1.用户态内存需求过多,资源不足: 2.大页配置不正确: 3.水位线值异常: 4.slab内存过多: 5.rcu异常: ...