Flutter 列表立方体颤振中的更新值

Flutter 列表立方体颤振中的更新值,flutter,dart,bloc,Flutter,Dart,Bloc,在应用程序中,我使用Cubit。从firestore获取ItemData。一切正常,但在列表中添加项并更新firestore中的值(名称)后,列表中的值仍然是旧值。如何解决 class TestPage extends StatelessWidget { @override Widget build(BuildContext context) { return Scaffold( body: Column( children: [

在应用程序中,我使用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 TestPage扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回脚手架(
正文:专栏(
儿童:[
BlocBuilder(
cubit:ItemCubit(数据库())…getItemData(项目),
生成器:(上下文、状态){
如果(状态为ItemData){
返回列(
儿童:[
文本(state.item.name),
升起的按钮(
已按下:(){
导航器。推(
上下文
材料路线(
生成器:(上下文)=>TestPage1(
项目:state.item,
)));
},
子项:文本('showPage'),
),
升起的按钮(
已按下:(){
context.bloc().add(项);
},
)
],
);
}
返回容器(
子项:文本('error'),
);
},
)
],
),
);
}
}
对于列表中的添加项,我使用另一个立方体 代码:

class AddCubit扩展了Cubit{
AddCubit():super(AddInitial());
列表项=列表();
无效附加项(项目){
项目。添加(项目);
发出(装载清单(项目));
}
}
这是用于检索TestPage1中项目列表的bloc:

  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(),
            );
          }
        })
BlocBuilder(生成器:(上下文,状态){
如果(状态为LoadList){
返回列(
子项:state.items.toSet().map((项){
回程卡(
子项:文本(项名称),
);
}).toList(),
);
}
})
州代码:

class LoadList extends AddState {
  final List<Item> items;

  LoadList(this.items);
}
class LoadList扩展了AddState{
最后清单项目;
装载清单(此项);
}

在“颤振”中,当比较同一类别的两个对象时,即使它们的值不同,也会始终相等。除非你在课堂上使用相等方法

具有相等方法的类代码

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);
  @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 addItem(Item item) {
    items.add(item);
    emit(state.copyWith(items: items);
 }