Flutter 三: Dart

1 数据类型

  • 数字(number) int double

    • 字符串转换成 num int.parse(“1”) double.parse(“1”);
    • double 四舍五入保留两位小数 toStringAsFixed(2) 返回值为string
    • double 直接舍弃小数点后几位的数据 可使用字符串截取的方式
  • 字符串(string)

    • 单引号 双引号 三引号
    • 三引号 可以输出文本格式 比如换行
  • 布尔值(boolean)

  • 列表(list)

    • 一旦定义了 内容的类型 就不可变
    • list内容是常量 添加const
      在这里插入图片描述
  • 集合(set)

在这里插入图片描述

  • 映射(map)
  • 符文(rune)
  • 符号(Symbol)
- 数字(number)  int double
	-  字符串转换成 num   int.parse("1") double.parse("1");
	-  double 四舍五入保留两位小数 toStringAsFixed(2) 返回值为string
	-  double 直接舍弃小数点后几位的数据  可使用字符串截取的方式
//字符串转换成 num  
  var a = int.parse("1");
  var b = double.parse("1");
  print(a);
  print(b);
//结果
//1
//1.0

- 字符串(string)
	- 单引号 双引号   三引号
	- 三引号 可以输出文本格式 比如换行 
var a = "aaa"
      "bbb";
  print(a);
  a = 'aaa'
      'bbb';
  print(a);
  a = '''aaa 
  bbb''';
  print(a);  
结果
aaabbb
aaabbb
aaa 
  bbb


- 列表(list)
   - 一旦定义了 内容的类型 就不可变
   -  - list内容是常量  添加const
void main(){
 var list = [1,2,3];
 // list = ["1","2","3"]; // Error: A value of type 'String' can't be assigned to a variable of type 'int'.

  var cars = [ Car("TSLT"),Car("XRB")];
  print(cars);
  print(cars[0].name);
  print(cars[0].drive());

var names = const ["TSLT","XRBS"];  //内容不可改变
  print(names);
  names[1] = "TSLC"; // Cannot modify an unmodifiable list
  print(names);
}
class Car{

  var name;

  Car(this.name);

  bool drive(){
    print("${name}我着了...");
    return true;
  }
}
 结果
 [Instance of 'Car', Instance of 'Car']
TSLT
TSLT我着了...
true
[TSLT, XRBS]




void main(){
   var a = {1,"2",3.4,Car(5),true};
   print(a);

   a.add("aaa");
   print(a);

   var b = Set();
   b.add(1);
   b.add("2");
   b.add(3.4);
   b.add(Car(5));
   b.add(true);
   print(b);

   // var c = const {1,"2",3.4,Car(5),true}; //  Error:  The element '3.4' does not have a primitive equality.
   var c = const {1,"你好",true}; //  Error:  The element '3.4' does not have a primitive equality.
   print(c);
}
结果
{1, 2, 3.4, Instance of 'Car', true}
{1, 2, 3.4, Instance of 'Car', true, aaa}
{1, 2, 3.4, Instance of 'Car', true}
{1, 你好, true}

2 var 关键字

  • var 关键字一旦赋值类型即确定
void main(){
  var a = 1;
  var b = "hello";
  var c = Car();
  c.drive();
  print(a.runtimeType);
  print(b.runtimeType);
  print(c.runtimeType);
} 

class Car{
  void drive(){
    print("我跑了");
  }
}

结果

我跑了
int
String
Car

3 dynamic 和 Object

  • Object是Dart所有对象的父类
  • Object和dynamic声明变量 可改变类型
  • dynamic 可使用对象类型的属性和方法 Object声明的对象只能用Object的属性和方法
void main(){
  Object a;
  a = "hello";
  print("a 的类型是 ${a.runtimeType}");
  a = 1;
  print("a 的变化后类型是 ${a.runtimeType}");

  dynamic b;
  b = 1;
  print("b 的类型是 ${b.runtimeType}");
  b = 1.1;
  print("b 的变化后类型是 ${b.runtimeType}");

  a = "hello";
  b = "world";
  print(b.length);
  // print(a.length); //报错 The getter 'length' isn't defined for the class 'Object'.
}

