Flutter Flatter bloc:更新状态不会重新调用BlocBuilder
我有一个页面正在使用bloc进行管理 这是Flutter Flatter bloc:更新状态不会重新调用BlocBuilder,flutter,dart,bloc,state-management,Flutter,Dart,Bloc,State Management,我有一个页面正在使用bloc进行管理 这是home\u state.dart import 'package:banha/data/models/category.dart'; import 'package:flutter/material.dart'; abstract class HomeState { HomeState() : super(); } class HomeInitial extends HomeState {} class UpdateCats extends
home\u state.dart
import 'package:banha/data/models/category.dart';
import 'package:flutter/material.dart';
abstract class HomeState {
HomeState() : super();
}
class HomeInitial extends HomeState {}
class UpdateCats extends HomeState {
final List<Category> cats;
final int rand;
UpdateCats({@required this.cats,@required this.rand}){
print(this.cats);
print(this.rand);
}
}
和页面小部件:
import 'package:banha/ui/category/category.dart';
import 'package:banha/ui/tabs/home/bloc/home_bloc.dart';
import 'package:banha/ui/tabs/home/bloc/home_states.dart';
import 'package:flutter/material.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
class ListingsWidget extends StatefulWidget {
@override
_ListingsWidgetState createState() => _ListingsWidgetState();
}
class _ListingsWidgetState extends State<ListingsWidget> {
final HomeBloc _homeBloc = HomeBloc();
@override
void initState() {
super.initState();
}
@override
Widget build(BuildContext context) {
return Container(
height: 130,
padding: EdgeInsets.only(top: 10, bottom: 10),
child: BlocListener(
bloc: _homeBloc,
listener: (context, state) {
print(state);
},
child: BlocBuilder<HomeBloc, HomeState>(
bloc: _homeBloc,
builder: (BuildContext context,HomeState state) {
if(state is UpdateCats){
print(state.cats);
}
return ListView(
scrollDirection: Axis.horizontal,
children: <Widget>[
InkWell(
borderRadius: BorderRadius.circular(1000),
onTap: () {
HomeBloc().getAllCats();
// Navigator.push(context, CupertinoPageRoute(builder: (context) => CategoryPage()));
},
....
没有发生任何事情(不再调用Builder),我的代码有什么问题?我将
BlocProvider
添加到根小部件(即主页)中,解决了这个问题。问题在于:
...
onTap: () {
...
HomeBloc().getAllCats();
...
},
...
它应该是
\u homeBloc.getAllCats()代码>我不知道为什么,但是您是否尝试过BlocDelegate来查看状态转换,如果您可以提供此日志,这将对调试非常有帮助。我刚刚发现您在代码中做了一件奇怪的事情<代码>HomeBloc().getAllCats()代码>,则在调度事件时使用本地bloc但初始化新blocBlocProvider
不是真正的问题,因为您使用的是本地bloc
if(state is UpdateCats){
print(state.cats);
}
...
onTap: () {
...
HomeBloc().getAllCats();
...
},
...