• 变量声明:
    var name="张三"; 指定类型后不能赋值其他类型
    var name;不指定类型 函数类使用
    dynamic name="11"; 不确定具体类型时候用,可以初始化,后面赋值其他类型
    String name = 'bob'; 指定具体类型字符串
    name.runtimeType 显示类型
    var name; 没有赋值情况下,所有类型都是null
    Object a=1; 不确定类型用和dynamic一样
    变量作用域在{}中确定,层级越深作用域越小,函数外的作用域很大
    常量定义区别
    final nowTime = DateTime.now();//需要运算
    const pi=3.14; //不需要运算
  • 数据类型,基本类型有数字,字符,布尔
int? a;此时a可以是null
int a=1; 整型
var a=0xFFFFFF; 推断定义类型,十六进制,输出int
double b=1.01 双精度浮点数
num c=1.1 同时支持整型和浮点
方法或属性
isEven 是否偶数 
isOdd 是否奇数
int.parse("123") String转int
var a=double.parse("123") String转换double 123.0
1.toString(); 转字符 1.22.toString() 1.225677.toStringAsFixed(2);保留2位小数
1.toDouble(); 转双精度
1.22.toInt();转换int
字符串可以是单引号或双引号,变量可以$name替换,表达式${}替换,拼接字符串用+,多行使用'''或"""
String name= 'Hi ${name.toUpperCase()}';
String name='''你好
世界''';//三个双引号或单引号里面换行保留
var str='nihk' 'nih'
            'ceui'
            '中国';
字符串连接可以用+也可以不用 nihknihceui中国
var str=r'我是\n中国人'; 输出我是\n中国人保留\n

属性或方法
length 长度  isEmpty是否为空 

布尔 只有true 和false,只有值为true才是真其余都是false;

List类型,有序集合其它语言的数组
var a=["a","b"]; var b=const [1,2,3] ; 或者 var a=[]; a.add(12);任意类型 var a=[]..length=3; 长度为3;<int>[]是int类型 List<int> 定义类型
var list = [1, 2, 3];
var list2 = [0, ...list] //插入
var list2 = [0, ...?list] //允许为空
var a=[1,2,3,if(true)12];//允许if
var a=[1,2,3,for(var i in [1,2,5]) i ]; 支持for
[for (var i = 1; i < 5; i++) i];
List<String> a = ['red', 'yellow', 'blue', 'green'];//定义1
var a = <String> ['red', 'yellow', 'blue', 'green']; //定义2
a.add('aa') 添加 a[0]下标访问  a.addAll(["12","aa"]);
a.insert(0, 'aa'); 头部插入 a.insert(a.length, 'aa');尾部插入 a.insertAll(0, ["aa"]);
a.removeAt(2) 删除第三个 a.clear();清空 a.remove("blue");删除值 a.removeLast()删除最后一个 a.removeRange(0, 2);删除两个不包括2
a.removeWhere((element) => element.length < 4);
a.sublist(1,3)截取1-3 [yellow, blue] 不含最后一个
var b =a.sublist(1); 相当于(1,a.length)
var b =a.getRange(1, 3); 某个范围(yellow, blue)不含最后一个返回Iterable类型接口 b.forEach((e)=>print(e));
var b =a.join(","); 用,连接输出字符串
var b =a.contains("red");//是否包含red
 var b =a.isEmpty; var b =a.isNotEmpty;是否为空,不为空
 Map<int,String> b=a.asMap();转换map
 Set<String> b=a.toSet(); 转换set自动去重复
 var c = a.followedBy(b)合并  
 a.sort();升序abc排序 a.shuffle();随机排序 都没有返回值,排序里面支持方法
 a.sort((num1, num2) => num1 - num2); //升序排序
 a.sort((num1, num2) => num2 - num1);//降序

 var i=a.indexOf('blue'); 查找位置2 没找到-1
 var i=a.lastIndexOf('blue'); 从最后开始查找,返回位置

for(int i = 0; i < a.length; i++) {print(a[i]);}
a.forEach((element) {print(element);});
for(String e in a){print(e);}

Set类型,无序集合
var a=<dynamic>{}; a.add(12);任意类型;var a=<int>{};整形
var b=const {1,2,3}
Set<String> a= {'red', 'yellow', 'blue', 'green'};//标准1
var a = <String> {'red', 'yellow', 'blue', 'green'}; //定义2
a.intersection(b) 交集 a.union(b)并集 a.difference(b) 输出a里面在b里面不存在的

Map类型
var gameMap = {'microsoft': 'Halo', 'sony' :'God of War'}; gameMap["sony"]="1";
var a={};//任意类型
var a=<String,dynamic>{}; a["a"]=123;特定类型
Map<String,String> a={"a":"中国","b":"美国"}; 标准定义
var a = <String,String>{"a":"中国","b":"美国"}; 定义2
var b=a.containsKey("a");var b=a.containsValue("中"); 包含key 包含值判断
var b=a.keys.toList();var b=a.values.toList();
var b=a.values.toSet();var b=a.keys.toSet();
a.remove('a');删除key
Map<String, int> colorMap = Map.fromIterables(key, val);//key val都是List
Map b = a.map((key, value) => MapEntry(value, key));//map key val交换;除了for foreach

队列Queue
 var a= Queue<int>();
          a.add(-1);
          a.addAll([1,6]); 添加列表
          a.addFirst(9); 头部
          a.addLast(100); 尾部追加
int b= a.removeFirst();取出值
集合中都有any
var a=[1,2,3,4,5];
var b=a.any((element) => element==25); 判断值是否有一个等于25
var b=a.every((element) => element==25); 要全部等于25
a.take(5) 截取前五个组成新集合
var a = [
              [1, 2],
              [3, 4]
            ];
var b =a.expand((element) => element);//转换成一维

Iterable是一个接口,常用的集合类List、Set、Map
Iterable<int> iterable = [1, 2, 3];
int v = iterable.elementAt(1);

json
List l=jsonDecode(str); //json转list
Map<String,dynamic> m=jsonDecode(aa); //json转map
String s= jsonEncode(map/list)
json转模型 json2dart_safe
var aa='{"info":[{"name":"12","age":"33","sex":1,"descs":"简介"},{"name":"12","age":"33","sex":1,"descs":"简介"}]}';
var a =User.fromJson(jsonDecode(aa)).info;
a?.forEach((element) {print(element.descs);});
  • 运算符

a is String 是否是字符串,判断类型
a is! String 不属于某个类型
name as String 类型转换
var message = input?? 'Hello'; 判断input是否null,不是直接返回input,否则hello
person..name = 'bob'..age = 28; 连续操作..
var message; message ??= 'Hello'; 赋值判断是否为null,然后赋值
if(){

}else if(){

}else{

}
List l=[1,2,3,5];
          for(int i=0;i<l.length;i++){
            print(l[i]);
          }
l.forEach((element) {
            print(element);
          });
for (var element in l) {
            print(element);
          }
assert(true);断言,只有为true执行

try {
    var a = 1/0;
  }on IntegerDivisionByZeroException{
    //一个具体异常
    print('0 被除');
  }on Exception catch(e){
    //任意一个异常
    print('a exception: $e');
  }catch (e) {
    //非具体类型
    print('exception $e');
  }finally {
    print('finally');
  }
  • 定义函数
    String bobSay(String words) {
    return 'bob say $words';
    }
    String bobSay2(String words) => 'bob say $words'; //简写
    String fn(String a,[String a=1]){}//调用  fn(1,2),第二个可选
    String fn({String a,int b=1}){} //调用 fn(a:"aa",b:3)
class A{
static int a=1;
static fn(string w){}
a(){ }和类同名函数为构造函数初始化变量,不能有return
factory a(){ return } factory修饰的工厂构造函数必须有return

}

// 三种形式的库导入
import dart:io; 自带标准库
import '../base.dart';
import 'package:test/test.dart';

时间
String now = DateTime.now().timeZoneName//获取时区
String now = DateTime.now().toString().substring(0,19);//标准时间
int now = DateTime.now().millisecondsSinceEpoch; 时间戳13
作者:Yoby  创建时间:2021-12-28 18:04
 更新时间:2024-12-05 13:26
上一篇:
下一篇: