对flutter新建工程的初步认识
不管是visual code 还是Android studio 在新建你的第一个flutter工程时都会自动生成一个简易的demo-----说是简单,但是如果能看得懂,会节省很多的学习时间。
即使开发软件不同,工程结构也相同,下面以Android studio为例:
上图除了我蓝线标记的都是工程自动生成的,其中的lib尤为重要,几乎所有的界面、功能代码都在lib中写的;资源文件可以放在自己新建的assets文件夹下;至于引入三方库的则放在pubspec.yaml
中,点击该文件你会看到
可以在dependencies下引入你所需要的库,然后点击上面的Packages get
稍等片刻即可。
安利一波三方库使用、引入、注意事项的链接:https://pub.dartlang.org/packages/
下面进入正题:
点开main.dart
你会看到以下代码(在这里我直接在代码中写注释)
import 'package:flutter/material.dart';
void main() => runApp(MyApp ); //这里是app启动的入口
class MyApp extends StatelessWidget { //StatelessWidget 是dart文件必须实现的类
@override
Widget build(BuildContext context) {
return MaterialApp( //在这里显示了写法1
title: 'Acesmart',
theme: ThemeData( //主题
primarySwatch: Colors.blue,
),
home: MyHomePage(title: '‘ Home Page'), //引入你所要展示的界面
);
}
}
class MyHomePage extends StatefulWidget { //在这里显示了写法2,意思是说如果你直接略掉MyApp ,直接runApp(MyHomePage )也可以,其他的自己想想
MyHomePage({Key key, this.title}) : super(key: key); ///构造方法,传参key和title
final String title;
//构造方法不写的话,下面这个方法是本类唯一要实现的方法
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> { //这个是关键
int _counter = 0; //定义的变量
void _incrementCounter() { //定义的方法
setState(() {
_counter++;
});
}
//必须实现的方法,功能调用、绘制ui都在这
@override
Widget build(BuildContext context) {
//绘制ui的关键处Scaffold,下面会说
return Scaffold(
appBar: AppBar( //头布局
title: Text(widget.title),
),
body: Center( //center:布局居中
child: Column( //Column:子布局分行
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[ //子布局
Text(
'You have pushed the button this many times:',
),
Text(
'$_counter', //上面定义的变量
style: Theme.of(context).textTheme.display1,
),
],
),
),
floatingActionButton: FloatingActionButton( //在 Material 中定义的一个功能按钮。
onPressed: _incrementCounter, //调用上面的方法
tooltip: 'Increment',
child: Icon(Icons.add), //图标设置,Icons是Material自带的
),
);
}
}
上面着重要注意的就是Scaffold:
-
appBar:显示在界面顶部的一个 AppBar
-
body:当前界面所显示的主要内容
-
floatingActionButton: 在 Material 中定义的一个功能按钮。
-
persistentFooterButtons:固定在下方显示的按钮。https://material.google.com/components/buttons.html#buttons-persistent-footer-buttons
-
drawer:侧边栏控件
-
bottomNavigationBar:显示在底部的导航栏按钮栏。可以查看文档:Flutter学习之制作底部菜单导航
-
backgroundColor:背景颜色
-
resizeToAvoidBottomPadding: 控制界面内容 body 是否重新布局来避免底部被覆盖了,比如当键盘显示的时候,重新布局避免被键盘盖住内容。默认值为 true。
代码实例就看你新建的工程吧,看完后,如果需要什么控件,可以自主查阅怎么用。
- 源码级别解读 mybatis 插件
- 在WebKit中并行加载外部脚本译:
- 100行代码,搞定http监控框架
- 【腾讯反病毒实验室】深度剖析APT28最新作品
- [译]clearfix改良及overflow:hidden详解
- 深入解析CSS样式层叠权重值
- [译]CSS边框实现“无图化”设计
- 自适应的多列图文混排改进
- [译]Laravel 5.0 之运行环境及环境变量
- 90行代码,搞定日志监控框架
- Laravel Migrate 中的 Fresh 和 Refresh 命令
- 框架组件,究竟要不要自研?
- Nginx泛解析到子目录,自动判断有无public目录
- 撩妹必备,3行代码伪造出一个“好莱坞黑客”屏幕
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 移动端开发的几点建议
- 数据结构题集(严书)图 常见习题代码
- PAT (Basic Level) Practice (中文)1036 跟奥巴马一起编程 (15 分)
- PAT (Advanced Level) Practice 1024 Palindromic Number (25 分)
- Flink 连接 hive 解决 java.net.UnknownHostException
- PAT (Advanced Level) Practice 1147 Heaps (30 分)
- Java自动化测试(app自动化环境搭建 31)
- PAT (Basic Level) Practice (中文)1038 统计同成绩学生 (20 分)
- 数据结构题集(严书)串 常见习题代码
- PAT (Basic Level) Practice (中文)1040 有几个PAT (25 分)
- 201909-4ccf计算机职业资格认证考试 第四题 推荐系统
- 【Linux_Shell 脚本编程学习笔记四、监控系统内存并报警企业案例脚本】
- PAT (Basic Level) Practice (中文)1042 字符统计 (20 分)
- Pytorch 中的 5 个非常有用的张量操作
- k-近邻算法实现数字识别