时间:2023年04月07日 | 作者 : aaronyang | 分类 : flutter | 浏览: 960次 | 评论 0 人
如果仅仅学习dart,不想装环境,直接web学,我自己还是用vscode
学习地址:Language tour | Dart
支持泛型,空安全,class类,C#有的特性基本都有
Dart 没有类似于 Java 那样的 public、protected 和 private 成员访问限定符。如果一个标识符以下划线 (_) 开头则表示该标识符在库内是私有的。可以查阅 库和可见性 获取更多相关信息
String支持单引号,类似js中的字符串,C#必须是双引号,不是就是char类型了
可空整型数字
int? lineCount;
assert(lineCount == null);
如果你确定这个变量在使用前就已经被声明,但 Dart 判断失误的话,你可以在声明变量的时候使用 late 修饰来解决这个问题。
late String description; void main() { description = 'Feijoada!'; print(description); }
在下面这个例子中,如果 temperature 变量从未被使用的话,那么 readThermometer() 将永远不会被调用:
late String temperature = readThermometer(); // Lazily initialized.
dart:math库 数学库,比如ceil, abs,floor
颜色值
var hex = 0xDEADBEEF;
字符串插值
多行拼接
集合
var list = [1, 2, 3];
var list = [
'Car',
'Boat',
'Plane',
];
Dart 在 2.3 引入了 扩展操作符(...)和 空感知扩展操作符(...?),它们提供了一种将多个元素插入集合的简洁方法。
例如,你可以使用扩展操作符(...)将一个 List 中的所有元素插入到另一个 List 中:
var list = [1, 2, 3];
var list2 = [0, ...list];
assert(list2.length == 4);
如果扩展操作符右边可能为 null ,你可以使用 null-aware 扩展操作符(...?)来避免产生异常
var list2 = [0, ...?list];
assert(list2.length == 1);
Set类型,花括号 包裹了
var halogens = {'fluorine', 'chlorine', 'bromine', 'iodine', 'astatine'};
创建一个空的set
var names = <String>{};
// Set<String> names = {}; // This works, too.
// var names = {}; // Creates a map, not a set. 是 Map<dynamic, dynamic>类型
添加单个和多个
var elements = <String>{};
elements.add('fluorine');
elements.addAll(halogens);
这个时候已经你以为有6个元素,但是set会自动去重,所以length==5
Map类似C#的dictionary<T,V>
dart中不建议使用new这个关键字
判断key是否存在,
Unicode 编码为每一个字母、数字和符号都定义了一个唯一的数值。因为 Dart 中的字符串是一个 UTF-16 的字符序列,所以如果想要表示 32 位的 Unicode 数值则需要一种特殊的语法
表示 Unicode 字符的常见方式是使用 \uXXXX
,其中 XXXX 是一个四位数的 16 进制数字。例如心形字符(♥)的 Unicode 为 \u2665
。对于不是四位数的 16 进制数字,需要使用大括号将其括起来。例如大笑的 emoji 表情(?)的 Unicode 为 \u{1f600}
。
import 'package:characters/characters.dart';
void main() {
var hi = 'Hi ??';
print(hi);
print('The end of the string: ${hi.substring(hi.length - 1)}');
print('The last character: ${hi.characters.last}');
}
Symbols类似C#的 #region 等预编译符
isNoble(atomicNumber) {
return _nobleGases[atomicNumber] != null;
}
可以不写返回类型,还可以如下类似C#的匿名方法,简写
bool isNoble(int atomicNumber) => _nobleGases[atomicNumber] != null;
可选命名,指定参数名字传入参数,用花括号{ },调用类似C#的默认参数传参
还有个可选位置,类似最后几个位置的参数,类似实现C#的方法重载
main方法,类似C#的控制台等程序入口
简写下main代码
void main() { const list = ['apples', 'bananas', 'oranges']; list.map((item) { return item.toUpperCase(); }).forEach((item) { print('$item: ${item.length}'); }); }
list .map((item) => item.toUpperCase()) .forEach((item) => print('$item: ${item.length}'));
即一个函数对象,即使函数对象的调用在它原始作用域之外,依然能够访问在它词法作用域内的变量。
通过闭包,创建了一个动态的函数
C#中方法可以定义为委托类型,Dart中是Function类型
dart中有个 .. 和 ?.. 左运算符
有个运算 ~/除并取整
关于is,as,还有个is!
是null就等于右侧的值
双问号, name为null,返回Guest
第一行后面没有 分号了,然后换行,使用双点号, 等同于 paint.Color 这种简写
而
当变量不是null时候,才执行级联后面的操作,等同于下面的代码
还可以嵌套
在 Dart 语言中,for 循环中的闭包会自动捕获循环的 索引值 以避免 JavaScript 中一些常见的陷阱。假设有如下代码:
类似C#的foreach 可迭代集合 | Dart
for (final candidate in candidates) {
candidate.interview();
}
const iterable = ['Salad', 'Popcorn', 'Toast'];
for (final element in iterable) {
print(element);
}
print('The first element is ${iterable.first}');
print('The last element is ${iterable.last}');
返回符合条件的一批数据的第一个firstWhere
String element = iterable.firstWhere((element) => element.length > 5);
没有符合的orElse返回默认
var foundItem4 = items.firstWhere(
(item) => item.length > 10,
orElse: () => 'None!',
);
类似C#的Any()和All()
除了firstWhere(),singleWhere()
但是,如果您想找到所有元素怎么办 满足某个条件? 您可以使用该方法完成此操作。where()
我们C#都用 结果.Count()判断有值,dart用isEmpty
var largeNumbers = evenNumbers.where((number) => number > 1000);
if (largeNumbers.isEmpty) {
print('largeNumbers is empty!');
}
takeWhile和skipWhere类似C#的LINQ中的Take和Skip,但是这里不是,
dart中感觉,从左往右,take开始取值,当遇到满足条件时候,就停止取值了。skipWhile是相反的,遇到符合条件的就开始取值。
映射,就是map关键字,下面代码是将每个数字都乘以10,有点类似C#的LINQ的 SelectMany
Iterable<int> output = numbers.map((number) => number * 10);
循环语句和if,switch和 .net4.5以前的C#一致,不过dart的case还多了
抛出异常 throw
void distanceTo(Point other) => throw UnimplementedError();
throw 'AY www.ayjs.net';
throw FormatException('Expected at least 1 section');
捕获异常
如上述代码所示可以使用 on 或 catch 来捕获异常,使用 on 来指定异常类型,使用 catch 来捕获异常对象,两者可同时使用。
try {
breedMoreLlamas();
} on OutOfLlamasException {
// A specific exception
buyMoreLlamas();
} on Exception catch (e) {
// Anything else that is an exception
print('Unknown exception: $e');
} catch (e) {
// No specified type, handles all
print('Something really unknown: $e');
}
你可以为 catch 方法指定两个参数,第一个参数为抛出的异常对象,第二个参数为栈信息 StackTrace 对象:
关键字 rethrow 可以将捕获的异常再次抛出
无论是否抛出异常,finally 语句始终执行,如果没有指定 catch 语句来捕获异常,则异常会在执行完 finally 语句后抛出,和C#一致。
推荐您阅读更多有关于“flutter,”的文章
抖音:wpfui 工作wpf,兴趣学习flutter
目前在合肥市某公司上班,已经厌弃,如果你的公司看的上我,加我QQ私聊
AYUI8全源码 Github地址:前往获取
杨洋(AaronYang简称AY,安徽六安人)和AY交流
高中学历,2010年开始web开发,2015年1月17日开始学习WPF
声明:AYUI7个人与商用免费,源码可购买。部分DEMO不免费
不是从我处购买的ayui7源码,我不提供任何技术服务,如果你举报从哪里买的,我可以帮你转正为我的客户,并送demo
查看捐赠AYUI7.X MVC教程 更新如下:
第一课 第二课 程序加密教程
额 本文暂时没人评论 来添加一个吧
发表评论