【问题标题】:UpdateValue in List Cubit FlutterList Cubit Flutter中的UpdateValue
【发布时间】: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);
}

【问题讨论】:

    标签: flutter dart bloc


    【解决方案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);
     }
    

    【讨论】:

      猜你喜欢
      • 2020-12-26
      • 2022-10-13
      • 2022-01-09
      • 2021-09-03
      • 2023-04-08
      • 2021-07-28
      • 2021-01-01
      • 2021-06-24
      • 2021-01-06
      相关资源
      最近更新 更多