Dart学习

1、
()() 自执行方法

2、
如果要明确说明不需要任何类型, 需要使用特殊类型 dynamic。
变量以下划线(_)开头,在Dart语言中使用下划线前缀标识符,会强制其变成私有的。

3、
Dart 中的所有异常是非检查异常。 方法不会声明它们抛出的异常, 也不要求捕获任何异常。
throw可以抛出异常和对象,关键字 rethrow 将异常重新抛出。

try {
  breedMoreLlamas();
} on OutOfLlamasException { // 一个特殊的异常
  buyMoreLlamas();
} on Exception catch (e) { // 其他任何异常
  print('Unknown exception: $e');
} catch (e) { // 没有指定的类型,处理所有异常
  print('Something really unknown: $e');
}

捕获语句中可以同时使用 on 和 catch ,也可以单独分开使用。 使用 on 来指定异常类型, 使用 catch 来 捕获异常对象。catch() 函数可以指定1到2个参数, 第一个参数为抛出的异常对象, 第二个为堆栈信息 ( 一个 StackTrace 对象 )。

4、泛型:
T getData<t>(T value){
return value;
}

</t>

5、
Final 变量的值只能被设置一次; Const 变量在编译时就已经固定 (Const 变量是隐式 Final 的类型.),如果 Const 变量是类级别的,需要标记为 static const。 最高级 final 变量或类变量在第一次使用时被初始化。

Const 关键字不仅可以用于声明常量变量。 还可以用来创建常量值,以及声明创建常量值的构造函数。 任何变量都可以拥有常量值。如:
var foo = const [];
final bar = const [];
const baz = []; // Equivalent to const []
声明 const 的初始化表达式中 const 可以被省略。

7、
如果 assert 语句中的布尔条件为 false , 那么正常的程序执行流程会被中断,断言失败,并抛出异常 (AssertionError)。assert 的第二个参数可以为其添加一个字符串消息。
assert 语句只在开发环境中有效, 在生产环境是无效的; Flutter 中的 assert 只在 debug 模式中有效(通过命令行开启 assert : --enable-asserts)。

8、
使用 as 运算符将对象强制转换为特定类型。
(emp as Person).firstName = 'Bob';
如果 emp 为 null 或者不是 Person 对象, 那么as的示例会抛出异常。

??=运算符:
b ??= value;// 如果b为空时,将变量赋值给b,否则,b的值保持不变。

expr1 ?? expr2
如果 expr1 是 non-null, 返回 expr1 的值; 否则, 执行并返回 expr2 的值。

"i ~/ 2" 表示i除以2,但返回值是整形(向下取整)。

?.可以避免因为左边对象可能为 null , 导致的异常:
p?.y = 4; // 如果 p 为 non-null,设置它变量 y 的值为 4。

默认参数值:旧版本代码中可能使用的是冒号 (:) 而不是 = 来设置参数默认值。 原因是起初命名参数只支持 : 。这种支持可能会被弃用,建议使用 = 指定默认值。


flutter学习

在 Flutter 中,几乎所有都是 widget,包括对齐 (alignment)、填充 (padding) 和布局 (layout)。


Material 是一种移动端和网页端通用的视觉设计语言, Flutter 提供了丰富的 Material 风格的 widgets。在 pubspec.yaml 文件的 flutter 部分选择加入 uses-material-design: true 会是一个明智之举,通过这个可以让您使用更多 Material 的特性,比如其预定义好的图标集。


Scaffold 是 Material 库中提供的一个 widget,它提供了默认的导航栏、标题和包含主屏幕 widget 树的 body 属性。 widget 树可以很复杂。


添加一个显示收藏夹内容的新页面(在 Flutter 中称为路由[route]),在主路由和新路由之间导航(切换页面)。在 Flutter 中,导航器管理应用程序的路由栈。将路由推入(push)到导航器的栈中,将会显示更新为该路由页面。 从导航器的栈中弹出(pop)路由,将显示返回到前一个路由。