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

时间:2020-06-01 12:47:39

标签: flutter dart widget yield

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

类别CategoryListPage用NavigationStates {

扩展了StatefulWidget

列出_languagelistcategorydata; 字符串_titleappbar;

CategoryListPage(列表语言列表类别数据,字符串标题应用栏){ _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;
  }

1 个答案:

答案 0 :(得分:1)

在您的Bloc中,您可能已经定义了事件和状态类。

您要实现equatable吗?

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

例如,您可以有一个名为DisplayData()的State Class,但是如果要一次又一次产生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];
    }

equatable等效于Java中的Comparator类。