add timeline pkg to flutter
This commit is contained in:
37
packages/z-timeline/lib/bridge.dart
Normal file
37
packages/z-timeline/lib/bridge.dart
Normal file
@@ -0,0 +1,37 @@
|
||||
import 'dart:convert';
|
||||
import 'dart:js_interop';
|
||||
|
||||
@JS('window.__zendegi__')
|
||||
external _ZendegiBridge? get _bridge;
|
||||
|
||||
extension type _ZendegiBridge._(JSObject _) implements JSObject {
|
||||
external JSString getState();
|
||||
external void onEvent(JSString json);
|
||||
external set updateState(JSFunction callback);
|
||||
}
|
||||
|
||||
Map<String, dynamic>? readInitialState() {
|
||||
final bridge = _bridge;
|
||||
if (bridge == null) return null;
|
||||
final json = bridge.getState().toDart;
|
||||
return jsonDecode(json) as Map<String, dynamic>;
|
||||
}
|
||||
|
||||
void onStateUpdated(void Function(Map<String, dynamic> state) callback) {
|
||||
final bridge = _bridge;
|
||||
if (bridge == null) return;
|
||||
bridge.updateState = ((JSString json) {
|
||||
final decoded = jsonDecode(json.toDart) as Map<String, dynamic>;
|
||||
callback(decoded);
|
||||
}).toJS;
|
||||
}
|
||||
|
||||
void emitEvent(String type, [Map<String, dynamic>? payload]) {
|
||||
final bridge = _bridge;
|
||||
if (bridge == null) return;
|
||||
final event = <String, dynamic>{'type': type};
|
||||
if (payload != null) {
|
||||
event['payload'] = payload;
|
||||
}
|
||||
bridge.onEvent(jsonEncode(event).toJS);
|
||||
}
|
||||
Reference in New Issue
Block a user