首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Flutter -如何在WebViewScaffold中加载本地HTML文件?

Flutter -如何在WebViewScaffold中加载本地HTML文件?
EN

Stack Overflow用户
提问于 2020-07-02 22:53:55
回答 1查看 584关注 0票数 0

我试图在我的WebViewScaffold中加载一个本地的超文本标记语言文件,但是我没有插件webview_flutter提供的onWebViewCreated回调函数。我不能使用该依赖项,因为我想访问webview_flutter不提供的webview回调的状态侦听器。谁能告诉我如何加载本地文件?这是我目前的实现-

代码语言:javascript
复制
   final Set<JavascriptChannel> jsChannels = [
      JavascriptChannel(
          name: 'Print',
          onMessageReceived: (JavascriptMessage message) {
            print(message.message);
          }),
    ].toSet();
    
    void main() {
      WidgetsFlutterBinding.ensureInitialized();
      runApp(MyApp());
    }
    
    class MyApp extends StatelessWidget {
      final flutterWebViewPlugin = FlutterWebviewPlugin();
    
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          title: 'Flutter WebView Demo',
          theme: ThemeData(
            primarySwatch: Colors.blue,
          ),
          routes: {
            '/': (_) => const MyHomePage(),
            '/widget': (_) {
              return WebviewScaffold(
                url: selectedUrl,  // How to load a local file here?
                javascriptChannels: jsChannels,
                mediaPlaybackRequiresUserGesture: false,
                appBar: AppBar(
                  title: const Text('Widget WebView'),
                ),
                withZoom: true,
                withLocalStorage: true,
                hidden: true,
                initialChild: Container(
                  color: Colors.redAccent,
                  child: const Center(
                    child: Text('Waiting.....'),
                  ),
                ),
            },
          },
        );
      }
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-03 03:15:17

您可以从用户的手机加载本地HTML文件,如下所示:

代码语言:javascript
复制
...
url: Uri.dataFromString(
    File('filePath').readAsStringSync(),
    mimeType: 'text/html',
).toString(),
...

如果你想从你的应用程序包中打开一个html文件(在你的assets文件夹中的一个html文件),你可以这样做:

代码语言:javascript
复制
...
url: Uri.dataFromString(
    await rootBundle.loadString('assets/index.html'),
    mimeType: 'text/html',
).toString(),
...

注:您必须像声明任何其它资产一样,在pubspec.yaml assets部分中声明html文件。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62699155

复制
相关文章

相似问题

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