Flutter消息流处理插件flame_message_stream的使用
Flutter消息流处理插件flame_message_stream的使用
特性
简单的工具集,用于简化在Flame中管理流。
使用
流可以用于组件之间的通信,游戏与组件之间的通信,以及(最有用的是)游戏与Flutter小部件之间的通信,包括来自覆盖层的小部件。
使用MessageStreamProvider
添加发送消息的能力
class AnyClass {
/// 创建具有严格类型的消息提供者实例
final _provider = MessageStreamProvider<String>();
/// 不要忘记使[messagingStream]可用,以便外部类订阅它
Stream<String> get messagingStream => _provider.messagingStream;
/// 可以从类逻辑中的任何地方发送数据到订阅者
void classMainFunction() {
_provider.sendMessage('message text');
}
/// 不要忘记释放资源
void dispose() {
_provider.dispose();
}
}
使用MessageListener
混入来监听Flame组件中的消息
/// 指定[MessageListener]混入的消息类型。它必须与用于发送消息的[MessageStreamProvider]相同
class MessageReceiver extends Component with MessageListener<String> {
/// 指定此组件将订阅的流名称
[@override](/user/override)
String get streamName => 'string_stream';
/// 存储数据,如果需要
String lastMessageData = '';
/// 实现此函数以接收组件中的消息
[@override](/user/override)
void onStreamMessage(String message) {
lastMessageData = message;
}
/// 在组件的任何逻辑中使用保存的数据,例如在[update]函数中
[@override](/user/override)
update(double dt) {
print(lastMessageData);
super.update(dt);
}
}
使用HasMessageProviders
混入给游戏类以具有从游戏中发送消息的能力
/// 示例类表示消息
[@immutable](/user/immutable)
class ExampleMessage {
ExampleMessage(this.text, this.value);
final String text;
final int value;
}
/// 将[HasMessageProviders]添加到游戏类
class MyGame extends FlameGame with HasMessageProviders {
/// 创建名称和类型都不同的多个流,以便从任何地方订阅它们(仅为例)
[@override](/user/override)
void onLoad() {
/// 创建具有[MessageListener]混入的组件。它会自动订阅相应的流。如果没有存在,则会自动创建流。
final stringListener = MessageReceiver();
/// 只需将此组件添加到游戏
add(stringListener);
/// 您还可以直接访问其唯一字符串名称和消息类型的流
/// 如果不存在,新流将被自动创建。
final streamOfMessages = getMessageProvider<ExampleMessage>('msg_stream').messagingStream;
}
/// 只需获取所需的提供者并发送相应类型的消息。
void anyFunctionWithLogic() {
getMessageProvider<String>('string_stream').sendMessage('Hello, World!');
getMessageProvider<ExampleMessage>('msg_stream').sendMessage(ExampleMessage('Hi!', 42));
getMessageProvider<ExampleMessage>('msg_stream').sendMessage(ExampleMessage('Bye!', 404));
}
}
更多关于Flutter消息流处理插件flame_message_stream的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
1 回复