首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何处理屏幕更改上的颤振WebviewScaffold?

如何处理屏幕更改上的颤振WebviewScaffold?
EN

Stack Overflow用户
提问于 2019-01-06 19:25:26
回答 2查看 8K关注 0票数 0

我有一个主屏幕,显示标题图像和按钮路由到第二个屏幕,和一个webview(脚手架)在它下面的容器。当我切换到第二个屏幕时,webview仍然存在。这似乎是一个类似于这个(Flutter: to close a webview when you left the page)的问题,但我不知道如何实现dispose事件。有人能帮忙吗?我正在使用flutter_webview_plugin包。这是我的代码:

代码语言:javascript
复制
import 'package:flutter/material.dart';

import 'package:flutter_webview_plugin/flutter_webview_plugin.dart';

import 'dart:async';

import './SecondScreen.dart';

String selectedUrl = 'https://flutter.io';

void main() {
  runApp(new MyApp());
}

class MyApp extends StatelessWidget {
  final flutterWebViewPlugin = FlutterWebviewPlugin();

  @override
  Widget build(BuildContext context) {
    return new MaterialApp(
      title: 'Generated App',
      theme: new ThemeData(
        primarySwatch: Colors.purple,
        primaryColor: const Color(0xFF8e80a8),
        accentColor: const Color(0xFF8e80a8),
        canvasColor: const Color(0xFF8e80a8),
      ),
      home: new MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key}) : super(key: key);

