this is my deeplink sgapp://sgapp.com/register/user/form, now i can launch my app when the deeplink is pressed. But the webview is not open sgapp.com/register/user/form this link when the app is launched. How can I make it to let the webview change to the link from deeplink.
Below is my code:
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:webview_flutter/webview_flutter.dart';
import './app_constant.dart';
import './iw_one_signal.dart';
import 'package:uni_links/uni_links.dart';
import 'package:flutter/foundation.dart' show kIsWeb;
import 'package:flutter/services.dart' show PlatformException;
bool _initialUriIsHandled = false;
class Home extends StatefulWidget {
const Home({super.key});
@override
State<Home> createState() => _HomeState();
}
class _HomeState extends State<Home> {
Uri? _initialUri;
Uri? _latestUri;
Object? _err;
StreamSubscription? _sub;
@override
void initState() {
super.initState();
// NOTE: no await so that webview can be rendered immediately while one signal get initialized
IwOneSignal.initPlatformState();
_handleIncomingLinks();
_handleInitialUri();
}
@override
void dispose() {
_sub?.cancel();
super.dispose();
}
void _handleIncomingLinks() {
if (!kIsWeb) {
_sub = uriLinkStream.listen((Uri? uri) {
if (!mounted) return;
print('got uri: $uri');
setState(() {
_latestUri = uri;
_err = null;
});
}, onError: (Object err) {
if (!mounted) return;
// print('got err: $err');
setState(() {
_latestUri = null;
if (err is FormatException) {
_err = err;
} else {
_err = null;
}
});
});
}
}
Future<void> _handleInitialUri() async {
if (!_initialUriIsHandled) {
_initialUriIsHandled = true;
try {
final uri = await getInitialUri();
// setState(() => _initialUri = uri);
} on PlatformException {
// print('falied to get initial uri');
}
}
}
@override
Widget build(BuildContext context) {
return getWebview();
}
Widget getWebview() {
var controller = WebViewController()
..setJavaScriptMode(JavaScriptMode.unrestricted)
..setBackgroundColor(const Color(0x00000000))
..setNavigationDelegate(
NavigationDelegate(
onProgress: (int progress) {},
onPageStarted: (String url) {},
onPageFinished: (String url) {},
onWebResourceError: (WebResourceError error) {},
),
)
..loadRequest(Uri.parse(AppConstant.webviewUrl));
return WebViewWidget(controller: controller);
}
}
I had try to use the _latestUri to set the link for webview.