Flutter错误:(Webview)Media Query.of()在不包含媒体查询的上下文中调用

时间:2019-12-04 01:02:33

标签: android flutter dart flutter-dependencies flutter-test

我是新手,所以可能会重复问这个问题。基本上我正在使用webview扑打。 版本的网络视图:webview_flutter:^ 0.3.16 我的代码是:

import 'package:flutter/material.dart';
import 'package:webview_flutter/webview_flutter.dart';
void main() => runApp(WebViewTest());

class WebViewTest extends StatefulWidget {
  @override
  State<StatefulWidget> createState() {
    return _WebViewTestState();
  }
}

class _WebViewTestState extends State<WebViewTest> {

  WebViewController _webViewController;
  // String filePath = 'files/test.html';

  String filePath = 'https://flutter.dev/';

  @override
  Widget build(BuildContext context) {

return MaterialApp(
  home: Scaffold(
  appBar: AppBar(title: Text('Webview Demo')),
  body: WebView(
    initialUrl: filePath,
    javascriptMode: JavascriptMode.unrestricted,
    onWebViewCreated: (WebViewController webViewController) {
      _webViewController = webViewController;
      //_loadHtmlFromAssets();
    },
  ),

)
);
  }
}

注意:有时它可以成功运行,但大多数情况下会出现类似我所述的错误。以及为何仅为此代码提供100MB的高容量?

  

错误是:

     

I / flutter(753):W小工具库引起的异常CA ════════════════════════════   I / flutter(753):构建WebViewTest时引发了以下断言(状态:_WebViewTestState#72524):   I / flutter(753):使用不包含MediaQuery的上下文调用MediaQuery.of()。   I / flutter(753):从传递给MediaQuery.of()的上下文开始,找不到MediaQuery祖先。   I / flutter(753):之所以会发生这种情况,是因为您没有WidgetsApp或MaterialApp小部件(这些小部件介绍了   I / flutter(753):MediaQuery),或者如果您使用的上下文来自这些小部件上方的小部件,则可能会发生这种情况。   I / flutter(753):使用的上下文是:   I / Flutter(753):Scaffold(脏,状态:ScaffoldState#58c7d(生命周期状态:已初始化,报价器:跟踪2   I / flutter(753):股票行情))
  I / flutter(753):引发异常时,这是堆栈:   I / flutter(753):#0 MediaQuery.of(package:flutter / src / widgets / media_query.dart:798:5)   I / flutter(753):#1 ScaffoldState.didChangeDependencies(package:flutter / src / material / scaffold.dart:1972:50)   I / flutter(753):#2 StatefulElement._firstBuild(package:flutter / src / widgets / framework.dart:4106:12)   I / flutter(753):#3 ComponentElement.mount(package:flutter / src / widgets / framework.dart:3936:5)

1 个答案:

答案 0 :(得分:0)

MediaQuery是一个继承的小部件,在此示例中,它采用的是WebViewTest的上下文,而不是MaterialApp。 MaterialApp必须是您的类的父级,才能为其提供上下文。 这将起作用:

import 'package:flutter/material.dart';
import 'package:webview_flutter/webview_flutter.dart';
void main() => runApp(MyApp());


class MyApp extends StatelessWidget {
  const MyApp({Key key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: WebViewTest(),
    );
  }
}

class WebViewTest extends StatefulWidget {
  @override
  State<StatefulWidget> createState() {
    return _WebViewTestState();
  }
}

class _WebViewTestState extends State<WebViewTest> {

  WebViewController _webViewController;
  // String filePath = 'files/test.html';

  String filePath = 'https://flutter.dev/';

  @override
  Widget build(BuildContext context) {

return  Scaffold(
  appBar: AppBar(title: Text('Webview Demo')),
  body: WebView(
    initialUrl: filePath,
    javascriptMode: JavascriptMode.unrestricted,
    onWebViewCreated: (WebViewController webViewController) {
      _webViewController = webViewController;
      //_loadHtmlFromAssets();
    },


)
);
  }
}

关于应用程序的大小,在调试模式下会加载用于即时(JIT)的所有必需组件,因此调试模式的大小很大,但是在创建发布模式后,将在代码示例中看到将有一个大约2.87mb的应用程序