Flutter——dart
Posted wzj_what_why_how
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flutter——dart相关的知识,希望对你有一定的参考价值。
dart(一)
变量声明
-
var:它可以接收任何类型的变量, var 变量一旦赋值,类型便会确定,则不能再改变其类型。eg:var str = “KL”
-
dynamic 和 Object:
-
Object 是 Dart 所有对象的根基类,也就是说在 Dart 中所有类型都是Object的子类(包括Function和Null),所以任何类型的数据都可以赋值给Object声明的对象。 dynamic与Object声明的变量都可以赋值任意对象,且后期可以改变赋值的类型,这和 var 是不同的,如:
dynamic t; Object x; t = "hi world"; x = 'Hello Object'; //下面代码没有问题 t = 1000; x = 1000;
-
dynamic与Object不同的是: dynamic声明的对象编译器会提供所有可能的组合,而Object声明的对象只能使用 Object 的属性与方法, 否则编译器会报错,如:
dynamic a; Object b = ""; main() a = ""; printLengths(); printLengths() // 正常 print(a.length); // 报错 The getter 'length' is not defined for the class 'Object' print(b.length);
-
dynamic 的这个特点使得我们在使用它时需要格外注意,这很容易引入一个运行时错误,比如下面代码在编译时不会报错,而在运行时会报错:
print(a.xx); // a是字符串,没有"xx"属性,编译时不会报错,运行时会报错。
-
-
final和const
如果您从未打算更改一个变量,那么使用 final 或 const,不是var,也不是一个类型。 一个 final 变量只能被设置一次,两者区别在于:const 变量是一个编译时常量(编译时直接替换为常量值),final变量在第一次使用时被初始化。被final或者const修饰的变量,变量类型可以省略,如://可以省略String这个类型声明 final str = "hi world"; //final String str = "hi world"; const str1 = "hi world"; //const String str1 = "hi world";
函数
Dart是一种真正的面向对象的语言,所以即使是函数也是对象,并且有一个类型Function。这意味着函数可以赋值给变量或作为参数传递给其他函数,这是函数式编程的典型特征。
-
函数声明
bool isNoble(int atomicNumber) return _nobleGases[atomicNumber] != null;
ps:Dart函数声明如果没有显式声明返回值类型时会默认当做dynamic处理,注意,函数返回值没有类型推断。
对于只包含一个表达式的函数,可以使用简写语法:bool isNoble (int atomicNumber)=> true ;
-
函数作为变量
var say = (str) print(str); ; say("hi world");
-
函数作为参数传递
void execute(var callback) callback(); execute(() => print("xxx"))
-
可选的位置参数
包装一组函数参数,用[]标记为可选的位置参数,并放在参数列表的最后面:String say(String from, String msg, [String? device]) var result = '$from says $msg'; if (device != null) result = '$result with a $device'; return result;
-
可选的命名参数
定义函数时,使用param1, param2, …,放在参数列表的最后面,用于指定命名参数。例如://设置[bold]和[hidden]标志 void enableFlags(bool bold, bool hidden) // ...
调用函数时,可以使用指定命名参数。例如:paramName: value
enableFlags(bold: true, hidden: false);
ps:可选命名参数在Flutter中使用非常多。注意,不能同时使用可选的位置参数和可选的命名参数。
mixin
Dart 继承:A extends B
Dart 是不支持多继承的,但是它支持 mixin,简单来讲 mixin 可以 “组合” 多个类,我们通过一个例子来理解。
定义一个 Person 类,实现吃饭、说话、走路和写代码功能,同时定义一个 Dog 类,实现吃饭、和走路功能:
class Person
say()
print('say');
mixin Eat
eat()
print('eat');
mixin Walk
walk()
print('walk');
mixin Code
code()
print('key');
class Dog with Eat, Walk
class Man extends Person with Eat, Walk, Code
我们定义了几个 mixin,然后通过 with 关键字将它们组合成不同的类。有一点需要注意:如果多个mixin 中有同名方法,with 时,
会默认使用最后面的 mixin 的,mixin 方法中可以通过 super 关键字调用之前 mixin 或类中的方法。
以上是关于Flutter——dart的主要内容,如果未能解决你的问题,请参考以下文章
flutter: SharedPreferences桌面插件
Flutter开发 Flutter 包和插件 ( 开发 Dart 插件包 | 发布 Dart 插件包 )