结果

a 的类型是 String
a 的变化后类型是 int
b 的类型是 int
b 的变化后类型是 double
5

4 final 和 const

  • const 编译时赋值
  • final 运行时 第一次使用时 赋值
void main(){
  final a;
  a = 1;
  print(a);

  // const b; // 报错 Error: The const variable 'b' must be initialized
  const b = 2;
  print(b);
}

结果

1
2

5 空安全

void main(){
  Car? car;
  print(car?.drive());
  car = Car();
  print(car?.drive());
}
class Car{
  bool drive(){
    print("我着了...");
    return true;
  }
}

运行结果

lib/demo.dart:8:9: Warning: Operand of null-aware operation '?.' has type 'Car' which excludes null.
 - 'Car' is from 'package:demo/demo.dart' ('lib/demo.dart').
  print(car?.drive());
        ^
null
我着了...
true

函数 (方法)

  • 不声明返回值的 默认是dynamic
run(){
  print("我跑了");
}

eat(){
  return "吃撑了";
}

void main(){
  print(run());
  print(eat());
}

结果

我跑了
null
吃撑了
  • 函数可以作为变量
var run = (){
  print("我跑了");
};

var eat = (){
  return "吃撑了";
};

void main(){
  print(run());
  print(eat());
}

结果

我跑了
null
吃撑了
  • 函数可以作为参数
run(String name){
  print("${name}跑了");
}

eat(String name){
  return "${name}吃撑了";
}




see(var seeWho){
  seeWho("老六");
}

void main(){
  var car  = Car("安妮");
  car.who(run);

  see((var name)=>print(name));
}
class Car{
  var name;

  Car(this.name);

  who(var run){
    run(name);
  }
}

运行结果:
安妮跑了
老六
  • 可变函数
eat(String name,{String? food,int? num}){
  return "${name}吃${food}撑了${num}份";
}

speak(String name,[String? and,String? chat]){
  return "${name}吃${and}${chat}";
}


void main(){
  print(eat("张三"));
  print(eat("张三",food: "麻辣烫",num: 10));
  print(speak("张三"));
  print(speak("张三","李四"));
  print(speak("张三","李四","聊天"));
}

运行结果:
张三吃null撑了null份
张三吃麻辣烫撑了10份
张三吃nullnull
张三吃李四null
张三吃李四聊天
  • 扩展函数
    • 常用类型转换 / 时间处理 / 或者Widget的扩展(例如padding)
    • 多个扩展函数若已定义 不可重复定义 即函数名不可重复
    • dynamic 不可使用扩展函数
/**
 * 扩展函数
 * 格式:
 * extension 函数名 on 类
 *
 */
extension toNum on String{
  int toInt(){
    return int.parse(this);
  }

  double toDouble(){
    return double.parse(this);
  }
}


void main(){
  var a = "12".toInt();
  print(a);
  print(a.runtimeType);

  dynamic b = "12";
}

结果:
12
int

在这里插入图片描述

    • 默认构造函数
    • 命名构造函数 Student2.fromJson()

import 'dart:convert';


void main(){
   var student = Student("张三", "三年二班", 18, "2005-12-12 12:12:12");
   print("student>>${student}");
   var student1 = Student1("张三", "三年二班", 18, "2005-12-12 12:12:12");
   print("student1>>${student1}");
   var student11 = Student1.name("李四");  //命名构造函数
   print("student11>>${student11}");

   String jsonString = '{"name": "John","classGrade": "三年二班","birthday": "2005-12-12 12:12:12", "age": 30}';
   var student2 = Student2.fromJson(jsonString);
   print(student2.toString());
}

class Student{

  //不添加构造函数  这些属性 会报错  或者可以加上?
  String name,classGrade;
  int age;
  String birthday;

  Student(this.name, this.classGrade, this.age, this.birthday);

  Map<String,dynamic> toJson(){
    return {'name':name,'classGrade':classGrade,'age':age,'birthday':birthday};
  }

  @override
  String toString() {
    return 'Student{name: $name, classGrade: $classGrade, age: $age, birthday: $birthday}';
  }
}

class Student1{

