-
-
Notifications
You must be signed in to change notification settings - Fork 927
Expand file tree
/
Copy pathiframe_web.dart
More file actions
60 lines (55 loc) · 2.04 KB
/
iframe_web.dart
File metadata and controls
60 lines (55 loc) · 2.04 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
import 'dart:convert';
import 'dart:math';
import 'dart:ui_web' as ui_web;
import 'package:flutter/material.dart';
import 'package:flutter_html/flutter_html.dart';
import 'package:web/web.dart' show HTMLIFrameElement;
import 'package:webview_flutter/webview_flutter.dart';
class IframeWidget extends StatelessWidget {
final NavigationDelegate? navigationDelegate;
final ExtensionContext extensionContext;
const IframeWidget({
super.key,
required this.extensionContext,
this.navigationDelegate,
});
@override
Widget build(BuildContext context) {
final givenWidth =
double.tryParse(extensionContext.attributes['width'] ?? "");
final givenHeight =
double.tryParse(extensionContext.attributes['height'] ?? "");
final HTMLIFrameElement iframe = HTMLIFrameElement()
..width = (givenWidth ?? (givenHeight ?? 150) * 2).toString()
..height = (givenHeight ?? (givenWidth ?? 300) / 2).toString()
..src = extensionContext.attributes['src'] ?? ""
..style.border = 'none';
final String createdViewId = _getRandString(10);
ui_web.platformViewRegistry
.registerViewFactory(createdViewId, (int viewId) => iframe);
return SizedBox(
width: double.tryParse(extensionContext.attributes['width'] ?? "") ??
(double.tryParse(extensionContext.attributes['height'] ?? "") ??
150) *
2,
height: double.tryParse(extensionContext.attributes['height'] ?? "") ??
(double.tryParse(extensionContext.attributes['width'] ?? "") ?? 300) /
2,
child: CssBoxWidget(
style: extensionContext.styledElement!.style,
childIsReplaced: true,
child: Directionality(
textDirection: extensionContext.styledElement!.style.direction!,
child: HtmlElementView(
viewType: createdViewId,
),
),
),
);
}
}
String _getRandString(int len) {
var random = Random.secure();
var values = List<int>.generate(len, (i) => random.nextInt(255));
return base64UrlEncode(values);
}