前端开发_6-Flutter-Dart学习1

系列文章目录

@

前言

一、Dart是什么?

Dart介绍:

Dart是由谷歌开发的计算机编程语言,它可以被用于web、服务器、移动应用 和物联网等领域的开发。

Dart诞生于2011年,号称要取代JavaScript。但是过去的几年中一直不温不火。直到Flutter的出现现在被人们重新重视。

要学Flutter的话我们必须首先得会Dart。

官网:https://dart.dev/

Dart环境搭建:

要在我们本地开发Dart程序的话首先需要安装Dart Sdk

官方文档:https://dart.dev/get-dart

  windows(推荐):
  
    http://www.gekorm.com/dart-windows/

  mac:

    如果mac电脑没有安装brew这个工具首先第一步需要安装它:  https://brew.sh/

    brew tap dart-lang/dart
    
    brew install dart

Dart 开发工具:

Dart的开发工具有很多: IntelliJ IDEA  、 WebStorm、 Atom、Vscode等

这里我们主要给大家讲解的是如果在Vscode中配置Dart。

  1、找到vscode插件安装dart

		2、找到vscode插件安装code runner     Code Runner  可以运行我们的文件

二、dart基本使用

1.第一个dart(入口方法)

/*
 入口方法的两种定义方式
  main(){
    print('你好dart');
  }
*/
///这也是一个注释
//表示main方法没有返回值
void main(){
 print('你好dart');
}

2.变量和常量

/*Dart 变量:
  dart是一个强大的脚本类语言,可以不预先定义变量类型 ,自动会类型推倒
  dart中定义变量可以通过var关键字可以通过类型来申明变量
  如:
  注意: var 后就不要写类型 ,  写了类型 不要var   两者都写   var  a int  = 5;  报错
*/
    var str='this is var';print(str);//不指定类型,自动推测
    String str='this is var';//字符串
    int str=123;//数字类型
 /*
Dart 常量:   final 和 const修饰符  
    const值不变 一开始就得赋值
    final 可以开始不赋值 只能赋一次 ; 而final不仅有const的编译时常量的特性,最重要的它是运行时常量,并且final是惰性初始化,即在运行时第一次使用前才初始化
    永远不改量的量,请使用final或const修饰它,而不是使用var或其他变量类型。
*/    
    final name = 'Bob'; // Without a type annotation
    final String nickname = 'Bobby';
    final a=new DateTime.now();print(a);//2019-05-10 15:59:02.966122
    const bar = 1000000; // Unit of pressure (dynes/cm2)
    const double atm = 1.01325 * bar; // Standard atmosphere
 /*
Dart的命名规则:
     1、变量名称必须由数字、字母、下划线和美元符($)组成。
     2.注意:标识符开头不能是数字
     3.标识符不能是保留字和关键字。   
     4.变量的名字是区分大小写的如: age和Age是不同的变量。在实际的运用中,也建议,不要用一个单词大小写区分两个变量。
     5、标识符(变量名称)一定要见名思意 :变量名称建议用名词,方法名称建议用动词  
*/

3.数据类型

is 关键词来判断类型

/*
Dart中支持以下数据类型:
  常用数据类型:
      Numbers(数值):
          int
          double
      Strings(字符串)
          String
      Booleans(布尔)
          bool
      List(数组)
          在Dart中,数组是列表对象,所以大多数人只是称它们为列表
      Maps(字典)
          通常来说,Map 是一个键值对相关的对象。 键和值可以是任何类型的对象。每个 键 只出现一次, 而一个值则可以出现多次

  项目中用不到的数据类型 (用不到):
      Runes 
        Rune是UTF-32编码的字符串。它可以通过文字转换成符号表情或者代表特定的文字。
        main() {
          var clapping = '\u{1f44f}';
          print(clapping);
          print(clapping.codeUnits);
          print(clapping.runes.toList());       
          Runes input = new Runes(
              '\u2665  \u{1f605}  \u{1f60e}  \u{1f47b}  \u{1f596}  \u{1f44d}');
          print(new String.fromCharCodes(input));
        }       
      Symbols
        Symbol对象表示在Dart程序中声明的运算符或标识符。您可能永远不需要使用符号,但它们对于按名称引用标识符的API非常有用,因为缩小会更改标识符名称而不会更改标识符符号。要获取标识符的符号,请使用符号文字,它只是#后跟标识符:

        在 Dart 中符号用 # 开头来表示,入门阶段不需要了解这东西,可能永远也用不上。        
        http://dart.goodev.org/guides/libraries/library-tour#dartmirrors---reflection
*/
//字符串
 var str1='this is str1';print(str1);
 String str2='this is str2';print(str2);
 String str3="""//格式输出!
 this is str1
 	this is str1

 this is str1
 """;
  print("$str1 $str2");//字符串拼接
  print(str1 + str2);
  print(str1 +" "+ str2);
