写给前端工程师的 Flutter 详细教程,3年内被辞退5次35岁程序员该何去何从

本文详细介绍了Flutter的相关概念和技术,包括Dart语言的操作符、Isolate的使用、声明式UI和命名参数。此外,还讨论了Collection If和Collection For等特性,以及如何在Flutter中进行状态管理和构建Widget。对于前端开发者来说,这篇文章提供了从React转向Flutter的宝贵知识,同时也分享了一位35岁程序员的职业思考。
摘要由CSDN通过智能技术生成

Vector operator +(Vector v) => Vector(x + v.x, y + v.y);

Vector operator -(Vector v) => Vector(x - v.x, y - v.y);

// Operator == and hashCode not shown. For details, see note below.

// ···

}

void main() {

final v = Vector(2, 3);

final w = Vector(2, 2);

assert(v + w == Vector(4, 5));

assert(v - w == Vector(0, 1));

}

注:重写==,也需要重写Object hashCodegetter

class Person {

final String firstName, lastName;

Person(this.firstName, this.lastName);

// Override hashCode using strategy from Effective Java,

// Chapter 11.

@override

int get hashCode {

int result = 17;

result = 37 * result + firstName.hashCode;

result = 37 * result + lastName.hashCode;

return result;

}

// You should generally implement operator == if you

// override hashCode.

@override

bool operator ==(dynamic other) {

if (other is! Person) return false;

Person person = other;

return (person.firstName == firstName &&

person.lastName == lastName);

}

}

void main() {

var p1 = Person(‘Bob’, ‘Smith’);

var p2 = Person(‘Bob’, ‘Smith’);

var p3 = ‘not a person’;

assert(p1.hashCode == p2.hashCode);

assert(p1 == p2);

assert(p1 != p3);

}

这点在diff对象的时候尤其有用。

lsolate

Dart运行在独立隔离的iSolate中就类似JavaScript一样,单线程事件驱动,但是Dart也开放了创建其他isolate,充分利用CPU的多和能力。

loadData() async {

// 通过spawn新建一个isolate,并绑定静态方法

ReceivePort receivePort =ReceivePort();

await Isolate.spawn(dataLoader, receivePort.sendPort);

// 获取新isolate的监听port

SendPort sendPort = await receivePort.first;

// 调用sendReceive自定义方法

List dataList = await sendReceive(sendPort, ‘https://hicc.me/posts’);

print(‘dataList $dataList’);

}

// isolate的绑定方法

static dataLoader(SendPort sendPort) async{

// 创建监听port,并将sendPort传给外界用来调用

ReceivePort receivePort =ReceivePort();

sendPort.send(receivePort.sendPort);

// 监听外界调用

await for (var msg in receivePort) {

String requestURL =msg[0];

SendPort callbackPort =msg[1];

Client client = Client();

Response response = await client.get(requestURL);

List dataList = json.decode(response.body);

// 回调返回值给调用者

callbackPort.send(dataList);

}

}

// 创建自己的监听port,并且向新isolate发送消息

Future sendReceive(SendPort sendPort, String url) {

ReceivePort receivePort =ReceivePort();

sendPort.send([url, receivePort.sendPort]);

// 接收到返回值,返回给调用者

return receivePort.first;

}

当然Flutter中封装了compute,可以方便的使用,譬如在其它isolate中解析大的json

Dart UI as Code

在这里单独提出来的意义在于,从React开始,到Flutter,到最近的Apple SwiftUI,Android Jetpack Compose 声明式组件写法越发流行,Web 前端使用JSX来让开发者更方便的书写,而Flutter,SwiftUI则直接从优化语言

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值