Add future builder for webview and export to specific component

This commit is contained in:
Thomas Fransolet 2020-12-30 18:41:00 +01:00
parent db2e382eb2
commit 9ad2ee645b
2 changed files with 64 additions and 28 deletions

View File

@ -0,0 +1,39 @@
import 'package:flutter/material.dart';
import 'package:webview_flutter/webview_flutter.dart';
class WebViewWidget extends StatefulWidget {
final String url;
WebViewWidget({this.url});
@override
_WebViewWidget createState() => _WebViewWidget();
}
class _WebViewWidget extends State<WebViewWidget> {
WebView _webView;
@override
void initState() {
super.initState();
_webView = WebView(
initialUrl: "https://my.matterport.com/show/?m=k8bvdezfHbT",
javascriptMode: JavascriptMode.unrestricted,
navigationDelegate: (NavigationRequest request) {
if (request.url != "https://my.matterport.com/show/?m=k8bvdezfHbT") {
print('blocking navigation to $request}');
return NavigationDecision.prevent;
}
print('allowing navigation to $request');
return NavigationDecision.navigate;
},
);
}
@override
void dispose() {
super.dispose();
_webView = null;
}
@override
Widget build(BuildContext context) => _webView;
}

View File

@ -5,6 +5,7 @@ import 'package:flutter/services.dart';
import 'package:webview_flutter/webview_flutter.dart';
import 'Components/custom_clipper.dart';
import 'Components/webView.dart';
import 'constants.dart';
void main() {
@ -67,7 +68,7 @@ class MyHomePage extends StatefulWidget {
}
class _MyHomePageState extends State<MyHomePage> with TickerProviderStateMixin {
int _counter = 0;
static String url= "https://my.matterport.com/show/?m=k8bvdezfHbT";
Size sizeScreen = new Size(1080.0, 1920.0); // Tablet resolution
double elementMinimizedSize = 200.0;
double elementMaximizedSize = 400.0;
@ -128,7 +129,6 @@ class _MyHomePageState extends State<MyHomePage> with TickerProviderStateMixin
void _incrementCounter() {
setState(() {
_counter++;
minimized = !minimized;
@ -170,6 +170,11 @@ class _MyHomePageState extends State<MyHomePage> with TickerProviderStateMixin
super.dispose();
}
static Future<String> get _url async {
await Future.delayed(Duration(seconds: 1));
return url;
}
@override
Widget build(BuildContext context) {
SystemChrome.setEnabledSystemUIOverlays([]);
@ -279,28 +284,17 @@ class _MyHomePageState extends State<MyHomePage> with TickerProviderStateMixin
child: Container(
width: size.width,
height: size.height,
child: WebView(
initialUrl: "https://my.matterport.com/show/?m=k8bvdezfHbT",
javascriptMode: JavascriptMode.unrestricted,
onWebViewCreated: (WebViewController webViewController) {
_webViewController.complete(webViewController);
},
navigationDelegate: (NavigationRequest request) {
if (request.url != "https://my.matterport.com/show/?m=k8bvdezfHbT") {
print('blocking navigation to $request}');
return NavigationDecision.prevent;
}
print('allowing navigation to $request');
return NavigationDecision.navigate;
},
child: FutureBuilder(
future: _url,
builder: (BuildContext context, AsyncSnapshot snapshot) => snapshot.hasData
? WebViewWidget(url: snapshot.data,)
: CircularProgressIndicator()),
)),
),
),
),
),
);
},
),
}),
),
),
// MENU
@ -323,6 +317,7 @@ class _MyHomePageState extends State<MyHomePage> with TickerProviderStateMixin
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
if(minimized) ... [
Text('MENU'),
Column(
crossAxisAlignment: CrossAxisAlignment.center,
@ -333,6 +328,8 @@ class _MyHomePageState extends State<MyHomePage> with TickerProviderStateMixin
]
)
]
]
),
/*Icon(
Icons.autorenew,