Merge branch 'widgets' into 'main'
fix: null-safety issues with widgets See merge request famedly/company/frontend/famedlysdk!947
This commit is contained in:
		
						commit
						e30c0f7fa2
					
				|  | @ -2,37 +2,40 @@ import 'package:matrix/src/room.dart'; | ||||||
| 
 | 
 | ||||||
| class MatrixWidget { | class MatrixWidget { | ||||||
|   final Room room; |   final Room room; | ||||||
|   final String creatorUserId; |   final String? creatorUserId; | ||||||
|   final Map<String, dynamic> data; |   final Map<String, dynamic>? data; | ||||||
|   final String id; |   final String? id; | ||||||
|   final String name; |   final String name; | ||||||
|   final String type; |   final String type; | ||||||
|  | 
 | ||||||
|  |   /// use [buildWidgetUrl] instead | ||||||
|   final String url; |   final String url; | ||||||
|   final bool waitForIframeLoad; |   final bool waitForIframeLoad; | ||||||
| 
 | 
 | ||||||
|   MatrixWidget({ |   MatrixWidget({ | ||||||
|     required this.room, |     required this.room, | ||||||
|     required this.creatorUserId, |     this.creatorUserId, | ||||||
|     required this.data, |     this.data = const {}, | ||||||
|     required this.id, |     this.id, | ||||||
|     required this.name, |     required this.name, | ||||||
|     required this.type, |     required this.type, | ||||||
| 
 |  | ||||||
|     /// use [buildWidgetUrl] instead |  | ||||||
|     required this.url, |     required this.url, | ||||||
|     required this.waitForIframeLoad, |     this.waitForIframeLoad = false, | ||||||
|   }); |   }); | ||||||
| 
 | 
 | ||||||
|   factory MatrixWidget.fromJson(Map<String, dynamic> json, Room room) => |   factory MatrixWidget.fromJson(Map<String, dynamic> json, Room room) => | ||||||
|       MatrixWidget( |       MatrixWidget( | ||||||
|         room: room, |         room: room, | ||||||
|         creatorUserId: json['creatorUserId'], |         creatorUserId: | ||||||
|         data: json['data'], |             json.containsKey('creatorUserId') ? json['creatorUserId'] : null, | ||||||
|         id: json['id'], |         data: json.containsKey('data') ? json['data'] : {}, | ||||||
|  |         id: json.containsKey('id') ? json['id'] : null, | ||||||
|         name: json['name'], |         name: json['name'], | ||||||
|         type: json['type'], |         type: json['type'], | ||||||
|         url: json['url'], |         url: json['url'], | ||||||
|         waitForIframeLoad: json['waitForIframeLoad'], |         waitForIframeLoad: json.containsKey('waitForIframeLoad') | ||||||
|  |             ? json['waitForIframeLoad'] | ||||||
|  |             : false, | ||||||
|       ); |       ); | ||||||
| 
 | 
 | ||||||
|   Future<Uri> buildWidgetUrl() async { |   Future<Uri> buildWidgetUrl() async { | ||||||
|  | @ -50,7 +53,8 @@ class MatrixWidget { | ||||||
|       r'$matrix_avatar_url': userProfile.avatarUrl?.toString() ?? '', |       r'$matrix_avatar_url': userProfile.avatarUrl?.toString() ?? '', | ||||||
|       // removing potentially dangerous keys containing anything but |       // removing potentially dangerous keys containing anything but | ||||||
|       // `[a-zA-Z0-9_-]` as well as non string values |       // `[a-zA-Z0-9_-]` as well as non string values | ||||||
|       ...Map.from(data) |       if (data != null) | ||||||
|  |         ...Map.from(data!) | ||||||
|           ..removeWhere((key, value) => |           ..removeWhere((key, value) => | ||||||
|               !RegExp(r'^[\w-]+$').hasMatch(key) || !value is String) |               !RegExp(r'^[\w-]+$').hasMatch(key) || !value is String) | ||||||
|           ..map((key, value) => MapEntry('\$key', value)), |           ..map((key, value) => MapEntry('\$key', value)), | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue