我正在尝试使用抽屉来导航(屈服)具有不同参数的同一个类(CategoryListPage),它似乎没有更新小部件页面。
但是如果我进入HomePage然后产生CategoryListPage(),它将起作用。
我该怎么做才能导航到同一堂课,有什么方法可以刷新内容?
这是我的代码:
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 {
List _languagelistcategorydata;字符串_titleappbar;
CategoryListPage(List languagelistcategorydata,String titleappbar){_languagelistcategorydata = languagelistcategorydata;_titleappbar = titleappbar;}
这是它试图产生(显示)的下一页。其列表视图页面。
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中,您可能已经定义了事件和状态类。
您要实现equatable
吗?
您需要定义如何比较可能出现的两个相同状态。
例如,您可以有一个名为DisplayData()
的状态类,但是如果要一次又一次产生DisplayData(),则UI可能不会刷新,因为它只是检查最后一个状态类型是DisplayData且新状态也是DisplayData因此没有任何变化。
使用相等包,您可以指定如何比较两个相同的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];
}
equatable等效于Java中的Comparator类。