我试图使用抽屉导航(屈服)到具有不同参数的同一个类(CategoryListPage),它似乎没有更新小部件页面。
但是如果我进入HomePage然后产生CategoryListPage(),它就可以工作。
我该怎么做才能导航到同一个类(class),是否可以刷新内容?
这是我的代码:
class NavigationBloc extends Bloc<NavigationEvents, NavigationStates> {
@override
NavigationStates get initialState => HomePage();
@override
Stream<NavigationStates> mapEventToState(NavigationEvents event) async* {
switch (event) {
case NavigationEvents.HomePageClickedEvent:
yield HomePage();
break;
case NavigationEvents.ClickedEvent1:
yield CategoryListPage(languageObjectList.list_1, languageCategoryList.languagecategorylist[1-1].category_name);
break;
case NavigationEvents.ClickedEvent2:
yield CategoryListPage(languageObjectList.list_2, languageCategoryList.languagecategorylist[2-1].category_name);
break;
一些更多的代码在这里:
class CategoryListPage extends StatefulWidget with NavigationStates {
...
class CategoryListPage类用NavigationStates扩展了StatefulWidget {
列出_languagelistcategorydata;
字符串_titleappbar;
CategoryListPage(列表语言列表categorydata,字符串标题应用栏){
_languagelistcategorydata = languagelistcategorydata;
_titleappbar = titleappbar;
}
这是它尝试产生(显示)的下一页。它是一个listview页面。
class CategoryListPage extends StatefulWidget with NavigationStates {
List<LanguageObject> _languagelistcategorydata;
String _titleappbar;
CategoryListPage(List<LanguageObject> languagelistcategorydata, String titleappbar) {
_languagelistcategorydata = languagelistcategorydata;
_titleappbar = titleappbar;
}
@override
_CategoryListPageState createState() => _CategoryListPageState(_languagelistcategorydata, _titleappbar);
}
class _CategoryListPageState extends State<CategoryListPage> {
List<LanguageObject> items;
String titleappbar;
_CategoryListPageState(List<LanguageObject> languagelistcategorydata, String titleappbar) {
this.items = languagelistcategorydata;
this.titleappbar = titleappbar;
}
最佳答案
在您的Bloc中,您可能已经定义了Events和States类。
您要实现equatable
吗?
您需要定义如何比较可能出现的两个相同状态。
例如,可以有一个名为DisplayData()
的状态类,但是如果要一次又一次产生DisplayData(),则UI可能不会刷新,因为它只是检查最后一个状态类型是DisplayData且新状态也是DisplayData,因此没有更改那里。
使用equatable包,您可以指定如何比较两个相同的State类。
class DisplayData extends Equatable {
String data;
DisplayData(this.data);
// This is what you need to add, here you specify what fields of this state class needs to be checked for equality.
@override
List<Object> get props => [data];
}
等于表等于Java中的Comparator类。