Flutter七日游第一天:2018-12-16 天气:冷
零前言:
作为一名资深安卓业余爱好者(自诩),感觉应该入一下Flutter的坑了,
不管怎么说,新技术多少要了解一点,本系列就作为我的学习笔记吧
先把今天入坑的感觉写一写:
1 | 1.环境的搭建前人把雷踩得差不多了,也不是很麻烦 |
一、Flutter初体验
1、下载Flutter的SDK
Android 的SDK要在环境变量配置一下:
ANDROID_HOME
有什么问题可以在cmd用flutter doctor
命令检查一下,对症下药
1 | git clone -b beta https://github.com/flutter/flutter.git |
2、配置环境变量
1 | PUB_HOSTED_URL=https://pub.flutter-io.cn |
3、AndroidStudio安装Dart和Flutter插件
1 | setting-->plugins-->下方第二个-->搜索-->安装-->重启 |
4、新建项目
打开AS后就能看到新建一个Flutter项目,然后就写名字
initializing gradle 如果一直不动,android/gradle/wrapper/gradle-wrapper.properties
对应的gradle版本在http://services.gradle.org/distributions/
自己下载,放在本地
二、第一次看初始项目的内心戏
1 | android:我最熟悉的android |
1.看一下:android/app/src/main/AndroidManifest.xml
1 | <application |
2.可见程序入口是:MainActivity.java
让我有一种libgdx的即视感
1 | public class MainActivity extends FlutterActivity { |
3.GeneratedPluginRegistrant.java
1 | /** |
4、是谁弄脏了我雪白的界面(显示)
4.1.MainActivity显然不是,怎么查在哪呢?
好吧在:main.dart里
1 | import 'package:flutter/material.dart'; |
4.2.对MyApp的认知
1 | class MyApp extends StatelessWidget { |
4.3.对MyHomePage的认知
1 | class MyHomePage extends StatefulWidget { |
4.4.对_MyHomePageState的认知
1 | class _MyHomePageState extends State<MyHomePage> { |
4.5.floatingActionButton,这个安卓元素有
1 | floatingActionButton: FloatingActionButton( |
ok,这就是我第一次看Flutter代码时的感觉,mark了三处,
下面带着问题正式学一下Dart方言。
三、Dart语法一探
1、圆的周长
1 | const PI = 3.141592654; //const:编译时就是常量 |
1.感觉const就像英雄天生天赋,final就像等级到了,选择英雄职业(不能转职)
2.r会将里面字符串原样打出,无视各空白符
3.字符串*2就打印两次,有点意思,差值表达式:${}
和JS,kotlin相似
4.可以省略类型,但是若初始时赋值就不能再赋值其他类型,所以Dart并非弱类型语言!!!
但说它强又不怎么严谨,看下图,无力吐槽…(PS:原因:见后面dynamic类型)
2.List的使用
支持多类型,API比java多一些
可以看成Java的ArrayList和数组的结合体,any,join等操作更像Python或js中的list
1 | void baseUse() { |
forEach、any、every、map
1 | void op() { |
3.Map
这个不多说了,基本上与主流语言一致
1 | void baseUse() { |
1 | void op() { |
4.dynamic(动态的)
原来是dynamic锅,让类型变成动态了
1 | dynamic d = 20; |
5.不同的东西
1 | //--------------------奇葩的~/---------- |
6.类那点事
6.1:定义一个简单的类
PerSon(this.name, this.age)
简化了Java中的那一坨,其他差不多
1 | class PerSon { |
6.2:继承
注意语法形式
1 | class Student extends PerSon { |
就先认知这么多吧,应该够玩一玩的了。
四、Canvas走起
新学一样东西,最好选择最熟悉的点切入,对我而言是绘制
1.找到画板在哪
有个
CustomPainter
类里有canvas,二话不说,继承之,为了避免看着乱,我新建了view包view/star_view.dart
1 | import 'dart:ui'; |
2.StarView的用法
前面分析过,视图的呈现在MyHomePage中–>createState方法–>build返回的对象里
把文字的那块body改为CustomPaint就行了,FloatingActionButton就放着吧。
1 | @override |
3.屏幕尺寸的获取
flutter中用的单位目测都是dp所以我用第三行那个,需要传入一个context
就在构造方法里传一下,刚好build里有个context,你用前两个除一下也行
1 | window.physicalSize //获取屏幕尺寸px----1080.0, 2196.0 |
1 | //使用是传入context |
4.网格走起:
4.1:StarView接收context,并初始化画笔
1 | Paint mHelpPaint; |
4.2:绘制网格路径
以前Android里面用的函数,修改了一些语法,给flutter用
1 | /** |
4.3:绘制网格
1 | @override |
4.4:坐标系绘制
1 | //绘制坐标系 |
坐标系路径
1 | /** |
5.小结一下
感觉flutter里的Canvas很贫弱…好多api都没有,不知道是我没找到还是什么
canvas竟然没办法画文字,这不科学,mark一下。坐标系也就只能这样凑合一下了
还有Color用着挺别扭的,画线传参为什么非要Offset,连个重载都没有
6.绘制n角星
好吧,我又要拿星星来丢人现眼了
我已经n角星的java代码翻译成dart方言了
1 | /** |
1 | canvas.translate(160, 320);//移动到坐标系原点 |
7.正n角星和正多边形
7.1:方法封装
1 | /** |
7.2.批量绘制:
1 | canvas.translate(0, 320); |
8.状态控制,点击随机色
第一个按钮的fab点击更改数字,这里换成颜色试一下:
1 | //-----------main.dart------------------- |
五、汇集一下今天的mark
经过初始项目的分析以及Dart方言的简单入门,再加上Canvas的绘制
基本上熟悉了Dart的语法与Flutter的套路(和React很像),第一天就这样吧
1 | 1.setState和React这是一模一样,mark一下,估计会刷新界面 |
1 | 2.MyHomePage也是StatefulWidget家的,第一句话感觉挺诡异,先mark一下 |
1 | 3.现在焦点应该汇聚在StatefulWidget身上,很多地方都出现了,mark一下 |