//数值类型int和double
//1、int   必须是整型
  int a=123;a=45; print(a);
//2、double  既可以是整型 也可是浮点型
  double b=23.5; b=24;print(b);
//3、运算符 + - * / %
  var c=a+b; print(c);
//布尔类型bool 值true/false
      var a=123;
      var b=123;
      if(a==b){print('a=b');
      }else{ print('a!=b'); }
 //List(数组/集合)
  //1、第一种定义List的方式
var l1=["张三",20,true];print(l1);print(l1.length); print(l1[0]);print(l1[1]);

  //2、第二种定义List的方式 指定类型
var l2=<String>["张三","李四"];print(l2);
var l3 = <int>[12, 30];print(l3);

  //3、第三种定义List的方式  增加数据 ,通过[]创建的集合它的容量可以变化
var l4 = [];print(l4); print(l4.length);
l4.add("张三"); l4.add("李四");l4.add(20);print(l4);print(l4.length);
var l5 = ["张三", 20, true]; l5.add("李四");l5.add("zhaosi");print(l5);

  //4、第四种定义List的方式(通过List.filled创建的集合长度是固定)
  //var l9=new List();  //在新版本的dart里面没法使用这个方法了
 var l6 = List.filled(2, ""); //创建一个固定长度的集合 print(l6);print(l6[0]);
 l6[0] = "张三"; //修改集合的内容l6[1]="李四";print(l6);
var l7=<String>["张三","李四"];print(l7.length); l7.length=0;  //可以改变的print(l7);
var l8=List<String>.filled(2, "");l8[0]="string";

Maps(字典)  
  	//第一种定义 Maps的方式
    var person={
      "name":"张三",
      "age":20,
      "work":["程序员","送外卖"]
    };
    print(person); print(person["name"]);
   //第二种定义 Maps的方式
    var p=new Map();
    p["name"]="李四";p["age"]=22;p["work"]=["程序员","送外卖"];
    print(p);print(p["age"]);

4.运算符

/*
1、Dart运算符:
    算术运算符
      +    -    *    /     ~/ (取整)     %(取余)      
    关系运算符
      ==    !=   >    <    >=    <=
    逻辑运算符
        !  &&ang   ||or
    赋值运算符
     基础赋值运算符   =   ??=  // b??=23;  表示如果b为空的话把 23赋值给b
     复合赋值运算符   +=  -=  *=   /=   %=  ~/=
    条件表达式 
        if  else   switch case 
        三目运算符
        ??运算符:
2、类型转换
    1、Number与String类型之间的转换   
    2、其他类型转换成Booleans类型
3.++  --   表示自增 自减 1
在赋值运算里面 如果++ -- 写在前面 这时候先运算 再赋值,如果++ --写在后面 先赋值后运行运算
4.循环for ,while do 
  for (int i = 1; i<=100; i++) {   
            print(i);
          }
//1、求1+2+3+4 ...+100的和
    // int i=1;
    // var sum=0;
    // while(i<=100){
    //    sum+=i;
    //    i++;
    // }
    // print(sum);

    // int i=1;
    // var sum=0;
    // do{
    //    sum+=i;
    //    i++;
    // }while(i<=100);
    // print(sum);
*/
// 算术运算符
int a=13;
int b=5;print(a+b);print(a-b);  print(a*b);print(a/b);print(a%b);print(a~/b);
var c=a*b;print('--------');print(c); 
//关系运算符
int a=5; int b=3;
print(a==b);   print(a!=b);   print(a>b);   print(a<b);   print(a>=b);   print(a<=b);  
if(a>b){print('a大于b');
}else{print('a小于b'); }
//赋值运算符
//条件表达式 
// var score = 41;
  // if (score > 90) {
  //   print('优秀');
  // } else if (score > 70) {
  //   print('良好');
  // } else if (score >= 60) {
  //   print('及格');
  // } else {
  //   print('不及格');
  // }
  // var sex = "女";
  // switch (sex) {
  //   case "男":
  //     print('性别是男');
  //     break;
  //   case "女":
  //     print('性别是女');
  //     break;
  //   default:
  //     print('传入参数错误');
  //     break;
  // }
  bool flag = false;
  String c = flag ? '我是true' : '我是false';
  print(c);
  // var a;var b= a ?? 10;print(b);   //10
  var a = 22;var b = a ?? 10; print(b);//22
