首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我的MessagesBloc类做错了什么?我应该如何创建它?

我的MessagesBloc类做错了什么?我应该如何创建它?
EN

Stack Overflow用户
提问于 2020-06-17 20:46:10
回答 2查看 56关注 0票数 0

Lorem Ipsum只是印刷和排版行业的虚拟文本。自15世纪以来,Lorem Ipsum一直是业界的标准虚拟文本,当时一家不知名的印刷商拿出了一个排版,然后把它弄乱了,做成了一个排版样本簿。它不仅存活了五个世纪,还经历了电子排版的飞跃,基本上保持不变。它在20世纪60年代随着包含Lorem Ipsum段落的Letraset sheets的发布而流行起来,最近又随着包括Lorem Ipsum版本的桌面出版软件Aldus PageMaker而流行起来。

EN

回答 2

Stack Overflow用户

发布于 2020-06-17 21:04:19

如果父部件中没有BlocProvider,则需要创建一个阻塞实例,并为BlocBuilder提供一个阻塞。

代码语言:javascript
复制
MessageBloc _messageBloc = MessageBloc(databaseService: someDatabaseServicInstance);
...

    Widget build(BuildContext context) {
           return BlocBuilder<MessagesBloc, MessagesState>(
        bloc: _messageBloc,
        builder: (context, state) {
      if (state is Loading) {
        return LoadingIndicator();
      }
      if (state is Finished) {
        messages = state.messages;
        return messages.length != 0
            ? _buildMessageView(messages)
            : _buildEmptyMessageView();
      }
    });
};
票数 0
EN

Stack Overflow用户

发布于 2020-06-17 22:31:40

-> AddMessage -> BlocListener listen AddMessageComplete event -> replace messages变量来自state.messages (您应该添加AddMessage事件的状态,如AddMessageFinished或AddMessageComplete)

代码语言:javascript
复制
List<Message> messages = [];
MessageBloc _messageBloc = BlocProvider.of<MessagesBloc>(context);

  @override
  void initState() {
    super.initState();
    _firebaseMessaging.configure(
      onMessage: (Map<String, dynamic> message) async {
        print("onMessage: $message");

        var result = Message.fromMap(
            new Map<String, dynamic>.from(message['notification']));

         // I exactly don't know it works, if not works use yours.
        _messageBloc.add(
          AddMessage(message: result),
        );

        //setState(() {
        //  messages.add(result);
        //});
      },
  }

    Widget build(BuildContext context) {
      return BlocConsumer<MessagesBloc, MessagesState>(
        listener: (context, state) {
           if (state is AddCompleted) {
              setState(() {
                messages = state.messages;
              }
           }
        },
        builder: (context, state) {
          if (state is Loading) {
            return LoadingIndicator();
          }
          if (state is Finished) {
            messages = state.messages;
            return messages.length != 0
                ? _buildMessageView(messages)
                : _buildEmptyMessageView();
          }
        },
      }
    );
  }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62429344

复制
相关文章

相似问题

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