Flutter yield对于NavigationEvents中的同一个类不起作用

问题描述 投票:1回答:1

我正在尝试使用抽屉来导航(屈服)具有不同参数的同一个类(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;
  }
flutter dart widget yield
1个回答
1
投票

在您的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类。

© www.soinside.com 2019 - 2024. All rights reserved.