Lorem Ipsum 只是印刷和排版行业的虚拟文本。自 1500 年代以来,Lorem Ipsum 一直是行业的标准虚拟文本,当时一位不知名的印刷商采用了一种类型的厨房并将其加扰以制作一本类型样本书。它不仅经历了五个世纪,而且经历了电子排版的飞跃,基本保持不变。它在 1960 年代随着包含 Lorem Ipsum 段落的 Letraset 表的发布而流行起来,最近还随着 Aldus PageMaker 等桌面出版软件(包括 Lorem Ipsum 的版本)而普及。
问问题
56 次
2 回答
0
如果父小部件中没有 BlocProvider,则需要制作一个 bloc 实例并给 BlocBuilder 一个 bloc。
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();
}
});
};
于 2020-06-17T13:04:19.413 回答
0
fcm 消息来 -> AddMessage -> BlocListener 监听 AddMessageComplete 事件 -> 从 state.messages 替换消息变量(您应该添加 AddMessage 事件的状态,如 AddMessageFinished 或 AddMessageComplete)
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();
}
},
}
);
}
于 2020-06-17T14:31:40.227 回答