Flutter_bloc框架使用笔记,后续估计都不太会用了

class _RegisterButton extends StatelessWidget {
@override
Widget build(BuildContext context) {
return BlocBuilder<RegisterBloc, RegisterState>(builder: (context, state) {
return CircleRectButton(
child: Text(LS.of(context, “register”), style: TextStyle(letterSpacing: 20)),
onPressed: state.status.isValidated
? () async {
context.read().add(RegisterSubmitEvent());
}
: null);
});
}
}

BlocListener: 通过BlocListener来监听状态消息,收到消息child不会rebuild。适合拿来弹出加载页,错误信息等。

BlocBuilder 通过BlocBuilder来包装需要修改的内容。 这里的在组装页面的时候尽量在涉及到更新的地方使用 BlocBuilder,也尽可能的考虑buildwhen 属性。保持当必须要更新时才重新build的思路。

  1. bloc

bloc 在封装后没什么逻辑,他的思路就是接受页面的事件,转为状态变更返回给页面。

class RegisterBloc extends Bloc<RegisterEvent, RegisterState> {

RegisterBloc(RegisterState initialState) : super(initialState);

@override
Stream mapEventToState(
RegisterEvent event,
) async* {
try {
yield* event.applyAsync(currentState: state, bloc: this);
} catch (, stackTrace) {
developer.log('$
', name: ‘RegisterBloc’, error: _, stackTrace: stackTrace);
yield state;
}
}
}

将对应的事件处理放在event里面去执行显然更符合设计模式。代码也会更清晰,而不用做很多判断

if(event is event){
do(
)
} else if (event is event) {
do(
)
}

  1. event

@immutable
abstract class RegisterEvent {
const RegisterEvent();
Stream applyAsync({required RegisterState currentState, required RegisterBloc bloc});
}

class UsernameChangeEvent extends RegisterEvent {
const UsernameChangeEvent(this.username);
final String username;

Stream applyAsync({required RegisterState currentState, required RegisterBloc bloc}) async* {
var input = UsernameInput.dirty(username);
var status = Formz.validate([input, currentState.password, currentState.confirmPassword]);
yield currentState.copyWith(username: input, status: status);
}

}

抽象event,定义事件接口。 子类event来接收参数,实现事件接口并抛出新的状态给页面。

  1. state

class RegisterState extends Equatable {
final UsernameInput username;
final PasswordTwoInput password;
final PasswordTwoInput confirmPassword;
final FormzStatus status;
final String? errMessage;
RegisterState({
this.username = const UsernameInput.pure(),
this.password = const PasswordTwoInput.pure(),
this.confirmPassword = const PasswordTwoInput.pure(),
this.status = FormzStatus.pure,
this.errMessage
});

@override
List get props => [username, password, confirmPassword, status];

RegisterState copyWith({
UsernameInput? username,
PasswordTwoInput? password,
PasswordTwoInput? confirmPassword,
FormzStatus? status,
}) {
return RegisterState(
username: username ?? this.username,
password: password ?? this.password,
confirmPassword: confirmPassword ?? this.confirmPassword,
status: status ?? this.status,
);
}
}

state可以考虑抽象state和单独一个state类。看具体业务吧。如果属性很简单,可以考虑抽象。属性比较多的情况下就没必要抽象了。

思路总结

  • Page作为整个页面的对外对象,给外部调用,同时定义和注册了本页面需要用的bloc.
  • Screen配置了整个页面展示的widget。并把事件抛给bloc.通过接收bloc的最新状态,并rebuild UI.
  • bloc里面处理事件并转为state返回给页面
    题外话

Cubit

还有一套cubit的简单模板,其实就是把bloc换成了cubit。去掉了event的逻辑。
screen里面事件调用cubit的方法。在cubit里面emit(new state).如此页面就可以接收到最新的状态了。

GET

在使用体验上GET框架不依赖context。对于使用体验来说应该更好些。对于简单的状态管理,也是GET更方便。

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级安卓工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Android移动开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)
img

总结

最后对于程序员来说,要学习的知识内容、技术有太多太多,要想不被环境淘汰就只有不断提升自己,从来都是我们去适应环境,而不是环境来适应我们!

这里附上上述的技术体系图相关的几十套腾讯、头条、阿里、美团等公司20年的面试题,把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分。

相信它会给大家带来很多收获:

上述【高清技术脑图】以及【配套的面试真题PDF】可以点击我的GitHub免费获取

本文在开源项目:[https://github.com]中已收录,里面包含不同方向的自学编程路线、面试题集合/面经、及系列技术文章等,资源持续更新中…

当程序员容易,当一个优秀的程序员是需要不断学习的,从初级程序员到高级程序员,从初级架构师到资深架构师,或者走向管理,从技术经理到技术总监,每个阶段都需要掌握不同的能力。早早确定自己的职业方向,才能在工作和能力提升中甩开同龄人。

同方向的自学编程路线、面试题集合/面经、及系列技术文章等,资源持续更新中…

当程序员容易,当一个优秀的程序员是需要不断学习的,从初级程序员到高级程序员,从初级架构师到资深架构师,或者走向管理,从技术经理到技术总监,每个阶段都需要掌握不同的能力。早早确定自己的职业方向,才能在工作和能力提升中甩开同龄人。

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值