Flutter应用展示插件shelf_flutter_app的使用

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

Flutter应用展示插件shelf_flutter_app的使用

快速开始

首先,在你的项目中运行 dart pub add shelf_flutter_app。然后你可以按照以下步骤来设置。

Shelf 使用示例

import 'package:shelf_flutter_app/shelf_flutter_app.dart';

// 创建一个RunApp实例
final staticApp = RunApp();

// 启动服务器并绑定到 localhost 的 8080 端口
var server = await shelf_io.serve(staticApp.handler, 'localhost', 8080);

Dart Frog 使用示例

import 'package:shelf_flutter_app/shelf_flutter_app.dart';

// 定义一个中间件
Handler middleware(Handler handler) {
  // 创建一个RunApp实例
  final staticApp = RunApp();
  
  // 返回带有RunApp中间件的处理程序
  return handler.use(
    fromShelfHandler(staticApp.handler),
  );
}

RunApp 构造函数的完整示例

final staticApp = RunApp(
  runAppProperties: RunAppProperties(
    loggerConf: LoggerConf(
      logRequest: true,
      customLogger: (String msg, bool isError) {
        // 自定义日志记录器
        if (isError) {
          print('[ERROR] $msg');
        } else {
          print(msg);
        }
      },
    ),
    staticConf: const StaticConf(
      defaultDocument: 'index.html',
      fileSystemPath: 'app',
      onNotFoundUseDefaultDocumentMiddleware: true,
    ),
  ),
);

你可能需要禁用默认的 notfoundMiddleware,以避免破坏其他路由,并在后面添加它。

作为Dart Frog中间件的示例

final cascadeHandler = Cascade()
    .add(
    fromShelfHandler(
        staticApp.handler,
    ),
    )
    .add(handler)
    .handler
    .use(
    fromShelfMiddleware(
        staticApp.flutterAppOnNotFoundResponseMiddleware(),
    ),
    );

更多关于Flutter应用展示插件shelf_flutter_app的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter应用展示插件shelf_flutter_app的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是一个关于如何在Flutter应用中展示插件shelf_flutter_app的示例代码。shelf_flutter_app通常用于将Flutter视图嵌入到基于Dart的Shelf服务器中,从而实现Web和桌面应用的集成。不过,需要注意的是,shelf_flutter_app本身并不是一个广泛认可的Flutter插件名称,这里我们假设它类似于一个自定义的或者假设的插件,用于演示如何将Flutter视图嵌入到一个基于Shelf的HTTP服务器中。

由于shelf_flutter_app不是一个真实存在的广泛认可的插件,我将展示一个更通用的方法,即使用shelfshelf_render(或类似机制)来服务Flutter生成的Web资源,并嵌入Flutter Web视图。

首先,确保你已经安装了必要的Dart和Flutter工具,并创建了一个Flutter项目。然后,你可以按照以下步骤操作:

  1. 创建Flutter Web项目

    flutter create my_flutter_app
    cd my_flutter_app
    flutter config --enable-web
    
  2. 生成Flutter Web资源

    构建Flutter Web应用以生成静态资源文件:

    flutter build web
    

    这将在build/web目录下生成静态文件。

  3. 创建Shelf服务器

    接下来,创建一个Dart项目来作为Shelf服务器,并服务这些Flutter Web资源。

    创建一个新的Dart文件,比如server.dart,并添加以下代码:

    import 'dart:io';
    import 'package:shelf/shelf.dart';
    import 'package:shelf_static/shelf_static.dart';
    
    void main() async {
      var handler = createStaticHandler('build/web', defaultDocument: 'index.html');
    
      var server = await shelfListenAndServe(
        'localhost',
        8080,
        handler,
      );
    
      print('Serving at http://${server.address.host}:${server.port}');
    }
    

    这里使用了shelf_static包来服务静态文件。你需要在pubspec.yaml中添加依赖:

    dependencies:
      shelf: ^1.0.0
      shelf_static: ^1.0.0
    
  4. 运行Shelf服务器

    在命令行中运行以下命令来安装依赖并启动服务器:

    dart pub get
    dart run server.dart
    

    服务器启动后,你可以在浏览器中访问http://localhost:8080来查看Flutter Web应用。

  5. (可选)嵌入Flutter Web视图到桌面应用

    如果你想要将Flutter Web视图嵌入到一个桌面应用中,比如使用Electron或类似技术,你可以通过加载本地服务器或者使用flutter_desktop_embedding(对于桌面Flutter应用)来实现。这里只展示通过加载本地服务器的方式(假设你已经有了一个桌面应用框架):

    • 在桌面应用中,使用WebView组件加载http://localhost:8080

    例如,在Electron中,你可以在main.js中添加类似以下的代码:

    const { app, BrowserWindow } = require('electron');
    let mainWindow;
    
    app.on('ready', () => {
      mainWindow = new BrowserWindow({
        width: 800,
        height: 600,
        webPreferences: {
          nodeIntegration: true,
        },
      });
    
      mainWindow.loadURL('http://localhost:8080');
    });
    
    app.on('window-all-closed', () => {
      if (process.platform !== 'darwin') {
        app.quit();
      }
    });
    
    app.on('activate', () => {
      if (mainWindow === null) {
        createWindow();
      }
    });
    

请注意,上述代码是一个简化的示例,用于说明如何将Flutter Web应用与Shelf服务器结合使用,并嵌入到桌面应用中。实际项目中可能需要更多的配置和处理,特别是关于跨域请求、安全性、性能优化等方面。

由于shelf_flutter_app不是一个真实存在的插件,上述代码提供了一个通用的方法来达到类似的效果。如果你有一个特定的shelf_flutter_app插件或库,请查阅其官方文档以获取更详细的集成指南。

回到顶部