我是新手,所以可能会重复问这个问题。基本上我正在使用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)
答案 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的应用程序