load method
dynamic
load()
Implementation
load() async {
setState(() {
errorOccurred = false;
});
final prefs = await SharedPreferences.getInstance();
if (!prefs.containsKey(solidChatSessionIdKey)) {
await prefs.setString(solidChatSessionIdKey, Uuid().v4());
}
controller =
WebViewController()
..setJavaScriptMode(JavaScriptMode.unrestricted)
..clearCache()
..clearLocalStorage()
..setNavigationDelegate(
NavigationDelegate(
onNavigationRequest: (NavigationRequest request) {
if (request.url.contains('solidchat')) {
return NavigationDecision.navigate;
}
return NavigationDecision.prevent;
},
),
)
..addJavaScriptChannel(
'mobileSdk',
onMessageReceived: (JavaScriptMessage message) {
var payload = jsonDecode(message.message);
if (payload['action'] == 'close') {
close();
return;
}
if (payload['action'] == 'link') {
var link = payload['link'] as String;
try {
launchUrl(
Uri.parse(link),
mode:
link.contains('solidchat')
? LaunchMode.externalApplication
: LaunchMode.platformDefault,
);
} catch (_) {}
}
if (payload['action'] == 'route') {
var href = payload['href'] as String;
setState(() {
backgroundColor =
href.contains('conversation_')
? Color(0xFFF5F5F5)
: Colors.white;
});
}
if (payload['action'] == 'indicate') {
var count = payload['count'] as int;
SolidChat.unreadConversationsCount.add(count);
}
},
)
..setNavigationDelegate(
NavigationDelegate(
onProgress: (int current) {
setState(() {
progress = current;
_progressAnimation = Tween<double>(
begin: _progressAnimation.value,
end: current / 100,
).animate(_animationController);
_animationController.forward(from: 0);
});
},
onPageStarted: (String url) {},
onPageFinished: (String url) {},
onNavigationRequest: (NavigationRequest request) {
return NavigationDecision.navigate;
},
onHttpError: (err) {
if (err.request?.uri.toString().contains('sentry') ?? true) {
return;
}
setState(() {
errorOccurred = true;
});
},
onWebResourceError: (err) {
setState(() {
errorOccurred = true;
});
},
),
);
await controller.setJavaScriptMode(JavaScriptMode.unrestricted);
if (controller.platform is WebKitWebViewController) {
await (controller.platform as WebKitWebViewController).setInspectable(
true,
);
await (controller.platform as WebKitWebViewController).setOverScrollMode(
WebViewOverScrollMode.never,
);
}
await controller.loadRequest(
Uri.parse(
'https://app.solidchat.io/widget/${widget.options.key}/${(widget.options.initialTab ?? SolidChatTab.home).path}?mobile=true&chat_session_id=${prefs.getString(solidChatSessionIdKey)}',
),
);
}