List Cubit Flutter中的UpdateValue
Posted
技术标签:
【中文标题】List Cubit Flutter中的UpdateValue【英文标题】:UpdateValue in List Cubit Flutter 【发布时间】:2021-01-09 19:31:07 【问题描述】:在应用程序中,我使用的是 Cubit。从 Firestore 获取 ItemData。一切正常,但是在列表中添加项目并在firestore中更新值(名称)之后,列表中仍然是旧值。如何解决?
class TestPage extends StatelessWidget
@override
Widget build(BuildContext context)
return Scaffold(
body: Column(
children: [
BlocBuilder<ItemCubit, ItemState>(
cubit: ItemCubit(DataBase())..getItemData(item),
builder: (context, state)
if (state is ItemData)
return Column(
children: [
Text(state.item.name),
RaisedButton(
onPressed: ()
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => TestPage1(
item: state.item,
)));
,
child: Text('showPage'),
),
RaisedButton(
onPressed: ()
context.bloc<TestCubit>().add(item);
,
)
],
);
return Container(
child: Text('error'),
);
,
)
],
),
);
为了在列表中添加项目,我正在使用另一肘 代码:
class AddCubit extends Cubit<AddState>
AddCubit() : super(AddInitial());
List<Item> items = List<Item>();
void addItem(Item item)
items.add(item);
emit(LoadList(items));
这是用于检索 TestPage1 中的项目列表的块:
BlocBuilder<AddCubit, AddState>(builder: (context, state)
if (state is LoadList)
return Column(
children: state.items.toSet().map((item)
return Card(
child: Text(item.name),
);
).toList(),
);
)
状态码:
class LoadList extends AddState
final List<Item> items;
LoadList(this.items);
【问题讨论】:
【参考方案1】:在 Flutter 中,当您比较同一类的两个对象时,即使它们的值不同,您也将始终相等。除非你会在课堂上使用相等方法。
具有相等方法的类代码
import 'package:equatable/equatable.dart';
class LoadList extends AddState
final List<Item> items;
LoadList(this.items);
@override
List<Object> get props => [items];
第二件事是你应该使用副本而不是为新值创建新状态。它稍后会派上用场,并减少以后可能出现的错误数量。
状态类的完整代码
import 'package:equatable/equatable.dart';
class LoadList extends AddState
final List<Item> items;
LoadList(this.items);
LoadList copyWith(
List<Item> items,
)
return LoadList(
items: items?? this.items,
);
@override
List<Object> get props => [items];
然后你应该使用 void 函数:
void addItem(Item item)
items.add(item);
emit(state.copyWith(items: items);
【讨论】:
以上是关于List Cubit Flutter中的UpdateValue的主要内容,如果未能解决你的问题,请参考以下文章
Flutter - cubit - 改变cubit内的布尔值
Flutter - 使用国际翻译对 Cubit/ Bloc 内的消息进行应用本地化