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