  @override
  _MyHomePageState createState() => new _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {


  @override
  Widget build(BuildContext context) {
    return Container(
      decoration: BoxDecoration(color: Color(0xFF8e80a8)),
      child: new Column(
          mainAxisAlignment: MainAxisAlignment.start,
          mainAxisSize: MainAxisSize.min,
          crossAxisAlignment: CrossAxisAlignment.center,
          children: <Widget>[
            Padding(
              padding: const EdgeInsets.fromLTRB(10, 30, 10, 5),
              child: new Image.asset(
                'lib/assets/newoldralogo1.png',
              ),
            ),
            Container(
              constraints: BoxConstraints.expand(
                height:
                    Theme.of(context).textTheme.display1.fontSize * 1.1 + 10.0,
              ),
              child: new Stack(fit: StackFit.expand,
                  children: <Widget>[
                Container(
                  decoration: BoxDecoration(color: Color(0xFF8e80a8)),
                  child: Padding(
                    padding: const EdgeInsets.fromLTRB(10, 10, 10, 10),
                    child: Image.asset(
                      "lib/assets/newoldralogo1.png",
                      alignment: Alignment.topCenter,
                      fit: BoxFit.fitWidth,
                    ),
                  ),
                ),
                Container(
                  child: RaisedButton(
                    onPressed: () {
                      Navigator.push(
                        context,
                        MaterialPageRoute(builder: (context) => SecondScreen()),
                      );
                    },
                    color: Color(0xFFFFFF),
                  ),
                ),
              ]),
            ),

            Container(
              constraints: BoxConstraints.expand(
                height:
                    Theme.of(context).textTheme.display1.fontSize * 1.1 + 300.0,
              ),
              padding: const EdgeInsets.fromLTRB(10, 15, 10, 5),
              color: Color(0xFF8e80a8),
              alignment: Alignment.center,
              child: Container(
                child: WebviewScaffold(
                  url:
                      ('https://flutter.io/'),
                ),
              ),
            )
          ]),
    );
  }
}

/*
@override
void dispose() {
  super.dispose();
  _MyHomePageState();

}
*/
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-01-08 20:52:50

一个解决方案是将"Navigator.push“更改为”Navigator.pushRemove“。这将意味着第一个屏幕不会再次出现,所以按后退按钮(至少在Android设备上)就会退出应用程序。这不完全是我想要做的,但会暂时奏效的。

如果有人能告诉我把“处置”的东西放在哪里,我还是很想知道!在此期间,我会继续努力。感谢那些在网上分享了这么多有用信息的人!

顺便提一下,这是新代码,稍微清理了一下:

导入‘WebView /Material.DAT’;ImportScreen.DAT‘;类WebView扩展StatefulWidget {@重写_WebViewState createState() => _WebViewState();}类_WebViewState扩展状态{ TextEditingController控制器=TextEditingController;FlutterWebviewPlugin flutterWebviewPlugin = FlutterWebviewPlugin();var urlString = "https://stackoverflow.com/questions/43692923/flutter-container-onpressed";launchUrl() { setState(() );();};}@重载initState() { super.initState();super.initState(){ print(wvs.type);} //这部分没有工作@重写super.dispose(){ _WebViewState();//关闭这里的super.dispose();} @override (BuildContext上下文){返回容器(装饰:BoxDecoration(颜色:颜色(0xFF8e80a8),子列( mainAxisAlignment: MainAxisAlignment.start,mainAxisSize: MainAxisSize.min,crossAxisAlignment: CrossAxisAlignment.center,子代:新GestureDetector( onTap:() ){ Navigator.pushReplacement(上下文),MaterialPageRoute(构建器:(上下文) => SecondScreen() );},子:填充(填充: const EdgeInsets.fromLTRB(10,40,10,10),子容器:新容器(约束: BoxConstraints.expand(高度:Theme.of(上下文).textTheme.display1.fontSize* 1.1 + 40.0,),子:新Image.asset(‘lib/assets/newoldralogo1menuBuon3.png’,对齐: Alignment.topCenter,fit: BoxFit.fitWidth,),),填充(填充: const EdgeInsets.all(10.0),容器(约束条件: BoxConstraints.expand(高度:Theme.of(上下文).textTheme.display1.fontSize* 1.1 + 250.0,),子容器: WebviewScaffold( url: urlString,withZoom: false,),),) );}}

票数 4
EN

Stack Overflow用户

发布于 2020-08-18 10:24:52

当用户导航到第二个屏幕时隐藏web视图

代码语言:javascript
复制
flutterWebViewPlugin.hide();

并在用户返回时再次显示。

代码语言:javascript
复制
flutterWebViewPlugin.show();

应该解决这个问题。通过这种方式,用户可以在导航到第二屏幕后导航回第一屏幕。

记住等待Navigator.push()到第二个屏幕。

代码语言:javascript
复制
import 'package:flutter/material.dart';

import 'package:flutter_webview_plugin/flutter_webview_plugin.dart';

import 'dart:async';

import './SecondScreen.dart';

String selectedUrl = 'https://flutter.io';

void main() {
  runApp(new MyApp());
}

class MyApp extends StatelessWidget {
  final flutterWebViewPlugin = FlutterWebviewPlugin();

  @override
  Widget build(BuildContext context) {
    return new MaterialApp(
      title: 'Generated App',
      theme: new ThemeData(
        primarySwatch: Colors.purple,
        primaryColor: const Color(0xFF8e80a8),
        accentColor: const Color(0xFF8e80a8),
        canvasColor: const Color(0xFF8e80a8),
      ),
      home: new MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key}) : super(key: key);

  @override
  _MyHomePageState createState() => new _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {


  @override
  Widget build(BuildContext context) {
    return Container(
      decoration: BoxDecoration(color: Color(0xFF8e80a8)),
      child: new Column(
          mainAxisAlignment: MainAxisAlignment.start,
          mainAxisSize: MainAxisSize.min,
          crossAxisAlignment: CrossAxisAlignment.center,
          children: <Widget>[
            Padding(
              padding: const EdgeInsets.fromLTRB(10, 30, 10, 5),
              child: new Image.asset(
                'lib/assets/newoldralogo1.png',
              ),
            ),
            Container(
              constraints: BoxConstraints.expand(
                height:
                    Theme.of(context).textTheme.display1.fontSize * 1.1 + 10.0,
              ),
              child: new Stack(fit: StackFit.expand,
                  children: <Widget>[
                Container(
                  decoration: BoxDecoration(color: Color(0xFF8e80a8)),
                  child: Padding(
                    padding: const EdgeInsets.fromLTRB(10, 10, 10, 10),
                    child: Image.asset(
                      "lib/assets/newoldralogo1.png",
                      alignment: Alignment.topCenter,
                      fit: BoxFit.fitWidth,
                    ),
                  ),
                ),
                Container(
                  child: RaisedButton(
                    onPressed: () async {
                      flutterWebViewPlugin.hide();
                      await Navigator.push(
                        context,
                        MaterialPageRoute(builder: (context) => SecondScreen()),
                      );
                      flutterWebViewPlugin.show();
                    },
                    color: Color(0xFFFFFF),
                  ),
                ),
              ]),
            ),

            Container(
              constraints: BoxConstraints.expand(
                height:
                    Theme.of(context).textTheme.display1.fontSize * 1.1 + 300.0,
              ),
              padding: const EdgeInsets.fromLTRB(10, 15, 10, 5),
              color: Color(0xFF8e80a8),
              alignment: Alignment.center,
              child: Container(
                child: WebviewScaffold(
                  url:
                      ('https://flutter.io/'),
                ),
              ),
            )
          ]),
    );
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54065095

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档