flutter:dart的学习

简介: 本文介绍了Dart语言的下载方法及基本使用,包括在Windows系统上和VSCode中的安装步骤,并展示了如何运行Dart代码。此外,还详细说明了Dart的基础语法、构造函数、泛型以及库的使用方法。文中通过示例代码解释了闭包、运算符等概念,并介绍了Dart的新特性如非空断言操作符和延迟初始化变量。最后,提供了添加第三方库依赖的方法。

前言

当今的软件开发领域,Dart语言因其简洁的语法和强大的功能而备受关注。本文将为读者详细介绍Dart语言的下载和基本使用方法,特别是在Windows系统及VSCode中的安装步骤。我们将展示如何顺利运行Dart代码,为新手开发者打下坚实的基础。

dart的下载

Dart-Windows下载

进入下载

在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
相关文章
|
7天前
|
设计模式 移动开发 开发框架
如何学习 Flutter 框架?
学习 Flutter 需要耐心和持续的努力,通过系统的学习、实践、交流和不断跟进最新技术,你将逐渐掌握 Flutter 框架,并能够开发出高质量的移动应用。
|
2月前
|
Dart
如何在 Flutter 项目中使用 Dart 语言?
如何在 Flutter 项目中使用 Dart 语言?
127 58
|
22天前
|
Dart
flutter dart mixin 姿势
flutter dart mixin 姿势
|
20天前
|
存储 缓存 JavaScript
Flutter 学习之封装 WebView
【10月更文挑战第24天】通过以上的探讨,我们可以看出,在 Flutter 中封装 WebView 是非常有必要的,它可以提高代码的复用性、增强可维护性、提供统一接口。在实际应用中,我们需要根据具体的需求和场景,选择合适的封装方法和技术,以实现更好的效果。
|
3月前
|
Dart 前端开发 JavaScript
Flutter&Dart-异步编程Future、Stream极速入门
Flutter&Dart-异步编程Future、Stream极速入门
78 4
Flutter&Dart-异步编程Future、Stream极速入门
|
3月前
|
Dart JavaScript 前端开发
Dart或Flutter中解决异常-type ‘int‘ is not a subtype of type ‘double‘
Dart或Flutter中解决异常-type ‘int‘ is not a subtype of type ‘double‘
135 4
|
3月前
|
Dart
Flutter笔记:手动配置VSCode中Dart代码自动格式化
Flutter笔记:手动配置VSCode中Dart代码自动格式化
464 5
|
4月前
|
JSON Dart 安全
Flutter Dart Macro 宏简化 JSON 序列化
今天我们将会体验 dart 语言新特性 macro 宏,来实现对 json 的序列化,用到的包是官方实验室写的 json 包。 本文将会一步步的带你实现这个功能,那我们开始吧。
Flutter Dart Macro 宏简化 JSON 序列化
|
3月前
|
Dart 开发工具 Android开发
Android Studio导入Flutter项目提示Dart SDK is not configured
Android Studio导入Flutter项目提示Dart SDK is not configured
304 4
|
3月前
|
Dart 安全 API
Android跨平台开发之Dart 3.5 与 Flutter 3.24:革新跨平台应用开发
【Dart 3.5 与 Flutter 3.24:革新跨平台应用开发】首发于公众号“AntDream”。本文深度解析 Dart 3.5 和 Flutter 3.24 的新特性,包括空安全强化、Web 与原生互操作性增强及 Flutter GPU API 等,展示了如何提升代码质量和用户体验。
63 1