首頁 > web前端 > js教程 > 主體

Dart基礎知識點總結

王清
發布: 2020-05-04 13:48:23
原創
53 人瀏覽過

一、dart語法

1.開發工具

    Vscode,安裝外掛程式:dart、Code Runner

2.入口方法

main(){
  print('你好,dart');
}
// 表示main方法没有返回值
void main(){
  print('你好,dart');
}
登入後複製

3 .Dart變數

    dart是一個強大的腳本類別語言,可以不預先定義類型,自動會類型推斷

    dart中定義變數可以透過var關鍵字來宣告變數

    dart中存在型別校驗

##    如:

var str = 'this is var';
String str = 'this is string';
int str = 123;
登入後複製

4.Dart變數

    final const 都可定義常數

#    final可以開始不賦值,只能賦值一次;而final不僅有const的編譯時常數的特性,最重要的是它是運行時常數,並且final是惰性初始化,即在運行時第一次使用前才初始化

    如:    

const NUM = 123;
final Time = new DateTime.now();
登入後複製

5.Dart資料型別

    Numbers(數值):int double

    Strings(字串):String#o##
如:var str = 'this is a string';
   String str = 'this is a string';
   // 定义多行字符串
   String str = '''
     my name is wq;
     my age is 23;
   ''';
   // 字符串拼接
   String name = 'wq';
   int age = 23;
   String myInfo = '我的名字叫$name,我今年$age岁';
   // 注意:如果使用+实现字符串拼接,那么必须要是同类型的数据
   String firstName = '王';
   String lastName = '清';
   String myInfo = lastName + ':' + firstName;
登入後複製

布林):bool

  bool flag = true;
登入後複製

    List(列表):就是js中的陣列

// 第一种定义List的方式
  var list1 = [1,2,3];
  print(list1.length);
// 第二种定义List的方式
  var list = new List();
  list.add(1);
  list.add(2);
// 定义List指定元素类型
    var list = new List();
   list.add('王清');
登入後複製

    Maps(字典):Map是一個鍵值對相關的物件

// 第一种定义Map
  var person = {
    "name": "王清",
    "age": 23
  };
  print(person['name']);
// 第二种定义Map
  var p = new Map();
  p['name'] = '王清';
  print(p);
 问:如何判断类型?(关键字 is)
    var str = '123';
    if (str is String) {
       print('字符串类型');
    } else if (str is int) {
       print('数值类型');
    }
   注意:
    取整运算符 
      如:print(12~/5); // 2
    为空赋值  
      如:int b; b??=23; print(b);  // 23
      解释:如果b为空的话就赋值23
      int a;  int b = a??10;  print(b); // 10
登入後複製

6 .型別轉換

    1) Number與String型別之間的轉換

        ①Number轉換為String型toString()

int num = 12;
print(num.toString());
登入後複製

     

    2) 其他型別轉換為Booleans型別

String str = '123';
print(int.parse(str));
print(double.parse(str));
登入後複製

7.List

    常用屬性:

        length:長度

o##  #        length:長度

 ## #    # reverse

#            var list = [1,2,3];

            print(list.reversed.toList());# ##o努:是否不為空白

    常用的方法:

        add():增加元素,只能增加一個元素

        addAll():接合表拼接1,2,3])

        indexOf():找出數據,找出回傳元素下標,查找不到回傳-1

        remove():移除指定元素

        removeAt():刪除指定索引值的元素

        fillRange():修改指定區間元素為新的元素list.fillRange(2, 4, 1); // 修改下標2~33間的元素為1

        insert(index,value):在指定下標處插入元素

        insertAll(index,list):在指定下標記處插入清單  list.insertAll(2 , [100,1]);

        toList():其他型別轉換為清單

        join():List轉換成字串  String strList =  list.join('-');

        split():字串轉換成List

#8.Set

    Set是無序且不能重複的集合,所以不能透過下標去取得資料;它最主要的功能是清單去重

    常用屬性:

        isEmpty:是否為空

##        isNotEmpty:是否為空

##    c一個元素

        last:返回最後一個元素

#        length:長度

    常用方法:

   addAll:新增為 Set addAll:新增為Set

T ##        contains:查詢是否包含單一元素set.contains(1)

        containsAll:查詢是否包含多個元素set.containsAll([1,2])

 #       返回兩個: set不同的元素set1.difference(set2).toList()

        intersection:傳回兩個元素相同的元素

        union:所有包含兩個set的元素

