Merge branch 'widgets' into 'main'

fix: null-safety issues with widgets

See merge request famedly/company/frontend/famedlysdk!947
This commit is contained in:
Krille Fear 2022-02-02 15:24:45 +00:00
commit e30c0f7fa2
1 changed files with 21 additions and 17 deletions

View File

@ -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)),