Flutter 颤振屈服不适用于NavigationEvents中的同一类

Flutter 颤振屈服不适用于NavigationEvents中的同一类,flutter,dart,widget,yield,Flutter,Dart,Widget,Yield,我试图使用抽屉导航(屈服)到同一个类(CategoryListPage),使用不同的参数,它似乎不会更新小部件页面 但如果我转到主页,然后生成CategoryListPage(),它就可以工作了 如何导航到同一类,是否有方法刷新内容 这是我的密码: class NavigationBloc extends Bloc<NavigationEvents, NavigationStates> { @override NavigationStates get initialState

我试图使用抽屉导航(屈服)到同一个类(CategoryListPage),使用不同的参数,它似乎不会更新小部件页面

但如果我转到主页,然后生成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;

类CategoryListPage使用NavigationStates扩展StatefulWidget{

列表languagelistcategorydata; 字符串_titleappbar

CategoryListPage(列表语言ListCategoryData,字符串标题PBAR){ _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;
  }

class CategoryListPage使用NavigationStates扩展StatefulWidget{
列表languagelistcategorydata;
字符串_titleappbar;
CategoryListPage(列表语言ListCategoryData,字符串标题PBAR){
_languagelistcategorydata=languagelistcategorydata;
_titleappbar=titleappbar;
}
@凌驾
_CategoryListPageState createState()=>_CategoryListPageState(_languagelistcategorydata,_titleappbar);
}
类_CategoryListPageState扩展状态{
清单项目;
字符串标题栏;
_CategoryListPageState(列表语言ListCategoryData,字符串titLeapBar){
this.items=languagelistcategorydata;
this.titleappbar=titleappbar;
}

在您的Bloc中,您可能已经定义了Events和States类

您是否正在实施
equalable

您需要定义如何比较可能进入的两个相同状态

例如,您可以有一个名为
DisplayData()
的状态类,但是如果您一次又一次地生成DisplayData(),UI可能不会刷新,因为它只是检查最后一个状态类型是DisplayData,而新状态也是DisplayData,因此不会有任何更改

使用equatable包,您可以指定如何比较两个相同的状态类

    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];
    }
class DisplayData扩展了equalable{
字符串数据;
显示数据(此.data);
//这就是您需要添加的内容,在这里您可以指定需要检查该状态类的哪些字段是否相等。
@凌驾
列表获取道具=>[数据];
}

equatable相当于Java中的Comparator类。

它会抛出任何错误,或者默默地什么都不做?这篇文章似乎与你的问题类似。检查第二个答案。看起来类似,但我仍然不确定如何解决它。我尝试了一个想法,我有两个不同的CategoryListPage(例如:CategoryListPageOne和CategoryListPageII)。但是我不知道如何检查/保存currentState NavigationStates以了解哪个是当前的,然后在不同的CategoryListPageThank上发布收益。我仍然很难弄清楚这一点。我了解什么是Equalable,比较类功能。如何将Equalable扩展到我的NavigationStates类。它当前的声明如下。类CategoryListPage使用NavigationStates扩展StatefulWidget{使用mixin?equalatablemixin?
    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];
    }