我试图使用抽屉导航(屈服)到具有不同参数的同一个类(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类。

10-08 12:41