flutter-初识(基础语法)
前言:笔者学过 java,刚刚接触 flutter,记录下基本的一些语法。
一、认识Flutter
Flutter 是 google 推出的,使用的 Dart 语言,它可以跨平台实现 Android 和 IOS 的移动UI开发。当然,他不止这些特性,但是笔者正是因为这点来学习的。
Flutter 官网:https://flutter.dev/
二、Dart基本语法
Dart 官网:http://dart.goodev.org/
Dart 有一个网页编辑器,如果你还没有安装环境,可以使用 DartPad 体验下 dart 的语法
// 接下来笔者将以实际代码来展示 dart 的一些基本语法 //首先现在这就是一个完整的 .dart 文件,如同 .java
//我们把他取名为 firstDart.dart //这里定义了一个叫做 A 的类
class FirstDart {
//下面定义了些可能常用的类型属性
//注意:dart 中所有对象不赋值的情况下都是 null,null 也是对象 //先看下这两个动态数据类型,它们可以赋值任何对象
var vStr = "字符串";
var vInt = 1;
dynamic dStr = "字符串";
dynamic dInt = 1; //我们看下数值。
//num,int,double。num 其实就是包含了 int 和 double
num n = 0;
int i = 0;
double d = 0.0; //dart 中的字符串定义和javascript很类似,非常自由,单双引号都可以
String str1 = "这是字符串";
String str2 = '这是字符串';
//字符串拼接方式也是很多,简单了解下,需要的时候可以大胆多尝试些写法
String str3 = "这是" + "字符串";
String str4 = "这是" "字符串";
String str5 = "这是" '字符串';
String str6 = """
这也是
字符串
"""; //boolean 类型,这个简单就不多说了
bool b = true; //集合,详细的后面再说,这里简单展示下List的一些定义
List list1 = new List();//默认长度是0
List<String> list2 = new List<String>(3);//dart中也是有泛型的,初始化集合大小
List list3 = new List()..length = 3;//这其实就是一种链式写法,后面再详细介绍
List list4 = [1,'2',3.0,true];//直接初始化集合
List<String> list5 = ['1',"2"];//如果前置类型指定了泛型,初始化就必须是指定的类型 //映射,详细的后面再说,这里简单展示下Map的一些定义
Map map1 = new Map();
Map<int,String> map2 = new Map();//Map的泛型
Map map3 = {"key1" : "value1", 1 : 2};//直接初始化Map //函数对象,将代码块封装到这个函数对象中可用于传递
//dart 也可以使用 Lambda表达式,不过java是 ->,而dart是 =>
//这个目前发现好像有些和我想的不一样,具体的以后再补充,目前发现里面好像不让用分号,也就是不让写多行代码
Function fun1 = () => print("这里是代码块");
Function fun2 = (String str) => str.trim().toLowerCase();//可以函数对象的入参,不过好像没有检查,可能会引发启动错误 //下面我们再看下常用的一些修饰词 //final 目前来看和java差不多
final String finalStr = "这是一个不可修改的字符串";
//static 目前来看和java差不多
static String staticStr = "这是一个静态字符串";
//static final 组合使用要注意,static 必须修饰在 final 前面,否则会编译错误,java 中是没有问题的
static final String staticFinalStr = "这是一个不可修改的静态字符串"; //const 常量,目前觉得它非常类似 final,但是它只能修饰静态的
static const String constStr = "这是一个常量"; //_ 下滑线,这个可以用于大多数名称(如:变量名,类名等)前,它会将修饰的类或变量私有化,类似 java 的 private
String _privateStr = "这是一个私有的字符串"; //下面看下构造器和方法
//构造器
//FirstDart();//没有定义构造器的时候应该就是这样的一个默认构造器
//注意:dart 一个类中只能定义一个构造器,但是 dart 对于参数非常自由,下面讲方法参数的时候会介绍
FirstDart([String str]) {
if (str != null) {
this._privateStr = str;
}
} //方法
void method1() { } //无参无返回
String method2() { return "返回字符串"; } //无参有返回 //可以看到返回定义是可以不写的,但是并不推荐,因为这样没有可读性
method3() { } //默认无返回
method4() { return "返回字符串"; } //默认返回字符串类型 //在方法名前加 _ 就可以将方法私有化
void _method5() {
print("控制台打印"); //这个方法是内置的,哪里都可以调用
} //async 异步,方法参数后定义
void method6() async {
//await 等待,必须在 async 下使用
await print("初始化");
} //下面看下 dart 中参数可以怎么定义
//[] 表示可选参数,顾名思义 可以传,也可以不传
//注意:可选参数必须定义在一起,放到最后面,传参时是按照方法顺序的
//看到 param4,可以看到参数定义可以不指定类型的,应该默认 Object 的,不过不推荐
//以及最后面多出一个逗号也不会有编译错误,java 的话就比较严格了,不过这并不能说是优点
static void method7(int param1, String param2, [double param3, param4, ]) {
if (param3 != null) { //假设 param1 = 5,param3 = 2.1
//简单看下运算符
print(param1 * param3); //输出:10.5
print(param1 / param3); //输出:2.380952380952381
print(param1 ~/ param3); //取整,输出:2
print(param1 % param3); //输出:0.7999999999999998 //${} 字符串中引入简单操作
print("param1 + param3 = ${param1 + param3}"); //输出:param1 + param3 = 7.1
} //如果 param2 = "参数二"
print("我们引入${param2}这个字符串"); //输出:我们引入参数二这个字符串 if (param4 != null) { //假设 param4 = "参数四"
//{} 花括号在某些情况是可以不写的,但是不推荐
print("这是param4的值是$param4"); //输出:这是param4的值是参数四
}
} //{} 表示命名参数,在调用的时候不需要关心参数顺序,但需要指定参数名称,同时他们都是可选的
//例:FirstDart.method8(param2: "参数二", param1: "参数一");
// FirstDart.method8(param1: "参数一");
static void method8({String param1, String param2}) { } //也可以这样组合,但是也要注意,命名参数应该都放在一个 {} 中,并放在最后
//命名参数 包含了 可选参数 的功能,所以他们组合自然是没有意义的
//例:FirstDart.method9("参数一", param2: "参数二", param3: "参数三");
// FirstDart.method9("参数一");
static void method9(String param1, {String param2, String param3}) { } } //接下来我们看下类的定义还有哪些东西
//注意:dart 中没有内部类的概念,不可以在 class 中再定义一个 class,但是允许一个 .dart 文件中有多个 class
//A 这是一个类,同时它也可以是一个接口,没有定义构造器的时候还可以是一个"混合类"
class A {
void a() { print("这是A的a方法"); }
} //extends 继承,和 java 一样,只能单继承
class Ason extends A { } //implements 实现,可以多实现,但是必须重写方法
class Aimpl implements A {
@override
void a() { }
} //with 混合,这对我来说是个新鲜概念
//Amixin 可以使用 with 多个混合类,同时获得他们的所有方法和属性,有点多继承的意思
//它还有很多其他的用法和讲究,后面我再补充
class Amixin with A { } //这里定义了一个抽象类 B,这个和 java 差不多
abstract class B {
void b();
void bImpl() { }
} //这是定义了一个枚举类 C,和 java 有写区别
enum C {
a,b,c
} //这是定义了一个混合类 D
//注意:混合类没有构造函数
mixin D on B { //on 是一个关键字,它表示混合 D 必须 extends 或 implements B
void a() { print("这是D的a方法"); }
void d1() { }
void d2() { }
void d3() { }
} //混合 D 必须先继承 B,因为 B 有抽象方法,所以需要实现 b 方法
//同时混合了 D 和 A,它们都有 a 方法,这时候 Dmixin 对象调用的会是 A 的 a 方法
class Dmixin extends B with D,A {
@override
void b() { }
}
//我们再定义第二个 .dart 文件,取名叫 secondDart.dart,并与 firstDart.dart 是同一目录下
//Dart 没有 package 关键字,但也是有 import 的
//我们使用 import 引入 firstDart.dart,当然同一目录下是默认引入的
import 'package:firstDart.dart';
//as 指定别名,如果引入的两个 dart 中有相同的 class,别名可以解决这个问题
import 'package:firstDart.dart' as first;
//deferred as 指定懒加载,顾名思义
import 'package:firstDart.dart' deferred as first;
//show,只引入 FirstDart 和 A
import 'package:firstDart.dart' show FirstDart,A;
//hide,除了 FirstDart 和 A 其他都引入
import 'package:firstDart.dart' hide FirstDart,A;
//如果 firstDart.dart 在 first 包下,则是这样:import 'package:first/firstDart.dart'; //main 方法,它是程序的入口
void main () {
//如果 first 是懒加载的,每次使用的时候需要调用 loadLibrary() 方法
await first.loadLibrary();
FirstDart firstDart = new first.FirstDart("字符串"); //再看下这些基本操作
//for 循环
for (int i = 0; i < 5; i++) {
//if 判断
if (i >= 3) {
print("i=${i}");
break;
}
}
bool b = true; //断言,非真条件终止程序,不推荐使用
assert(b); //while 循环
while(b) {
b = false;
}
int i = 1;
//switch 选择
switch (i) {
case 0:
print("i=0");
break;
case 1:
print("i=1");
break;
default:
print("i=${i}");
} //List 的一些简单使用
List<String> strList = ["str0", "str1", "str2"];
strList.add("str3");
print(strList.length);//输出:4
strList[0] = "第一个str";
print(strList[0]);//输出:第一个str
strList.forEach((str) => print(str));//遍历 //Map 的一些简单使用
Map<String, String> strMap = {"key1": "value1", "key2": "vlaue2", "key3": "vlaue3"};
strMap.putIfAbsent("key1", () => "newValue1");
strMap.putIfAbsent("key4", () => "value4");
print(strMap.length);//输出:4
print(strMap["key1"]);//输出:value1
strMap["key1"] = "newValue1";
print(strMap["key1"]);//输出:newValue1
strMap.forEach((key,value) => print("${key} = ${value}"));//遍历
}
flutter-初识(基础语法)的更多相关文章
- vue 初识(基础语法与数据驱动模型)
1.es6的语法 let 特点: 1.局部作用域 2.不会存在变量提升 3.变量不能重复声明 const 特点: 1.局部作用域 2.不会存在变量提升 3.不能重复声明,只声明常量 不可变的量 模板字 ...
- 006 01 Android 零基础入门 01 Java基础语法 01 Java初识 06 使用Eclipse开发Java程序
006 01 Android 零基础入门 01 Java基础语法 01 Java初识 06 使用Eclipse开发Java程序 Eclipse下创建程序 创建程序分为以下几个步骤: 1.首先是创建一个 ...
- 005 01 Android 零基础入门 01 Java基础语法 01 Java初识 05 Eclipse简介
005 01 Android 零基础入门 01 Java基础语法 01 Java初识 05 Eclipse简介 Eclipse是一款集成开发工具--IDE. 集成开发环境(IDE,Integrated ...
- 004 01 Android 零基础入门 01 Java基础语法 01 Java初识 04 Java程序的结构
004 01 Android 零基础入门 01 Java基础语法 01 Java初识 04 Java程序的结构 Java程序的结构 Java程序外层--类 程序外层,如下面的代码,是一个类的定义. c ...
- 003 01 Android 零基础入门 01 Java基础语法 01 Java初识 03 Java程序的执行流程
003 01 Android 零基础入门 01 Java基础语法 01 Java初识 03 Java程序的执行流程 Java程序长啥样? 首先编写一个Java程序 记事本编写程序 打开记事本 1.wi ...
- 002 01 Android 零基础入门 01 Java基础语法 01 Java初识 02 Java简介
002 01 Android 零基础入门 01 Java基础语法 01 Java初识 02 Java简介 学习Java的基础语法 Java是一门编程语言,学习的逻辑其实和现实世界的语言是一样的,需要了 ...
- 001 01 Android 零基础入门 01 Java基础语法 01 Java初识 01 导学
001 01 Android 零基础入门 01 Java基础语法 01 Java初识 01 导学 welcome to Java World 欢迎来到Java世界 一起领略Java编程世界的奥秘与奥妙 ...
- 初识PHP(一)基础语法
一直准备学习PHP,结果前一段时间总是有事情,耽误了一阵子.现在赶快迎头赶上! 这个系列只是谈谈我对于PHP的一些看法,不是教程性质的.另外我是小白,只是写写随笔,大神求轻拍.本人学习过c .java ...
- Java基础语法学习
Java基础语法学习 1. 注释 单行注释: //单行注释 多行注释: /*多行注释 多行注释 多行注释 多行注释 */ 2. 关键字与标识符 关键字: Java所有的组成部分都需要名字.类名.变量名 ...
- Swift与C#的基础语法比较
背景: 这两天不小心看了一下Swift的基础语法,感觉既然看了,还是写一下笔记,留个痕迹~ 总体而言,感觉Swift是一种前后端多种语言混合的产物~~~ 做为一名.NET阵营人士,少少多多总喜欢通过对 ...
随机推荐
- python 排序和查找算法
一.搜索 1.顺序查找 数据存储在具有线性或顺序关系的结构中时,可顺序访问查找 def sequential_search(ilist, item): pos = 0 while pos < l ...
- wpf 代码设置图片路径(后台和xamll)
项目中经常使用背景图片,当一个小组共通开发时,路径的选择应该是在项目运行的固定文件夹下 此时,可用代码实现:pack://SiteOfOrigin:,,,/Images/Icons/HomePageB ...
- Android实用的Toast工具类封装
Toast这个提示框大家都晓得,显示一段时间后自动消失,不能获得焦点.但是在使用中有些问题: 1)需要弹出一个新的Toast时,上一个Toast还没有显示完2)可能重复弹出相同的信息3)Toast具体 ...
- element-ui的tag组件关闭事件失效的原因
问题如上,原因是忘了加上一个函数 @close="handleClose(tag)" <el-tag :key="tag" v-for="tag ...
- vue全家桶项目应用断断续续的记录
一.引用axios插件报错 axios使用文档 Cannot read property 'protocol' of undefined 解决方法:在mainjs文件中把axios引入vue的原型函数 ...
- adb 连接夜神和逍遥模拟器
然后运行cmd命令,cd到夜神安装目录,执行命令 adb connect 127.0.0.1:62001 nox_adb.exe connect 127.0.0.1:62001 逍遥模拟器 adb c ...
- java XML解析防止外部实体注入
/** * 增加防止部实体注入逻辑 * <功能详细描述> * @param reader * @throws SAXException * @see [类.类#方法.类#成员] */ pu ...
- python 一些程序规范(跨目录调用文件)
文档内容学习于 http://www.cnblogs.com/xiaozhiqi/ 参考: https://www.cnblogs.com/monologuesmw/p/9490093.html 软件 ...
- InfoQ一波文章:菜鸟核心技术/Intel发布CPU新架构3D堆栈法/BDL/PaddlePaddle/百度第三代Spider/Tera
菜鸟智慧新物流核心技术全解析 孟靖 阅读数:63192018 年 12 月 14 日 16:00 2018 年天猫双 11 全球狂欢节已正式落下帷幕,最终成交额定格在 2135 亿元,物流订单 ...
- CSP2019&&AFO
day-1 attack回来了,颓废,吃蛋糕. day-0 和attack继续车上颓废. 报道,志愿者胖乎乎的,学校很新. day-1 T1写完写T2,两小时T310分 出来发现,T2好像有个地方没路 ...