  //不添加构造函数  这些属性 会报错  或者可以加上?
  String? name,classGrade;
  int? age;
  String? birthday;

  Student1(this.name, this.classGrade, this.age, this.birthday);

  Student1.name(this.name);



  @override
  String toString() {
    return 'Student1{name: $name, classGrade: $classGrade, age: $age, birthday: $birthday}';
  }
}

class Student2{
  String name = "",classGrade = "";
  int age = 0;
  String birthday = "";

//命名构造函数
  Student2.fromJson(String jsonStr){
    var json = jsonDecode(jsonStr);
    print(jsonStr);
    this.name = json['name'];
    this.classGrade = json['classGrade'];
    this.age = json['age'];
    this.birthday = json['birthday'];
  }

  @override
  String toString() {
    return 'Student2{name: $name, classGrade: $classGrade, age: $age, birthday: $birthday}';
  }
}

运行结果:
student>>Student{name: 张三, classGrade: 三年二班, age: 18, birthday: 2005-12-12 12:12:12}
student1>>Student1{name: 张三, classGrade: 三年二班, age: 18, birthday: 2005-12-12 12:12:12}
student11>>Student1{name: 李四, classGrade: null, age: null, birthday: null}
{"name": "John","classGrade": "三年二班","birthday": "2005-12-12 12:12:12", "age": 30}
Student2{name: John, classGrade: 三年二班, age: 30, birthday: 2005-12-12 12:12:12}

在这里插入图片描述
在这里插入图片描述

  • 常量构造函数
    • 常量构造函数 const修饰构造函数
    • 常量构造函数用const 修饰时 属性值一样 则对象相等


import 'dart:convert';


class Student{
  String name;
  int age;

  Student(this.name, this.age);
}

class Student1{

  final String name;
  final int age;

  const Student1(this.name, this.age);
}

void main(){
  var student = Student("张三",18);
  var student0 = Student("张三",18);
  print(student.hashCode);
  print(student0.hashCode);
  print(student == student0);

  print("\n");

   var student1 = const Student1("张三",18);
   var student11 = const Student1("张三",18);
   var student12 = const Student1("张三",19);
   print(student1.hashCode);
   print(student11.hashCode);
   print(student12.hashCode);
   print(student1 == student11);  //true
   print(student12 == student11); //false

}

结果:
333142976
1033297191
false


87118132
87118132
590927718
true
false
  • 工厂构造函数

import 'dart:convert';


class Student{
  String? name;
  int? age;

  Student.init({String name ="",int age = 0}){
    this.name = name;
    this.age = age;
  }

  static Student instance = Student.init();

  factory Student(){
     return instance;
  }

}


void main(){
  var student = Student.instance;
  var student1 = Student.instance;
  print(student.hashCode);
  print(student1.hashCode);
}

结果:
11925193
11925193
    • 默认属性方法修饰符是public
    • _下划线表示私有
    • 单继承 多实现
      在这里插入图片描述
class A{
  void printA(){
    print("A");
  }
}

class B{
  void printA(){
    print("B");
  }
}

abstract class M{
  void printM(){
    print("M");
  }
}

abstract class N{
  void printN(){
    print("N");
  }
}

interface class X{
  void printX(){
    print("X");
  }
}

interface class Y{
  void printY(){
    print("Y");
  }
}
//单继承 多实现
class C extends A implements M,N,X,Y{
  @override
  void printM() {
    // TODO: implement printM
  }

  @override
  void printN() {
    // TODO: implement printN
  }

  @override
  void printX() {
    // TODO: implement printX
  }

  @override
  void printY() {
    // TODO: implement printY
  }

}
  • 类的混入
mixin class P{
  void printP(){
    print("P");
  }
}

mixin class Q{
  void printQ(){
    print("Q");
  }
}

class D with P,Q{
  void printD(){
    print("D");
  }
}



void main(){
   var d = D();
   d.printD();
   d.printP();
   d.printQ();
}

结果:
D
P
Q

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/264624.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

windos/ubuntu20.4下UE4.27.2像素流送

