首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >颤动Cubit网

颤动Cubit网
EN

Stack Overflow用户
提问于 2020-09-07 22:43:46
回答 1查看 184关注 0票数 1

对于从FireStore中检索项和对于拾取图像,我使用的是cubit。

库比特:

代码语言:javascript
复制
class ItemCubit extends Cubit<ItemState> {
  ItemCubit(this._dataBase)
      : super(ItemInitial());
  final DataBase _dataBase;
  StreamSubscription streamSubscription;

  Future<void> pickItemImg() async {
    final currentTempImg =
        await ImagePickerWeb.getImage(outputType: ImageType.bytes);
    emit(ItemImgPicked(currentTempImg));
  }

  Future getItem() async {
    streamSubscription = _dataBase.getItem().listen((data) {
      emit(ItemLoaded(data));
    });
  }
}

状态:

代码语言:javascript
复制
@immutable
abstract class ItemState {}

class ItemLoaded extends ItemState {
  final List<Item> item;

  ItemLoaded(this.item);
}

class ItemImgPicked extends ItemState {
  final Uint8List currentTempImg;

  ItemImgPicked(this.currentTempImg);
}

带有区块构建器的页面

代码语言:javascript
复制
class Page extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Column(
        children: [
          RaisedButton(
            onPressed: () async {
              showDialog(
                context: context,
                builder: (BuildContext context) => Dialog(
                  child: Container(
                    width: 400,
                    child: OutlineButton(
                      onPressed: () async {
                        context.bloc<ItemCubit>().pickProductImg();
                      },
                      child: BlocBuilder<ItemCubit, ItemState>(
                        builder: (context, state) {
                          if (state is ItemImgPicked) {
                            return Image.memory(state.currentTempImg);
                          } else {
                            return Container();
                          }
                        },
                      ),
                    ),
                  ),
                ),
              );
            },
            child: Text('add'),
          ),
          BlocBuilder<ItemCubit, ItemState>(
            builder: (context, state) {
              if (state is ItemLoaded) {
                return Column(
                  children: state.item.map(
                    (item) {
                      return Text(item.name);
                    },
                  ).toList(),
                );
              }
              return CircularProgressIndicator();
            },
          )
        ],
      ),
    );
  }
}

问题是,当在显示对话框中我拾取图像时,拾取的图像被显示,但同时在主页面上显示项目列表的阻止构建器返回CircularProgressIndicator。如果我在这个时候使用热重新加载,在它显示项目列表之后。它看起来像项目列表的拾取图像替换状态。如何解决?

EN

回答 1

Stack Overflow用户

发布于 2020-09-07 22:59:03

你的主页区块构建器监听ItemLoaded,据我所知,你从来没有发出过。您可以在该行中放置一个断点,它不应该被命中。

也就是说,请更好地对待你的async函数,你错过了等待一些未来,这可能不是你现在的问题,但它迟早会成为一个问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63779817

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档