//类型转换
  //1、Number与String类型之间的转换
  // Number类型转换成String类型 toString()
  // String类型转成Number类型  int.parse()

  String str='123';
  var myNum=int.parse(str);
  print(myNum is int);

  String str1='123.1';
  var myNum3=double.parse(str1);
  print(myNum3 is double);

  var myNum1=12;
  var str2=myNum1.toString();
  print(str2 is String);

  // 2、其他类型转换成Booleans类型
  // isEmpty:判断字符串是否为空

三、list,set,map,forEach

1.List

/*
List里面常用的属性和方法:
    常用属性:
        length          长度
        reversed        翻转
        isEmpty         是否为空
        isNotEmpty      是否不为空
    常用方法:  
        add         增加
        addAll      拼接数组
        indexOf     查找  传入具体值
        remove      删除  传入具体值
        removeAt    删除  传入索引值
        fillRange   修改   
        insert(index,value);            指定位置插入    
        insertAll(index,list)           指定位置插入List
        toList()    其他类型转换成List  
        join()      List转换成字符串
        split()     字符串转化成List
        forEach   
        map
        where
        any
        every
*/
void main(){
  // List myList=['香蕉','苹果','西瓜'];
  // print(myList[1]);
  // var list=new List(); 
  // list.add('111');
  // list.add('222');
  // print(list);

}

2.Set

//用它最主要的功能就是去除数组重复内容
//Set是没有顺序且不能重复的集合,所以不能通过索引去获取值

void main(){
  // var s=new Set(); s.add('香蕉');s.add('苹果');s.add('苹果');
  // print(s);   //{香蕉, 苹果}
  // print(s.toList()); 

  List myList=['香蕉','苹果','西瓜','香蕉','苹果','香蕉','苹果'];
  var s=new Set();
  s.addAll(myList);
  print(s);
  print(s.toList()); 
}

3.Map

/*
  映射(Maps)是无序的键值对:
    常用属性:
        keys            获取所有的key值
        values          获取所有的value值
        isEmpty         是否为空
        isNotEmpty      是否不为空
    常用方法:
        remove(key)     删除指定key的数据
        addAll({...})   合并映射  给映射内增加属性
        containsValue   查看映射内的值  返回true/false
        forEach   
        map
        where
        any
        every
*/
void main(){
  // Map person={
  //   "name":"张三",
  //   "age":20,
   //"sex":"男"
  // };
  // var m=new Map();
  // m["name"]="李四";
  // print(person);print(m);

//常用属性:
    // print(person.keys.toList());
    // print(person.values.toList());
    // print(person.isEmpty);
    // print(person.isNotEmpty);

//常用方法:
    // person.addAll({
    //   "work":['敲代码','送外卖'],
    //   "height":160
    // });
    // print(person);
    // person.remove("sex");
    // print(person);
    //print(person.containsValue('张三'));
}

4.特殊运算forEach map where any every

4./*
        forEach     
        map         
        where       
        any
        every
*/
void main(){
      //  List myList=['香蕉','苹果','西瓜'];
      // for(var i=0;i<myList.length;i++){
      //   print(myList[i]);
      // }
      // for(var item in myList){
      //   print(item);
      // }
      // myList.forEach((value){
      //     print("$value");
      // });

      // List myList=[1,3,4];

      // List newList=new List();

      // for(var i=0;i<myList.length;i++){

      //   newList.add(myList[i]*2);
      // }
      // print(newList);

      // List myList=[1,3,4];      
      // var newList=myList.map((value){
      //     return value*2;
      // });
      //  print(newList.toList());


      // List myList=[1,3,4,5,7,8,9];
      // var newList=myList.where((value){
      //     return value>5;
      // });
      // print(newList.toList());
      // List myList=[1,3,4,5,7,8,9];
      // var f=myList.any((value){   //只要集合里面有满足条件的就返回true
      //     return value>5;
      // });
      // print(f);
      // List myList=[1,3,4,5,7,8,9];
     // var f=myList.every((value){   //每一个都满足条件返回true  否则返回false

      //     return value>5;
      // });
      // print(f);


      // set
      // var s=new Set();
      // s.addAll([1,222,333]);
      // s.forEach((value)=>print(value));
      //map

       Map person={
          "name":"张三",
          "age":20
        };
        person.forEach((key,value){            
            print("$key---$value");
        });
}

总结

先熟悉基础。

posted @ 2023-08-10 01:17  cactus9  阅读(35)  评论(0编辑  收藏  举报