windows/ubuntu20.4下UE4.27.2像素流送 像素流送技术可以将服务器端打包的虚幻引擎应用程序在客户端的浏览器上运行&#xff0c;用户可以通过浏览器操作虚幻引擎应用程序&#xff0c;客户端无需下载虚幻引擎&#xff0c;本文实现两台机器通过物理介质网线实现虚幻引擎应用程序…

解决xcode 运行不老iPhone 15 iOS 17.1 设备的问题

问题 最近要查看一下ios 17.1的设备的性能&#xff0c;但是当前版本的Xcode运行不了 解决方法 1、更新Xcode版本到15.1以上 2、更新完成后&#xff0c;大概率出现这个情况 原因&#xff1a;在app Store中更新到Xcode15后,运行不了模拟器和真机.需要下载iOS 17对应的模拟器.&…

层次分析法

层次分析法主要用于解决评价类问题(例如选择哪种方案最好&#xff0c;哪位运动员或者员工表现的更优秀) 先用一道引出层次分析法的例题&#xff1a;小明同学高考填完志愿后&#xff0c;小明想出去旅游。在查阅了网上的攻略后&#xff0c;他初步选择了苏杭、北戴河和桂林三地之一…

使用Aspose.Slides 控件,在线将 ODP 转换为 PPT

OpenOffice 等开源生产力工具有其用途。但如果您希望在线将 ODP 转换为 PPT&#xff0c;您很可能已经确定 Microsoft PowerPoint 的专有 PPT 格式和平台比 OpenOffice ODP 更适合您的需求。 本文的第一部分重点介绍在线将 ODP 转换为 PPT 的快速方法。第二部分探讨涉及C#应用程…

Redis设计与实现之AOF

一、AOF Redis 分别提供了 RDB 和 AOF 两种持久化机制: RDB 将数据库的快照(snapshot)以二进制的方式保存到磁盘中。 AOF 则以协议文本的方式&#xff0c;将所有对数据库进行过写入的命令(及其参数)记录到 AOF 文件&#xff0c;以此达到记录数据库状态的目的。 本章首先介绍…

从零开发短视频电商 在AWS上SageMaker部署模型自定义日志输入和输出示例

从零开发短视频电商 在AWS上SageMaker部署模型自定义日志输入和输出示例 怎么部署自定义模型请看&#xff1a;从零开发短视频电商 在AWS上用SageMaker部署自定义模型 都是huaggingface上的模型或者fine-tune后的。 为了适配jumpstart上部署的模型的http输入输出&#xff0c;我…

springMVC-与spring整合

一、基本介绍 在项目开发中&#xff0c;spring管理的 Service和 Respository&#xff0c;SrpingMVC管理 Controller和ControllerAdvice,分工明确 当我们同时配置application.xml, springDispatcherServlet-servlet.xml , 那么注解的对象会被创建两次&#xff0c; 故…

2023 下半年系统架构设计师学习进度

文章目录 复习计划&#xff1a;每周350分钟第一周&#xff08;339分钟&#xff09;第二周&#xff08;265分钟&#xff09;第三周&#xff08;171分钟&#xff09;第四周&#xff08;214分钟&#xff09;第五周&#xff08;274分钟&#xff09;第六周&#xff08;191分钟&#…

初识Stable Diffusion

界面选项解读 这是在趋动云上部署的Stable Diffusion txt2img prompt &#xff08;1&#xff09;分割符号&#xff1a;使用逗号 , 用于分割词缀&#xff0c;且有一定权重排序功能&#xff0c;逗号前权重高&#xff0c;逗号后权重低 &#xff08;2&#xff09;建议的通用范式…

【Java JMM】编译和优化

1 前端编译 在 Java 技术下, “编译期” 是一个比较含糊的表述, 因为它可能指的是 前端编译器 (“编译器的前端” 更准确一些) 把 *.java 文件转变成 *.class 文件的过程Java 虚拟机的即时编译器 (常称 JIT 编译器, Just In Time Compiler) 运行期把字节码转变成本地机器码的过…

《Python》面试常问:深拷贝、浅拷贝、赋值之间的关系(附可变与不可变)【用图文讲清楚!】

背景 想必大家面试或者平时学习经常遇到问python的深拷贝、浅拷贝和赋值之间的区别了吧&#xff1f;看网上的文章很多写的比较抽象&#xff0c;小白接收的难度有点大&#xff0c;于是乎也想自己整个文章出来供参考 可变与不可变 讲深拷贝和浅拷贝之前想讲讲什么是可变数据类型…

Pytorch常用的函数(五)np.meshgrid()和torch.meshgrid()函数解析

Pytorch常用的函数(五)np.meshgrid()和torch.meshgrid()函数解析 我们知道torch.meshgrid()函数的功能是生成网格&#xff0c;可以用于生成坐标&#xff1b; 在numpy中也有一样的函数np.meshgrid()&#xff0c;但是用法不太一样&#xff0c;我们直接上代码进行解释。 1、两者…

如何在Window系统下搭建Nginx服务器环境并部署前端项目

1.下载并安装Nginx 在nginx官网nginx: download 下载稳定版本至自己想要的目录。 解压后进入目录 2.启动Nginx服务器 启动方式有两种&#xff1a; &#xff08;1&#xff09;直接进入nginx安装目录下&#xff0c;双击nginx.exe运行&#xff0c;此时命令行窗口一闪而过&…

浏览器 cookie 的原理(详)

目录 1&#xff0c;cookie 的出现2&#xff0c;cookie 的组成浏览器自动发送 cookie 的条件 3&#xff0c;设置 cookie3.1&#xff0c;服务端设置3.1&#xff0c;客户端设置3.3&#xff0c;删除 cookie 4&#xff0c;使用流程总结 整理和测试花了很大时间&#xff0c;如果对你有…

python调用GPT API

每次让gpt给我生成一个调用api的程序时&#xff0c;他经常会调用以前的一些api的方法&#xff0c;导致我的程序运行错误&#xff0c;所以这期记录一下使用新的方法区调用api 参考网址 Migration Guide&#xff0c;这里简要地概括了一下新版本做了哪些更改 OpenAI Python API l…

引领汽车营销新趋势,3DCAT实时云渲染助力汽车三维可视化

当前&#xff0c;汽车产业发展正从电动化的上半场&#xff0c;向智能化的下半场迈进。除了车机技术体验的智能化之外&#xff0c;观车体验的智能化也不容忽视。 这是因为&#xff0c;随着数字化、智能化、个性化的趋势&#xff0c;消费者对汽车的需求和期待也越来越高&#xf…

2016年第五届数学建模国际赛小美赛B题直达地铁线路解题全过程文档及程序

2016年第五届数学建模国际赛小美赛 B题 直达地铁线路 原题再现&#xff1a; 在目前的大都市地铁网络中&#xff0c;在两个相距遥远的车站之间运送乘客通常需要很长时间。我们可以建议在两个长途车站之间设置直达班车&#xff0c;以节省长途乘客的时间。   第一部分&#xf…

Qt的简单游戏实现提供完整代码

文章目录 1 项目简介2 项目基本配置2.1 创建项目2.2 添加资源 3 主场景3.1 设置游戏主场景配置3.2 设置背景图片3.3 创建开始按钮3.4 开始按钮跳跃特效实现3.5 创建选择关卡场景3.6 点击开始按钮进入选择关卡场景 4 选择关卡场景4.1场景基本设置4.2 背景设置4.3 创建返回按钮4.…

Java面向对象(初级)

面向对象编程(基础) 面向对象编程&#xff08;OOP&#xff09;是一种编程范式&#xff0c;它强调程序设计是围绕对象、类和方法构建的。在面向对象编程中&#xff0c;程序被组织为一组对象&#xff0c;这些对象可以互相传递消息。面向对象编程的核心概念包括封装、继承和多态。…

2023.12.21 关于 Redis 常用数据结构 和 单线程模型

目录 各数据结构具体编码方式 查看 key 对应 value 的编码方式 Reids 单线程模型 经典面试题 IO 多路复用 Redis 常用数据结构 Redis 中所有的 key 均为 String 类型&#xff0c;而不同的是 value 的数据类型却有很多种以下介绍 5 种 value 常见的数据类型 注意&#xff1…