From 9ad2ee645bf61b4618c5d01454bfa929795c27e1 Mon Sep 17 00:00:00 2001 From: Thomas Fransolet Date: Wed, 30 Dec 2020 18:41:00 +0100 Subject: [PATCH] Add future builder for webview and export to specific component --- lib/Components/webView.dart | 39 +++++++++++++++++++++++++++ lib/main.dart | 53 +++++++++++++++++-------------------- 2 files changed, 64 insertions(+), 28 deletions(-) create mode 100644 lib/Components/webView.dart diff --git a/lib/Components/webView.dart b/lib/Components/webView.dart new file mode 100644 index 0000000..6134573 --- /dev/null +++ b/lib/Components/webView.dart @@ -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 { + 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; +} \ No newline at end of file diff --git a/lib/main.dart b/lib/main.dart index 286dd8c..71fe155 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -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 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 with TickerProviderStateMixin void _incrementCounter() { setState(() { - _counter++; minimized = !minimized; @@ -170,6 +170,11 @@ class _MyHomePageState extends State with TickerProviderStateMixin super.dispose(); } + static Future get _url async { + await Future.delayed(Duration(seconds: 1)); + return url; + } + @override Widget build(BuildContext context) { SystemChrome.setEnabledSystemUIOverlays([]); @@ -279,30 +284,19 @@ class _MyHomePageState extends State 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 AnimatedPositioned( duration: const Duration(milliseconds: 2000), @@ -323,15 +317,18 @@ class _MyHomePageState extends State with TickerProviderStateMixin crossAxisAlignment: CrossAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ - Text('MENU'), - Column( - crossAxisAlignment: CrossAxisAlignment.center, - mainAxisAlignment: MainAxisAlignment.spaceAround, - children: [ - Text('Sub menu 1'), - Text('Sub menu 2'), - ] - ) + if(minimized) ... [ + Text('MENU'), + Column( + crossAxisAlignment: CrossAxisAlignment.center, + mainAxisAlignment: MainAxisAlignment.spaceAround, + children: [ + Text('Sub menu 1'), + Text('Sub menu 2'), + ] + ) + ] + ] ), /*Icon(