前言:笔者学过 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-初识(基础语法)的更多相关文章

  1. vue 初识(基础语法与数据驱动模型)

    1.es6的语法 let 特点: 1.局部作用域 2.不会存在变量提升 3.变量不能重复声明 const 特点: 1.局部作用域 2.不会存在变量提升 3.不能重复声明,只声明常量 不可变的量 模板字 ...

  2. 006 01 Android 零基础入门 01 Java基础语法 01 Java初识 06 使用Eclipse开发Java程序

    006 01 Android 零基础入门 01 Java基础语法 01 Java初识 06 使用Eclipse开发Java程序 Eclipse下创建程序 创建程序分为以下几个步骤: 1.首先是创建一个 ...

  3. 005 01 Android 零基础入门 01 Java基础语法 01 Java初识 05 Eclipse简介

    005 01 Android 零基础入门 01 Java基础语法 01 Java初识 05 Eclipse简介 Eclipse是一款集成开发工具--IDE. 集成开发环境(IDE,Integrated ...

  4. 004 01 Android 零基础入门 01 Java基础语法 01 Java初识 04 Java程序的结构

    004 01 Android 零基础入门 01 Java基础语法 01 Java初识 04 Java程序的结构 Java程序的结构 Java程序外层--类 程序外层,如下面的代码,是一个类的定义. c ...

  5. 003 01 Android 零基础入门 01 Java基础语法 01 Java初识 03 Java程序的执行流程

    003 01 Android 零基础入门 01 Java基础语法 01 Java初识 03 Java程序的执行流程 Java程序长啥样? 首先编写一个Java程序 记事本编写程序 打开记事本 1.wi ...

  6. 002 01 Android 零基础入门 01 Java基础语法 01 Java初识 02 Java简介

    002 01 Android 零基础入门 01 Java基础语法 01 Java初识 02 Java简介 学习Java的基础语法 Java是一门编程语言,学习的逻辑其实和现实世界的语言是一样的,需要了 ...

  7. 001 01 Android 零基础入门 01 Java基础语法 01 Java初识 01 导学

    001 01 Android 零基础入门 01 Java基础语法 01 Java初识 01 导学 welcome to Java World 欢迎来到Java世界 一起领略Java编程世界的奥秘与奥妙 ...

  8. 初识PHP(一)基础语法

    一直准备学习PHP,结果前一段时间总是有事情,耽误了一阵子.现在赶快迎头赶上! 这个系列只是谈谈我对于PHP的一些看法,不是教程性质的.另外我是小白,只是写写随笔,大神求轻拍.本人学习过c .java ...

  9. Java基础语法学习

    Java基础语法学习 1. 注释 单行注释: //单行注释 多行注释: /*多行注释 多行注释 多行注释 多行注释 */ 2. 关键字与标识符 关键字: Java所有的组成部分都需要名字.类名.变量名 ...

  10. Swift与C#的基础语法比较

    背景: 这两天不小心看了一下Swift的基础语法,感觉既然看了,还是写一下笔记,留个痕迹~ 总体而言,感觉Swift是一种前后端多种语言混合的产物~~~ 做为一名.NET阵营人士,少少多多总喜欢通过对 ...

随机推荐

  1. python 排序和查找算法

    一.搜索 1.顺序查找 数据存储在具有线性或顺序关系的结构中时,可顺序访问查找 def sequential_search(ilist, item): pos = 0 while pos < l ...

  2. wpf 代码设置图片路径(后台和xamll)

    项目中经常使用背景图片,当一个小组共通开发时,路径的选择应该是在项目运行的固定文件夹下 此时,可用代码实现:pack://SiteOfOrigin:,,,/Images/Icons/HomePageB ...

  3. Android实用的Toast工具类封装

    Toast这个提示框大家都晓得,显示一段时间后自动消失,不能获得焦点.但是在使用中有些问题: 1)需要弹出一个新的Toast时,上一个Toast还没有显示完2)可能重复弹出相同的信息3)Toast具体 ...

  4. element-ui的tag组件关闭事件失效的原因

    问题如上,原因是忘了加上一个函数 @close="handleClose(tag)" <el-tag :key="tag" v-for="tag ...

  5. vue全家桶项目应用断断续续的记录

    一.引用axios插件报错 axios使用文档 Cannot read property 'protocol' of undefined 解决方法:在mainjs文件中把axios引入vue的原型函数 ...

  6. adb 连接夜神和逍遥模拟器

    然后运行cmd命令,cd到夜神安装目录,执行命令 adb connect 127.0.0.1:62001 nox_adb.exe connect 127.0.0.1:62001 逍遥模拟器 adb c ...

  7. java XML解析防止外部实体注入

    /** * 增加防止部实体注入逻辑 * <功能详细描述> * @param reader * @throws SAXException * @see [类.类#方法.类#成员] */ pu ...

  8. python 一些程序规范(跨目录调用文件)

    文档内容学习于 http://www.cnblogs.com/xiaozhiqi/ 参考: https://www.cnblogs.com/monologuesmw/p/9490093.html 软件 ...

  9. InfoQ一波文章:菜鸟核心技术/Intel发布CPU新架构3D堆栈法/BDL/PaddlePaddle/百度第三代Spider/Tera

    菜鸟智慧新物流核心技术全解析   孟靖 阅读数:63192018 年 12 月 14 日 16:00   2018 年天猫双 11 全球狂欢节已正式落下帷幕,最终成交额定格在 2135 亿元,物流订单 ...

  10. CSP2019&&AFO

    day-1 attack回来了,颓废,吃蛋糕. day-0 和attack继续车上颓废. 报道,志愿者胖乎乎的,学校很新. day-1 T1写完写T2,两小时T310分 出来发现,T2好像有个地方没路 ...