1. Dart-Syntax
Vscode, Plug-Ins installieren: Dart, Code Runner
rrree3 .Dart-Variablen
Dart ist eine leistungsstarke Skriptsprache, die keine Typen vordefinieren muss und automatisch Typen ableitet
In Dart definierte Variablen können über das Schlüsselwort var
Typprüfung existiert in Dart, wie zum Beispiel:main(){ print('你好,dart'); } // 表示main方法没有返回值 void main(){ print('你好,dart'); }
var str = 'this is var'; String str = 'this is string'; int str = 123;
const NUM = 123; final Time = new DateTime.now();
如: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 flag = true;
// 第一种定义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<String>(); list.add('王清');
// 第一种定义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
int num = 12; print(num.toString());
String str = '123'; print(int.parse(str)); print(double.parse(str));
①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
Set set1 = [1,2,3].toSet(); Set set2 = [2,3,4].toSet(); print(set1.union(set2).toList()); // [1,2,3,4]
Set set1 = [1,2,100,200,300,3].toSet(); var list = set1.firstWhere((value){ return value > 100; }); print(list); // 200
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}
Set set1 = [1,2,100,200,300,3].toSet(); set1.retainAll([1,2]); print(set1); // {1,2}
Set set1 = [1,2,100,200,300,3].toSet(); set1.removeAll([1,2]); print(set1); // {100,200,300,3}
"love":["game","coding"],
Schlüssel(Schlüssel): Ob Für diesen Schlüssel gibt es ein Schlüssel-Wert-Paar
Zum Beispiel: m.containsKey("name")
10, wobei alle alle (gemeinsam mit List, Set, Map) sind.
Allgemeine Schleife:
List list = [100,200,300,400];
for(var i in list){
print(i); // 100 200 300 400
}
forEach-Schleife :
List list = [100,200,300,400];
list.forEach((value) => print( value));
list.forEach((value){
}); 00];
var newList = list.map((value){
Rückgabewert * 2;
});
print(newList.toList()); // [200,400,600,800]
where loop:
List list = [100,200,300,400];
var newList = list.where((value){
return value > 200;
});
print(newList.toList()); // [300,400]
beliebige Schleife:
Bedeutung: Bestimmen Sie, ob Elemente vorhanden sind, die die Bedingungen erfüllen. Wenn vorhanden, kehren Sie zurück true
List list = [100,200,300,400];
var flag = list.any((value){
return value > 200;
} );
print(flag);
jede Schleife:
Bedeutung: Bestimmen Sie, ob alle Elemente die Bedingungen erfüllen. Wenn alle Elemente übereinstimmen, wird true zurückgegeben 🎜>
}); print(flag); // true11. Funktionen, Parameter, Abschlüsse usw. 1) Grundlegendes FunktionsformatGeben Sie den Typmethodennamen zurück (Parameter 1, Parameter 2 ...) {
Methodenkörper
Rückgabewert zurückgeben
}
① Definieren Sie die Parametertyp als int. Wenn es sich um andere Typen handelt, wird ein Fehler gemeldet.
var n = getNum(60);
print(n)
Return '$ Name $ Age $ Sex'; .
Print (Printuserinfo ('Wang Qing', 20));
③ Standardparameter
String Printuserinfo (String name, [int Age = 10]) {
;
⑥Pfeilfunktion: Beachten Sie, dass Pfeilfunktionen keine mehrzeiligen Anweisungen unterstützen
list.forEach((value)=>print(value));
Kleine Kenntnisse Punkte:Ist es ein Wert oder eine wunderbare Zahl?
){
print( str);
('IIFE'); wird die globalen
Eigenschaften lokaler Variablen verschmutzen: nicht ansässig Der Speicher wird durch den Garbage-Collection-Mechanismus recycelt und verschmutzt nicht die globalen
Möchten Sie die Funktion erreichen, dass sie im Speicher resident ist, werden die globalen
Klassenobjekte
Alles in Dart ist ein Objekt und alle Objekte erben von der Object-Klasse. Dart ist eine objektorientierte Sprache, die Klassen und Einzelvererbung verwendet. Alle Objekte sind Instanzen von Klassen und alle Klassen sind Unterklassen of Object wie zum Beispiel: class Person{ String name; int age; // KonstruktorPerson(String name,int age){ this.name = name; This.age =.
this.name = name;
this.age = age;
}
// Konstruktor Es kann wie folgt abgekürzt werden
Person (this.name,this.age);
void getInfo(){
print("${this.name}---${this. age}");
Person p2 = new Person.now('Wang Sicong', 30);
p2.getInfo(); Klasse
2. Referenz
import 'Person.dart';
void main(){
Person p = new Person.now(' Wang Qing', 23); Es gibt keine Zugriffsmodifikatoren wie privat, öffentlich und geschützt
Aber wir können _ verwenden, um eine Eigenschaft oder Methode als privat zu definieren
Private Eigenschaften oder Methoden können nicht direkt instanziiert und aufgerufen werden, sondern nur intern. Neue zu verwendende Methoden oder Attribute
Die Funktion kann wie folgt abgekürzt werden: Person(this._name,this .age); // Benanntes Konstruktoralter) {this.age = Age;
}
void Getinfo () {
Printttt ("${this._name}---${this.age}"); In Dateien extrahiert 1) Getter- und Setter-Modifikatoren in der Klasse: class Rect{ num height; num width; Rect(this.height, this.width); set areaWidth(value){ this.height = value; }
<. return this.height this.void main>
Rect r = new Rect(10, 10);
// Rufen Sie die Get-Modified-Methode auf, indem Sie auf Eigenschaften zugreifen
print(r.area);
// Aufrufsatz, um dem Attribut einen Wert zuzuweisen, indem ein Wert zugewiesen wird
r.areaWidth = 20;
print(r.area); 2) In Dart, Instanzvariablen
können initialisiert werden, bevor der Konstruktorkörper ausgeführt wird. Klasse Rect{
num height;
num width;
Rect() :height= 10,width=10{
🎜>
Rect r = new Rect(); print(r.area); } 3) Statische Mitglieder ① Verwenden Sie das Schlüsselwort static, um Variablen und Funktionen auf Klassenebene zu implementieren ② Statische Methoden können nicht auf nicht statische Mitglieder zugreifen, und nicht statische Methoden können auf statische Mitglieder zugreifen Klasse Person{void main(){ Person.show(); } 4) Objektoperatoren in Dart: ? Bedingungsoperatorals Typkonvertierung Person(this.name,this.age}'); );. 🎜>
Unabhängig davon, ob p leer ist, wird die Methode oder das Attribut nicht ausgeführt, wenn es leer ist 🎜> p?.show();
Ob das Objekt eine Instanziierung der Klasse ist
if (p is Person) {
🎜> var p1;
p1 =''; p1 als Person).show();
>
..show(); ②子Die Klasse erbt die sichtbaren Attribute und Methoden in der übergeordneten Klasse, erbt jedoch nicht den Konstruktor③ Die Unterklasse kann die Getter- und Setter-Methoden der übergeordneten Klasse überschreiben Zum Beispiel: Klasse Person { Person(this.name,this. Alter ) ; Person.other(this.name,this.age); } Klasse Web erweitert String-Sex; Alter){ this.sex = sex; 🎜 > void run(){
die Methode der übergeordneten Klasse bis super in der Unterklasse
print( 'printInfo of subclass'); Web('Zhang San', 12 ,'Male'); 🎜 >
Abstrakte Klassen in Dart: Abstrakte Klassen werden hauptsächlich zum Definieren von Standards verwendet oder abstrakte Klassenschnittstellen implementieren ①Abstrakte Klassen werden über das Schlüsselwort abstract definiert ② Die abstrakte Methode in Dart kann nicht von Abstract deklariert werden. Wenn eine abstrakte Klasse als Schnittstellenimplementierung verwendet wird, muss sie alle in der abstrakten Klasse definierten Methoden und Attribute implementieren ⑤ Abstrakte Klassen können nicht instanziiert werden, nur Unterklassen, die sie erben, können erweitert und implementiert. Unterschied: ① Wenn Sie die Methoden in der abstrakten Klasse wiederverwenden und verwenden möchten abstrakte Methoden, um das Zeichnen der Selbstklasse einzuschränken, können wir Extends verwenden, um die abstrakte Klasse zu erben ② Wenn Sie die abstrakte Klasse nur als behandeln. Für Standardzwecke verwenden wir Implementierungen, um die abstrakte Klassevoid drink(){
Hund verlängert Tier{
@Ooverride
void Eat () {
Print ('Der Welpe ist void drink(){
void run(){
print(' Let's run~'); ;
d.drink ();
// a.run(); Fehler
}
} Abstrakte Schnittstelle:
abstrakte Klasse DB{
String-URL; 🎜> }
MySQL implementiert DB{
@override
String URL;
🎜> 🎜> PrintA();
Geräte der Klasse C A, B{
@override
@override
printB() {
Funktion ähnlich der Mehrfachvererbung;
Bedingungen für die Verwendung von Mixins:
① Klassen als Mixins können nur von Object erben und nicht von anderen Klassen erben
② Klassen als Mixins können keine Konstruktoren haben
③Eine Klasse kann mehrere Mixins-Klassen mixen
④Mixins sind weder Vererbung noch Schnittstellen, sondern eine brandneue Funktion
Wie zum Beispiel:
Klasse A{
void. printA(){
Klasse B{
Void printb () {
Print ('B');
}
}
Klasse C Erweitert ein 🎜 > }class D with A,B{ } void main(){ >
c.printa (
c.printb ();
d = new d ();
d.printB(); Generics
Verständnis: Generics lösen die Wiederverwendbarkeit von Klassen, Schnittstellen und Methoden und unterstützen unspezifische Datentypen (Typprüfung)
① Generische Methoden
T getData
print(getData< ;int>(21));
} }
②Generic class
class MyArray
List list = new List
void add(T value){
this.list.add(value);
}
}
void main(){
MyArray myArray = new MyArray
myArray.add('wq');
}
③泛型接口
abstract class Cache
getByKey(String key);
void setBykey( String-Schlüssel,T-Wert);
}
class FileCache
@override
getByKey(String key) {
return null;
}
@override
void setBykey(String key, T value) {
print('$key --- $value');
}
}
void main(){
FileCache fc = new FileCache
fc.setBykey('wq', '我是文件缓存');
}
15.dart 中 的 库
① 我们 自 定义 的 库
import 'lib/xxx.dart';
②系统内置库
import 'dart:io';
import 'dart:convert';
void main() async{
var result = waiting getDataFromZhihuAPI();
print(result);
}
//api接口: http://news-at.zhihu.com/api/ 3/stories/latest
getDataFromZhihuAPI() async{
//1、创建HttpClient对象
var httpClient = new HttpClient();
//2、创建Uri对象
var uri = new Uri.http('news-at.zhihu.com','/api/3/stories/latest');
//3、发起请求,等待请求
var request = waiting httpClient.getUrl(uri);
//4、关闭请求,等待响应
var Response =await request.close();
//5、解码响应的内容
return waiting Response.transform(utf8.decoder).join();
}
③Pub管理系统中的库
第一步:从下面网址找到要的库
https://pub.dev/packages
https://pub.flutter-io.cn/packages
https://pub.dartlang.org/flutter/
第二步: 创建一个pubspec. yaml文件,内容如下:
Name: xxx
Beschreibung: Ein neues Flattermodulprojekt.
Abhängigkeiten:
http: ^0.12.1
:http/http.dart' als http;import 'dart:convert' als konvertieren; void getData() async { var url = 'http://www.phonegap100.com/appapi.php?a= getPortalList&catid=20&page=1'; var Response = waiting http.get(url); if (response.statusCode == 200) {
🎜> }
①Partial import
Import 'lib/mymath.dart' show getName; // Nur die getname-Methode einführenImport 'lib/mymath.dart' hide getname; // Nur getName-Methode ausblenden
. import 'XXX .dart' verzögert als }
Das obige ist der detaillierte Inhalt vonZusammenfassung der Dart-Grundwissenspunkte. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!