Line data Source code
1 : /// Extensions related to widgets in a room. Widgets are not part of the Matrix specification yet. 2 : library; 3 : 4 : import 'package:matrix/matrix.dart'; 5 : 6 : export 'src/widget.dart'; 7 : 8 : extension MatrixWidgets on Room { 9 : /// Returns all present Widgets in the room. 10 4 : List<MatrixWidget> get widgets => { 11 10 : ...states['m.widget'] ?? states['im.vector.modular.widgets'] ?? {}, 12 6 : }.values.expand((e) { 13 : try { 14 6 : return [MatrixWidget.fromJson(e.content, this)]; 15 : } catch (_) { 16 2 : return <MatrixWidget>[]; 17 : } 18 2 : }).toList(); 19 : 20 0 : Future<String> addWidget(MatrixWidget widget) { 21 0 : final user = client.userID; 22 : final widgetId = 23 0 : '${widget.name!.toLowerCase().replaceAll(RegExp(r'\W'), '_')}_${user!}'; 24 : 25 0 : final json = widget.toJson(); 26 0 : json['creatorUserId'] = user; 27 0 : json['id'] = widgetId; 28 0 : return client.setRoomStateWithKey( 29 0 : id, 30 : 'im.vector.modular.widgets', 31 : widgetId, 32 : json, 33 : ); 34 : } 35 : 36 0 : Future<String> deleteWidget(String widgetId) { 37 0 : return client.setRoomStateWithKey( 38 0 : id, 39 : 'im.vector.modular.widgets', 40 : widgetId, 41 0 : {}, 42 : ); 43 : } 44 : }