Flutter网页便捷视图插件web_convenient_view的使用

发布于 1周前 作者 sinazl 来自 Flutter

Flutter网页便捷视图插件web_convenient_view的使用

本插件用于简化在网页浏览器中重新加载或直接加载视图。该插件兼容所有Flutter平台,并且支持哈希或路径URL策略。

如何使用

创建数据模型

首先,我们需要创建一个模型来包含视图所需的数据。

/// 示例数据模型,任何数据都可以在这里
class DataRequiredModel {
  /// 示例数据
  final String someData;

  const DataRequiredModel({
    required this.someData,
  });
}

创建需要数据加载的视图

接下来,我们创建一个需要数据才能正确加载的视图。在这个视图中,我们使用了之前创建的数据模型。

/// 需要数据才能正确加载的视图
class DataRequiredView extends StatelessWidget {
  /// 作为便利添加,可以以其他方式输入
  static const String routeName = "/data_required_view";

  /// 加载视图所需的数据(示例数据)
  final DataRequiredModel model;

  const DataRequiredView({
    super.key,
    required this.model,
  });

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Column(
          mainAxisSize: MainAxisSize.max,
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Text(
              model.someData,
            ),
          ],
        ),
      ),
    );
  }
}

创建无需传递数据的视图

然后,我们创建一个无需传递数据即可加载的视图。这将是当DataRequiredView在网页浏览器中重新加载时返回的视图。在这个例子中,有一个按钮,当按下时会导航到DataRequiredView并传递一个DataRequiredModel对象。

/// 无需数据即可加载的首页视图
class HomeView extends StatelessWidget {
  /// 作为便利添加,可以以其他方式输入
  static const routeName = "/home_view";

  const HomeView({
    super.key,
  });

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Column(
          mainAxisSize: MainAxisSize.max,
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            /*
              按下时导航到DataRequiredView,并传递一个DataRequiredModel
            */
            ElevatedButton(
              onPressed: () {
                Navigator.pushNamed(
                  context,
                  DataRequiredView.routeName,
                  arguments: const DataRequiredModel(
                    someData: "Data from home_view. Refresh this page in the web browser Ctrl+r",
                  ),
                );
              },
              child: const Text(
                "Navigate to data_required_view",
              ),
            ),
          ],
        ),
      ),
    );
  }
}

设置MaterialApp路由

最后,我们需要设置MaterialApp的路由。请注意如何使用命名路由,并设置了主页。

void main() {
  runApp(
    MaterialApp(
      routes: {
        // 不需要任何数据即可加载的路由,注意它是主页
        HomeView.routeName: (_) => const HomeView(),
        /*
          当页面在浏览器中重新加载或直接加载时,使用WebConvenientView。
          支持哈希或路径URL策略。
          注意通用数据是DataRequiredModel,这是将传递给DataRequiredView的数据类型
        */

        // 设置路由名称,并返回一个带有DataRequiredModel通用数据的WebConvenientView
        DataRequiredView.routeName: (_) => WebConvenientView<DataRequiredModel>(
              // 设置backRoute,这是如果DataRequiredView被重新加载或直接在网页浏览器中加载时要导航到的路由。不应该需要数据来加载。
              backRoute: HomeView.routeName,

              // 加载DataRequiredView的地方,并接收其数据模型。
              // 如果重新加载或直接加载在网页浏览器中,则不会运行
              onLoaded: (model) => DataRequiredView(
                model: model,
              ),
            ),
      },

      // 一个不需要任何数据即可加载的视图
      home: const HomeView(),
    ),
  );
}

更多关于Flutter网页便捷视图插件web_convenient_view的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter网页便捷视图插件web_convenient_view的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是一个关于如何使用Flutter的web_convenient_view插件的示例代码。这个插件主要用于在Flutter的Web应用中方便地嵌入和展示网页内容。请确保你已经在pubspec.yaml文件中添加了web_convenient_view依赖。

首先,在pubspec.yaml文件中添加依赖:

dependencies:
  flutter:
    sdk: flutter
  web_convenient_view: ^最新版本号  # 请替换为实际最新版本号

然后运行flutter pub get来安装依赖。

接下来,在你的Flutter项目中,你可以这样使用web_convenient_view

import 'package:flutter/material.dart';
import 'package:web_convenient_view/web_convenient_view.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Web Convenient View Example',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: Scaffold(
        appBar: AppBar(
          title: Text('Web Convenient View Example'),
        ),
        body: Center(
          child: WebConvenientView(
            url: 'https://www.example.com', // 这里替换为你想要加载的网页URL
            width: double.infinity,
            height: 400, // 你可以根据需要调整高度
            loading: CircularProgressIndicator(), // 加载中的指示器
            errorWidget: Text('Failed to load the web page.'), // 加载失败时显示的组件
            onWebViewCreated: (WebViewController webViewController) {
              // 你可以在这里做一些额外的配置,比如注入JavaScript等
            },
            javascriptMode: JavascriptMode.unrestricted, // 允许执行JavaScript
          ),
        ),
      ),
    );
  }
}

代码解释:

  1. 导入包

    import 'package:flutter/material.dart';
    import 'package:web_convenient_view/web_convenient_view.dart';
    
  2. 定义主应用

    void main() {
      runApp(MyApp());
    }
    
  3. 创建MyApp无状态组件

    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          title: 'Flutter Web Convenient View Example',
          theme: ThemeData(
            primarySwatch: Colors.blue,
          ),
          home: Scaffold(
            appBar: AppBar(
              title: Text('Web Convenient View Example'),
            ),
            body: Center(
              child: WebConvenientView(
                url: 'https://www.example.com', // 网页URL
                width: double.infinity,
                height: 400, // 视图高度
                loading: CircularProgressIndicator(), // 加载指示器
                errorWidget: Text('Failed to load the web page.'), // 错误提示
                onWebViewCreated: (WebViewController webViewController) {
                  // WebView创建后的回调
                },
                javascriptMode: JavascriptMode.unrestricted, // JavaScript模式
              ),
            ),
          ),
        );
      }
    }
    

注意事项:

  • url:指定你想要加载的网页URL。
  • widthheight:设置WebView的宽度和高度。
  • loading:加载网页时显示的组件,这里使用了一个CircularProgressIndicator
  • errorWidget:加载网页失败时显示的组件。
  • onWebViewCreated:当WebView创建完成后的回调函数,可以用来进行一些额外的配置。
  • javascriptMode:设置是否允许执行JavaScript,这里设置为JavascriptMode.unrestricted表示允许。

这样,你就可以在Flutter的Web应用中方便地嵌入和展示网页内容了。希望这个示例代码对你有所帮助!

回到顶部