Я пытаюсь загрузить динамический URL-адрес как исходный URL-адрес, потому что он не загружается в веб-просмотре. если я поместил URL-адрес в tem var и использовал temp в качестве исходного URL-адреса, он будет работать
Здесь я пытаюсь загрузить глубокую ссылку в веб-просмотр, сначала введите глубокую ссылку в Google и ее перенаправление в приложение и загрузите глубокую ссылку в веб-просмотре. если я помещу статический URL-адрес, например var temp = "www.google.com", а затем использую temp var в качестве исходного URL-адреса в веб-просмотре, он загрузит приложение Google. но я попытался скопировать переменную глубокой ссылки в строку var и использовал временную переменную в качестве исходного URL-адреса в веб-просмотре, он не будет загружать динамическую ссылку в веб-просмотре. даже я преобразовал переменную глубокой ссылки в строку (URI приведенного типа в строку)
import 'dart:async';
import 'dart:convert';
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:firebase_dynamic_links/firebase_dynamic_links.dart';
import 'package:webview_flutter/webview_flutter.dart';
void main() {
runApp(MaterialApp(
title: 'Dynamic Links Example',
routes: <String, WidgetBuilder>{
'/': (BuildContext context) => _MainScreen(),
},
));
}
class _MainScreen extends StatefulWidget {
@override
State<StatefulWidget> createState() => _MainScreenState();
}
class _MainScreenState extends State<_MainScreen> {
String temp;
// String temp = "www.google.com"; // это будет работать правильно как исходный URL в веб-просмотре
@override
void initState() {
initDynamicLinks();
super.initState();
}
Future initDynamicLinks() async {
// 1. Get the initial dynamic link if the app is opened with a dynamic link
final PendingDynamicLinkData data =
await FirebaseDynamicLinks.instance.getInitialLink();
// 2. handle link that has been retrieved
_handleDeepLink(data);
// 3. Register a link callback to fire if the app is opened up from the background
// using a dynamic link.
FirebaseDynamicLinks.instance.onLink(
onSuccess: (PendingDynamicLinkData dynamicLink) async {
// 3a. handle link that has been retrieved
_handleDeepLink(dynamicLink);
}, onError: (OnLinkErrorException e) async {
print('Link Failed: ${e.message}');
});
}
@override
Widget build(BuildContext context) {
return Material(
child: Scaffold(
appBar: AppBar(
title: const Text('Dynamic Links Example'),
),
body: Builder(builder: (BuildContext context) {
return Center(
child: WebView(
initialUrl: temp, // dynamic url copy from deep link var it will not load in web view
javascriptMode: JavascriptMode.unrestricted,
),
);
}),
),
);
}
void _handleDeepLink(PendingDynamicLinkData data) {
final Uri deepLink = data?.link;
if (deepLink != null) {
temp = deepLink.toString(); // here i had done type casting to uri to string
print('_handleDeepLink | deeplink: $deepLink');
}
}
}
1 ответ
Для динамического перенаправления WebView вам потребуется получить переменную WebViewController после загрузки WebView. Затем вызовите .loadUrl(newUrl);
Например, сначала вы создаете переменную _webControl вне функции сборки:
late WebViewController _webControl;
@override
Widget build(BuildContext ctx) {
...
Затем назначьте _webControl внутри WebView после его создания:
WebView(
initialUrl: firstTimeURL,
javascriptMode: JavascriptMode.unrestricted,
onWebViewCreated: (WebViewController webViewController) {
_webControl=webViewController;
webViewController.evaluateJavascript('''alert("Henlo from flutter")''');
},
),
Наконец, вызывайте .loadUrl(xxx) всякий раз, когда захотите (внутри кнопки материала,...). Нет необходимости устанавливать состояние:
_webControl.loadUrl(temp);