①isEmpty:判断当前字符串是否为空
   String str = '';
    print(str.isEmpty);
②未赋值 var myNum; print(myNum == null); // true
③为0 var myNum=0; print(myNum ==0);  // true
④为NaN var myNum = 0/0; print(myNum.isNaN); // true
登入後複製
#        clear:清除

        firstWhere: 按條件正向查詢第一個符合條件的值

Set set1 = [1,2,3].toSet();
Set set2 = [2,3,4].toSet();
print(set1.union(set2).toList()); // [1,2,3,4]
登入後複製

        lastWhere:以條件化查詢第一個符合條件的值##1reee #        removeWhere:刪除符合條件的元素

Set set1 = [1,2,100,200,300,3].toSet();
var list = set1.firstWhere((value){
     return value > 100;
});
print(list); // 200
登入後複製

        retainWhere:保留符合條件的

Set set1 = [1,2,100,200,300,3].toSet();
var list = set1.firstWhere((value){
   return value > 100;
});
print(list); // 300
登入後複製

       #

Set set1 = [1,2,100,200,300,3].toSet();
set1.removeWhere((value){
   return value > 100;
});
print(set1);  // {1, 2, 100, 3}
登入後複製

    去重:

Set set1 = [1,2,100,200,300,3].toSet();
set1.retainWhere((value){
   return value > 100;
});
print(set1);  // {200,300}
登入後複製
9. Map(映射)是無序的鍵值對

    常用屬性:

        keys:取得所有的key值

        values:取得所有的value值

        isEmpty:是否使用空白

        isNotEmpty:是否不為

#        addAll():新增多個鍵值對

            如:

                Map m = {

                "age": 23

                };

                m.addAll({

                    "love":[ "外賣員"]

                });

#            });

#            });

#        remove(key):以key值移除鍵的鍵值對

     :Map中是否存在該value的鍵值對

            如: m.containsValue(23);

##        containsKey(key):是否存在該#key

,##key

#            如: m.containsKey("name")

10. forEach map where any every(List、Set、Map通用)

   [100,200,300,400];

        for(var i in list){

            print(i); // 100 200 300 400

        }

    forEach循環:

        List list = [100,200,300,400];

        list.forEach((value) => print(value))));

c ach((value) =>id;

            print(value);  // 100 200 300 400

##        } 

#  List map循環:##20,0 ;

        var newList = list.map((value){

            return value * 2;

     工作 } // [200,400,600,800]

    where循環:

        List list = [100,200,300,400] return value > 200;

        });

        print(newList.toList()); // [300,400]

   意義:判斷是否有符合條件的元素,若有回傳true

        List list = [100,200,300,400];

        var flag = list.any(((value) return value > 200;

        });

        print(flag);

##    every循環:

##   若所有元素符合則回傳true

        List list = [100,200,300,400];

        var flag = list.every((value){# 

o# ;

##        });

        print(flag); // true

11.函數、參數、閉包等

    1) 功能基本格式

        傳回型別方法名稱(參數1,參數2...){

            方法體

       ①定義參數型別為int,若為其他型別錯誤 

            int getNum(int n){

                 var n = getNum(60);

            print(n); // 60

       ② 選用參數

    String1   ② print 

                if (age != null && sex != null) {

           se {

# return '$name';

                }

###            }###

            print(printUserInfo('王清除', 20));

        ③預設參數

          ③預設參數

 #                if (age != null) {

                return '$name $age'          return '$name';

}

            }

            print(printUserInfo('王清除'));

  User ex, int age=10}){

                if (age != null) {

           se {

                return '$name';

                }

    : '男',age: 20));

        ⑤匿名方法

            Function fn = (){

           #  return '# 我是一個函數函數# #            print (fn());

        ⑥箭頭函數:注意箭頭函數不支援多行語句

            list.forEach((value)=>print(value));

##        小知識點:

            判斷一個數值為偶數還是奇數?

                isEven 是否為偶數

                isOdd 是否為奇數

 ((String str){

                print( str);

            })('IIFE');

            

   變數會污染全域

          局部變數特性:不常駐記憶體會被垃圾回收機制回收、不會污染全域

          想要實現功能:常駐內存,且不污染全域

12.類別物件

    Dart所有的東西都是對象,所有的物件都繼承自Object類別;

    Dart是一門使用類別和單一繼承的物件導向語言,所有的對像都是類的實例,並且所有的類都是Object的子類

    如:

        class Person{

            String name;

            int age;

            // 建構子

            

##                this.age = age;

            }

#            // 命名建構子:命名建構子可以寫多個,但是建構子只能有一個1# int age){

                this.name = name;

                   // 建構子可以簡單寫成以下方式

            Person(this.name,this.age);

            void getInfo(){

##   == age}");

            }

        }

        v.

            p.getInfo();

            Person p2 = new Person.now('王思聰』, 30);

            p2.getInfo();

        p2.getInfo();

        }

    問:如何抽離類別在另一個檔案中呼叫## 的類別

        2.引用

            import 'Person.dart';

       Person.now('王清',23);

                p.getInfo();

            }

