前言
当今的软件开发领域,Dart语言因其简洁的语法和强大的功能而备受关注。本文将为读者详细介绍Dart语言的下载和基本使用方法,特别是在Windows系统及VSCode中的安装步骤。我们将展示如何顺利运行Dart代码,为新手开发者打下坚实的基础。
dart的下载
进入下载
在vscode 里面下载dart
下载run code 可编译
右击运行
第一个dart
main() { print('Hello World'); }
基础函数
main() { //表示如果b为空,就把20赋给b 否则不 int b = 10; b ??= 20; print(b); } int b ?? =20
构造函数
class Person { String name; num age; Person(this.name, this.age); void printInfo() { print("${this.name}----${this.age}"); } } class Web extends Person { Web(String name, num age) : super(name, age) {} } main() { Web w = new Web("youren ", 10); print(w.name); w.printInfo(); }
泛型
T getData<T>(T value) { return value; } void main() { print(getData("hello")); print(getData(123)); print(getData<String>("world")); }
filled
// void main() { // List list = List.filled(2, ""); // list[0] = "youren"; // list[0] = "youre2"; // print(list); // } void main() { // filled 固定长度的 集合 List list = new List<String>.filled(2, ""); list[0] = "youren"; list[0] = "youre2"; print(list); }
自定义一个存数组的方法
class MyList<T> { List list = <T>[]; void add(T value) { this.list.add(value); } List getList() { return list; } } void main() { MyList l1 = new MyList(); l1.add(1); l1.add("youren"); l1.add(true); print(l1.getList()); }
库的使用
引入库
先创建一个lib文件夹
创建一个calculator.dart
library clacultor_lib; import 'dart:math'; int random(int no) { return new Random().nextInt(no); }
import 'lib/calculator.dart'; void main() { var r = random(10); print(r); } import 'clacultor_lib.dart'; // 引入库 void main() { int r = clacultor_lib.random(10); // 使用库中的函数 print(r); // 输出生成的随机数 }
第三方库
dart 的软件包管理 是 pub
pubspec 是一个名为 pubspec.yaml
的文件,文件位于应用的根路径。最简单的 pubspec 只需要列出包名:
pubspec.yaml
name: Dart_name version: 0.0.1 description: this is my first dart environment: sdk: ^2.12.0 dependencies: http: ^0.13.5 maths: ^0.0.2
使用
import 'dart:convert' as convert; import 'package:http/http.dart' as http; void main(List<String> arguments) async { // This example uses the Google Books API to search for books about http. // https://developers.google.com/books/docs/overview var url = Uri.https('www.googleapis.com', '/books/v1/volumes', {'q': '{http}'}); // Await the http get response, then decode the json-formatted response. var response = await http.get(url); if (response.statusCode == 200) { var jsonResponse = convert.jsonDecode(response.body) as Map<String, dynamic>; var itemCount = jsonResponse['totalItems']; print('Number of books about http: $itemCount.'); } else { print('Request failed with status: ${response.statusCode}.'); } }
闭包
这是一个闭包函数,它创建了一个叫做add
的变量,并将一个匿名函数(闭包)赋值给它。在闭包函数中,定义了一个局部变量counter
,并返回一个匿名函数。这个匿名函数也是一个闭包,并且在闭包中可以访问counter
变量。每次调用add
时,它将返回一个新的闭包函数,该闭包函数将counter
变量的值加上1,然后返回这个新的值。
这种闭包的应用场景是使得counter
变量保持不丢失,且可以循环调用,每次调用都会自增。可以用来实现计数器等功能。例如,下列代码可以输出1到3:
// 定义一个 add函数 接受返回值 var add = () { // 外部函数的作用域 var counter = 0; return () { // 返回值 return counter += 1; }; }(); main() { print(add()); print(add()); print(add()); } 调用一次加一次
运算符
main() { print(5 / 2); // 除数 都 保存 print(5 ~/ 2); // 结果 为 整数部分 print(5 % 2); // 结果 为 余数部分 }
调用 的 时候用
class Student{ void method1(){ print("method1"); } void method2(){ print("method2"); } } void main(){ new Student()..method1()..method2(); }
用两次
新特性
! 和 ?
void main(List<String> args) { // 如果想 给一个变量值 赋 null // 空安全 类型前面加? String? name = null; // ! 表示当前变量不为null, 需要保证不为null, 否则会抛出异常 // 非空断言 print("the name :${name!.length}"); }
late
先定义一个 变量,之后再赋值
一个属性,来源于服务器, 无法给此属性 初始化,就使用late
late String name; void main(List<String> args) { name = "yoruen"; print(name); }
@require 必填参数
late String name; void main(List<String> args) { /// name 一定要有, to 可有可无 sendMsg(name: "youren"); } void sendMsg({required String name, String? to}) { print("name: $name,to "); }
添加依赖
注意冒号后面有一个空格
dependencies: flutter: sdk: flutter cupertino_icons: ^1.0.2 shake_animation_widget: ^1.0.0