Flutter 所有状态类中具有一个共同属性的颤振集团可平衡状态

Flutter 所有状态类中具有一个共同属性的颤振集团可平衡状态,flutter,dart,bloc,Flutter,Dart,Bloc,我正试图找出定义搜索区状态的最佳方法,以便在所有状态类中保留text属性(搜索键) 目前看起来是这样的: import 'package:equatable/equatable.dart'; import 'package:project/models/searchResults.dart'; class SearchState extends Equatable { SearchState([List props = const []]) : super(props); } class

我正试图找出定义搜索区状态的最佳方法,以便在所有状态类中保留
text
属性(搜索键)

目前看起来是这样的:

import 'package:equatable/equatable.dart';
import 'package:project/models/searchResults.dart';

class SearchState extends Equatable {
  SearchState([List props = const []]) : super(props);
}

class SearchStateEmpty extends SearchState {
  final String text;
  SearchStateEmpty({this.text});
  @override
  String toString() => 'SearchStateEmpty';
}

class SearchStateLoading extends SearchState {
  final String text;
  SearchStateLoading({this.text});
  @override
  String toString() => 'SearchStateLoading';
}

class SearchStateSuccess extends SearchState {
  final String text;
  final List<RestaurantSearchItem> items;

  SearchStateSuccess({this.text, this.items}) : super([text, items]);

  @override
  String toString() => 'SearchStateSuccess { items: ${items.length} }';
}

class SearchStateError extends SearchState {
  final String text;
  final String error;

  SearchStateError({this.text, this.error}) : super([text, error]);

  @override
  String toString() => 'SearchStateError';
}
class SearchState extends Equatable {
  final String text;
  SearchState(this.text,
      [List<RestaurantSearchItem> items = const [], String error = ''])
      : super([text, items, error]);
}

class SearchStateEmpty extends SearchState {
  SearchStateEmpty({String text})
      : super(text); // Here I want to use text from SearchState

  SearchStateEmpty.fromState(SearchState state) : super(state.text);

  @override
  String toString() => 'SearchStateEmpty';
}

class SearchStateLoading extends SearchState {
  final String text;

  SearchStateLoading({this.text})
      : super(text); // Here I  want to set text that comes from event

  @override
  String toString() => 'SearchStateLoading';
}

class SearchStateError extends SearchState {
  final String error;

  SearchStateError({this.error, String text}) : super(text, [], error);
  // Text comes from SearchState, error comes from event

  SearchStateError.fromState(SearchState state, {this.error})
      : super(state.text, [], error);

  @override
  String toString() => 'SearchStateError';
}

class SearchStateSuccess extends SearchState {
  final List<RestaurantSearchItem> items;

  SearchStateSuccess({this.items, String text}) : super(text, items, null);

  SearchStateSuccess.fromState(SearchState state, {this.items})
      : super(state.text, items, null);

  @override
  String toString() => 'SearchStateSuccess { items: ${items.length} }';
}
我在Flutter文档中寻找示例,但我所能找到的是,我要么使用不同的bloc,要么放弃
equalable
(我想保留它,因为拥有它非常好)


如有任何示例性建议,将不胜感激。谢谢。

我当时的做法有点反模式。在一些帮助下,我能够找到一种更干净的方法在状态类中使用当前状态

代码现在如下所示:

import 'package:equatable/equatable.dart';
import 'package:project/models/searchResults.dart';

class SearchState extends Equatable {
  SearchState([List props = const []]) : super(props);
}

class SearchStateEmpty extends SearchState {
  final String text;
  SearchStateEmpty({this.text});
  @override
  String toString() => 'SearchStateEmpty';
}

class SearchStateLoading extends SearchState {
  final String text;
  SearchStateLoading({this.text});
  @override
  String toString() => 'SearchStateLoading';
}

class SearchStateSuccess extends SearchState {
  final String text;
  final List<RestaurantSearchItem> items;

  SearchStateSuccess({this.text, this.items}) : super([text, items]);

  @override
  String toString() => 'SearchStateSuccess { items: ${items.length} }';
}

class SearchStateError extends SearchState {
  final String text;
  final String error;

  SearchStateError({this.text, this.error}) : super([text, error]);

  @override
  String toString() => 'SearchStateError';
}
class SearchState extends Equatable {
  final String text;
  SearchState(this.text,
      [List<RestaurantSearchItem> items = const [], String error = ''])
      : super([text, items, error]);
}

class SearchStateEmpty extends SearchState {
  SearchStateEmpty({String text})
      : super(text); // Here I want to use text from SearchState

  SearchStateEmpty.fromState(SearchState state) : super(state.text);

  @override
  String toString() => 'SearchStateEmpty';
}

class SearchStateLoading extends SearchState {
  final String text;

  SearchStateLoading({this.text})
      : super(text); // Here I  want to set text that comes from event

  @override
  String toString() => 'SearchStateLoading';
}

class SearchStateError extends SearchState {
  final String error;

  SearchStateError({this.error, String text}) : super(text, [], error);
  // Text comes from SearchState, error comes from event

  SearchStateError.fromState(SearchState state, {this.error})
      : super(state.text, [], error);

  @override
  String toString() => 'SearchStateError';
}

class SearchStateSuccess extends SearchState {
  final List<RestaurantSearchItem> items;

  SearchStateSuccess({this.items, String text}) : super(text, items, null);

  SearchStateSuccess.fromState(SearchState state, {this.items})
      : super(state.text, items, null);

  @override
  String toString() => 'SearchStateSuccess { items: ${items.length} }';
}
类SearchState扩展了equalable{
最终字符串文本;
SearchState(this.text,
[列表项=常量[],字符串错误=“”])
:super([文本、项目、错误]);
}
类SearchStateEmpty扩展了SearchState{
SearchStateEmpty({String text})
:super(text);//这里我想使用SearchState中的文本
searchstatempty.fromState(SearchState状态):super(state.text);
@凌驾
字符串toString()=>“SearchStateEmpty”;
}
类SearchStateLoading扩展了SearchState{
最终字符串文本;
SearchStateLoading({this.text})
:super(text);//这里我想设置来自事件的文本
@凌驾
字符串toString()=>“SearchStateLoading”;
}
类SearchStateError扩展了SearchState{
最终字符串错误;
SearchStateError({this.error,String text}):超级(text,[],error);
//文本来自SearchState,错误来自事件
SearchStateError.fromState(SearchState状态,{this.error})
:super(state.text,[],error);
@凌驾
字符串toString()=>“SearchStateError”;
}
类SearchState成功扩展了SearchState{
最后清单项目;
SearchStateSuccess({this.items,String text}):超级(text,items,null);
SearchStateSuccess.fromState(SearchState状态,{this.items})
:super(state.text,items,null);
@凌驾
String-toString()=>'SearchStateSucture{items:${items.length}}';
}

你能解释一下你所在州的入境点是什么吗?我有一些相同的用例,但是我需要的属性来自一个不同的集团,我订阅了它,但不确定在初始状态调用之后如何实例化它?这不是最好的模式。但是,当您需要在不同的状态之间共享同一属性时,您可以使用它,而无需在每次更改状态时设置它。