gpt4 book ai didi

flutter - 在 flutter block 中处理

转载 作者:行者123 更新时间:2023-12-04 14:12:26 25 4
gpt4 key购买 nike

在下面的代码中,
profileBloc 在 EditProfileScreenState 的 didChangeDependencies() 方法中初始化。
我们应该在 EditProfileScreenState 类上调用 dispose 方法来处理 profileBloc 吗?
如果是这样,应该如何处理 profileBloc 方法,因为 ProfileBloc 类扩展了没有 dispose 方法的 Bloc 类?

class Profile extends StatelessWidget {

@override
Widget build(BuildContext context) {
return BlocProvider(
create: (BuildContext context) => ProfileBloc(AuthRepo()),
child: ProfileScreen(),
);
}
}

class ProfileScreen extends StatefulWidget {

@override
EditProfileScreenState createState() => EditProfileScreenState();
}


class EditProfileScreenState extends State<ProfileScreen> {

ProfileBloc profileBloc;

@override
void didChangeDependencies() {
profileBloc = BlocProvider.of<ProfileBloc>(context);
super.didChangeDependencies();
}

@override
void dispose() {
// TODO: implement dispose
//profileBloc.dispose() cannot call as ProfileBloc class doesn't have dispose method
super.dispose();
}

@override
Widget build(BuildContext context) {
return Scaffold(
body: BlocConsumer<ProfileBloc, ProfileState>(
listener: (context, state) {
},
builder: (BuildContext context,ProfileState state) {
return RaisedButton(onPressed: ()=>profileBloc.add(SaveProfile("name","email")));
}
));
}
}

class ProfileBloc extends Bloc<ProfileEvent, ProfileState> {

AuthRepo authRepo;

ProfileBloc(this.authRepo) : super(ProfileSaved());

@override
Stream<ProfileState> mapEventToState(ProfileEvent event) async* {
if (event is SaveProfile) {
//Actions
}
}
}

最佳答案

在我搜索的过程中,我找到了解决方案。
我们不需要在 didChangeDependencies() 中初始化 profileBloc。
我们可以使用以下命令直接从 BlocProvider 访问 add 方法:

BlocProvider.of<ProfileBloc>(context).add(ProfileSaved())
我们可以从 EditProfileScreenState 类中删除以下部分。
ProfileBloc profileBloc;

@override
void didChangeDependencies() {
profileBloc = BlocProvider.of<ProfileBloc>(context);
super.didChangeDependencies();
}
而且,
在 ProfileBloc 类中,如果我们需要取消任何流,我们可以使用 close 方法。
@override
Future<void> close() {
//cancel streams
super.close();
}

关于flutter - 在 flutter block 中处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63213799/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com