#  相同物件屬性:## 物件屬性:## 物件沒有private、public、protected這些存取修飾符

##        但是我們可以使用_定義一個屬性或方法為私有

        私有屬性或方法無法被實例化直接調用,只能透過內部化新方法或屬性去使用

        如:

            class Person{

         

                // 建構函數可以簡單寫成以下方式

                Person(this._name,this.age);

              Person.now(String name,int age) {

                    this._name = name;

                 #  .age = #  .age = # #                void getInfo(){

                    print ("${this._name}---${this.age}");

                }

            }

##    必須抽離成檔案

    1)類別中的getter和setter修飾符:

        class Rect{

            num height

#            num height

# ##  

#            Rect(this.height,this.width);

            set areaWidth(value){#o

.he     #           }

            get area{

                return this.height * this.width;

#     void main(){

            Rect r = new Rect(10, 10);

            // 透過存取屬性的方式來呼叫get修飾後的方法# // 以賦值的方式來呼叫set給屬性賦值

            r.areaWidth = 20;

            print(r.area);#            print(r.area);# 

#> 2) Dart中可以在構造函數體運行之前初始化實例變量

        class Rect{

            num height;

            num width;

            Rect() :height=10,width=10{

##            }

            get area{

##         }

        }

##        void main(){

            Rect r = new Rect(){

            Rect r = 新中# 

    3)靜態成員

        ①使用static關鍵字來實現類別層級的變數與函數

##        ②靜態方法無法存取非靜態成員,且非靜態方法可存取靜態成員

            class Person{

          class     static String name = '國王清除';

                static void show(){

                    print       }

            void main(){

                Person.show();

            }

    4)Dart 

##        is 類型判斷

        .. 級聯作業

       

          

## num age;

                Person(this.name,this.age);

             this.name}--${ this.age}');

                }

            }

    p;

                // 判斷p是否為空,若為空就不要執行方法或屬性

                p?.show();

             print(p?.name) 問題(p#.物件是否為類別的實例化

                if (p is Person) {

              }

var p1;

                p1 ='';

                p1 = new Person('清除), 20);# 問題# 

(p1 as Person).show();

                // 級聯作業

             25

                    ..show();

            }

    5)繼承

   ②子類別會繼承父類別裡面可見的屬性和方法,但是不會繼承建構子

        ③子類別能複寫父類別的方法getter和setter

#        如:

class Person {

                String name;

                num age;##String ##               Person(this.name,this.age) ;

                Person.other(this.name,this.age);

                .name}--${ this.age}');

                }

                work(){ 

                 }

            }

            class Web extends Person{

       name,num age,String sex):super(name,age){

                    this.sex = sex;

           與 ) ,age);

                void run(){

                    print('跑步');

                }##,#of #             // 子類別中透過super呼叫父類別的方法

                    super.work();

                    this.height);

                }

#                // 覆寫父類別中的方法

                @override  // 可以寫上也可以不寫,並建議寫上#1(m#)>                    print( '子類別的printInfo');

                }

            }

main  w = new Web('張三', 12,'男');

                w.printInfo();

                w.work();# 

# #.

#        Dart中抽像類:Dart抽像類主要用於定義標準,子類可以繼承抽像類,也可以實現抽像類接口

            ①抽像類通過abstract關鍵字定義

            ②Dart中的抽象方法不能用abstract聲明,Dart中沒有方法體的方法我們成為抽象方法

             抽象類別當作介面實現的話語必須實現抽象類別裡面定義所有的方法和屬性

            ⑤抽象類別不能被實例化,只有繼承它的子類別可以

        extends和implements區別:

            ①如果要重複使用抽象類別裡面的方法,並且要用抽象方法約束自類別的畫我們就用extends繼承抽象類別

        抽象類別標準的話我們就用implements實現抽象類別

        抽象類別:

            abstract class Animal{

##           void drink(){

                    print(' 我想要喝水');

            

#                class Dog extends Animal{

                @override

#                void eat(){

             }

                @override

                void drink(){

                    print(' 狗想要喝          void run(){

                    print('跑吧~');

                }

            }

   new Dog();

                d.drink();

                // 使用Animal ## // a.run();  錯誤

            }

        抽象介面:

            abstract class DB{

                String URL;

     remove();

            }

            class MySQL implements DB{

                @override

                中使用        add() {

                    return null;

                }

                @override

       #       return null;

                }

            }

            void main(){

            }

##     

  實作多重介面        printA();

            }

            abstract class B{

        #         class C implements A,B{

@override

                printA() {

                             @override

                printB() {

#                    return null;

                }

##  # 繼承的功能;

    mixins使用條件:

        ①作為mixins的類別只能繼承自Object,不能繼承其他類別

        ②作為mixins的類別不能有建構子

③一個類別可以mixins多個mixins類別

        ④mixins絕不是繼承,也不是接口,而是一種全新的特性

    如:

      #  class A{{

#            void printA(){

                print('A');

#   class B{

            void printB(){

                print('B');

   class C extends A 與 B{

#        }

        class D with A,B{

        }

        void main(){#c##){p.

#            c.printA();

            c.printB();

            D);

    ”

#            d.printB();

        }

    注意:無論是extends還是with,如果存在同樣的方法,誰在後面就調用誰的

14.泛型

    理解:泛型是解決類別、介面、方法的複用性以及對不特定資料型別的支援(型別校驗)

    ①泛型方法

        T getData(T value){

            return value;

       print(getData< ;int>(21));

        }

    ②泛型類別

        class MyArray{

o>{

#112

            List list = new List();

            void add(T value){##       }

        }

        void main(){

            MyArray myArray = new MyArray();

              myArray.add('wq');

        }

    ③泛型介面

        抽象類別Cache{

      1 ) ykey(字串鍵,T 值);

        }

#        class FileCache; extends Cache{

            @override

            getByKey(String key) {##卷    }

            @override

            void setBykey(String key, T value) {

                print('$key --- $value');## c   }

        void main(){

##            FileCache fc = new FileCache();

 

##        }

15.Dart中的函式庫

    ①我們自訂的函式庫

        import 'lib/XXX.dart';

        import 'lib/XXX.dart';

#       

    ②系統內建函式庫

        import 'dart:io';

        import 'dart:convert';

 result = wait getDataFromZhihuAPI();

            print(result);

        }

## 3/stories/latest

        getDataFromZhihuAPI() async{

            //1、建立HttpClient 

#,   

            //2、建立Uri.http('news-at.zhihu.com','/api/3/stories/latest');

##            //3、啟動請求,等待請求

            var request = wait httpClient.getUrl(uri);# 

   ##            var response = wait request.close();

            //5、解碼回應的內容物

##  ampp     //5、解碼反應

        }

##    ③Pub 管理系統中的函式庫

        第一步:從網址找到使用的資料庫

## 

#            https://pub.flutter-io.cn/packages

            https://pub.dartlang.org/flutter/

#aspec 創造   https://pub.dartlang.org/flutter/

#yaspec 創建  文件,內容如下:

            name: xxx

            說明:一個新的flutter 模組專案。    http: ^0.12.1

       第四步:在檔案所在目錄執行pub get

        第五步:寫入程式碼

            import 'package:##           

#            import 'dart:convert' as conversion;

            void getData() 為 1 .php?a = getPortalList&catid=20&page=1';

                var response = wait http.get(url);

         

                    print(convert.jsonDecode(response.body));

            '請求失敗');

                }

#            }

#            void main(){

             小知識重點:  

            ①部分導入

                import 'lib/myMath.dart' show getName; // 只引入getName方法

            getNames 名詞

  錯誤方法     錯誤#            ②延時加載(deferred as)

                也成為懶加載,可在需要的時候進行加載,減少App的啟動時間#.                import 'XXX .dart' deferred as XXX;

                    getData() async {

##        XXX                }

以上是Dart基礎知識點總結的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
1
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!