仅使用 Flutter 在本地环境中托管 Web 服务器

2024-02-08

是否可以使用基于 Flutter 桌面的应用程序在本地环境中托管 Flutter Web 应用程序?


在谷歌上搜索这样的解决方案可能很困难,因为它涉及许多导致类似情况的关键字(当您需要本地解决方案时需要在线托管、仅命令行解决方案等)。

经过一番挖掘后,我最终使用了shelf https://pub.dev/packages/shelf包以在本地网络上部署我自己的 Flutter Web 应用程序。我只为 Windows 开发了这个,所以我不能保证它也能在其他平台上工作。 首先要做的显然是添加shelf包在你的pubspec.yaml: 之后我的就是这样了main方法看起来像

import 'package:shelf/shelf_io.dart' as shelf_io;  
import 'package:shelf/shelf.dart' as shelf;  
import 'package:shelf_router/shelf_router.dart' as shelf_router;  

[...]  

void main() async{  

[...]    

  var secureContext = SecurityContext();  
  try {  
    //privKey and cert are the String names of the two files for the SSL connection,  
    //placed in the root directory of the flutter project or along with the .exe  file (when released)
    secureContext.usePrivateKey(privKey);  
    secureContext.useCertificateChain(cert);  
  } catch (error) {  
    logger.e("Error on init SecurityContext");  
  }
  try {  
    //this is the handler that deploys the files contained in 'webAppFolder': I just simply pasted the result of  
    //the flutter webapp building inside (the index.html file is the default one for flutter web)   
    //and put the folder in the root of the flutter project (or, again, in the same folder with the .exe file when released)
    final _staticHandler = createStaticHandler("webAppFolder", defaultDocument: 'index.html');    

    //this I kept just for a reminder on how to deploy a static page, if needed
    final _router = shelf_router.Router()  
      ..get(  
        '/time',
        (request) => shelf.Response.ok(DateTime.now().toUtc().toIso8601String()),  
      );  
  
    final cascade = shelf.Cascade()   
        .add(_staticHandler)  
        .add(_router);  
  
    try {  
      var server = await shelf_io.serve(  
        cascade.handler,  
        InternetAddress.anyIPv4,  
        mainPort,  //this is the number of the port on which the webapp is deployed (I load this from a .ini file beforehand
        securityContext: secureContext,  
      );  
      // Enable content compression  
      server.autoCompress = true;  
  
      logger.i("Serving at https://${server.address.host}:${server.port}");  
    } catch (err) {  
      logger.e("Error while serving");  
      logger.e(err.toString());  
    }  
  } catch (err) {  
    logger.e("Error while creating handler");  
    logger.e(err.toString());  
  }  
  runApp(MaterialApp(  
  [...]

这是与 Web 应用程序部署相关的部分:由于 flutter 桌面应用程序已经提供了 GUI,我用它来添加一些维护和测试实用程序来检查一切是否正常工作。
有关更多详细信息shelf,请参阅其 pub.dev 页面上的 API。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

仅使用 Flutter 在本地环境中托管 Web 服务器 的相关文章

随机推荐

  • 计算文本文件中的行数

    我正在阅读文本文件中的行 我想知道这是否是一个好方法 我必须写这个函数numberoflines来减少number of lines variable加 1 是因为在 while 循环中 对于读取的每一行 它都会向 number of li
  • E/Volley:[194] BasicNetwork.performRequest:url 出现意外响应代码 307

    我试图在我的 Android 应用程序中通过 POST 将 json obj 通过 volley 发送到 api 并捕获 json 响应 但我不断收到此错误 E Volley 194 BasicNetwork performRequest
  • JavaFX:对话框内的TableView有重复的项目

    我的问题TableView及其物品 我创建了一个小Dialog窗口显示有关我的应用程序的警告 并在Dialog我有一个TableView单击按钮后会显示警告名称以及有关警告的一些信息 我创建了一个WarningUtil class Sing
  • 生成用于设置 Apple 推送通知的 .pem 文件

    我尝试并尝试生成 pem 文件 每次从客户帐户生成证书 然后使用终端生成 pem 文件 但它没有用 谁能给出一步一步的程序吗 要为您的 iOS 应用程序启用推送通知 您需要创建 Apple 推送通知证书 pem 文件 并将其上传给我们 以便
  • 从 C# COM dll 返回 S_FALSE

    我在 IDL 中定义了一个方法 如下所示 interface IMyFunc IDispatch id 1 helpstring method GetNextFunction HRESULT GetNextFunction in out l
  • 使用javascript隐藏文本框中的光标?

    如何使用 JavaScript 在 asp net 文本框中隐藏光标 我不想在文本框中看到闪烁的东西 Please不要这样做 你会破坏用户的期望 光标在那里是有原因的 当用户键入或点击删除 退格键等时 他们想知道它将发生在哪里 如果您想编辑
  • 将现有 pdf 添加到 fpdf

    有没有我可以调用的函数 以便将现有的 pdf 包含在我的fpdf file 例如 pdf gt AddPage from file example pdf 类似的东西 是否可以 fpdi 就是您正在寻找的 请参阅http www setas
  • CSS滚动条样式跨浏览器[重复]

    这个问题在这里已经有答案了 如何定义跨浏览器的 CSS 滚动条样式 我测试了这段代码 它只在 IE 和 Opera 中有效 但在 Chrome Safari 和 Firefox 中失败
  • 使用动态列和列名称进行逆透视

    我正在尝试取消透视具有大量列的表 其格式为 PID UID col1 col2 col3 下面的动态 SQL 将为我提供除列名之外的几乎所有内容 目标是使用逆透视值源自的列的名称填充 ID 字段 Build list of cols we
  • 在datagridview中如何使用复选框作为单选按钮?

    IDE Visual Studio c Winforms 应用程序 我投入了大约12个小时 但没有取得成功 作为DataGridView不提供单选按钮类型的单元格 所以我尝试使用复选框单元格作为单选按钮功能 即我只想选中一列中的一个复选框
  • 在 C# 中使用 XDocument 创建 XML 文件

    我有一个List
  • 无需登录即可在系统启动时启动应用程序

    我们有一个新的服务器正在运行 并且我们有一些新的程序执行导入例程 到目前为止一切顺利 但是有一个程序被放入自动启动文件夹 So 在管理员登录之前它不会运行 如果我们注销它就会停止 我想将其放入一个单独的会话中 这样它就可以在没有任何交互的情
  • 在弹性搜索中索引包含数学表达式的文档的最佳方法是什么?

    我试图解决的问题是我有一堆与数学表达式 公式相关的文档 我想通过公式或表达式搜索文档 到目前为止 根据我的研究 我正在考虑将数学表达式转换为乳胶格式并作为字符串存储在数据库中 弹性搜索 通过这种方法 我可以搜索带有乳胶字符串的文档吗 a2
  • 想知道 libusb_bulk_transfer 错误代码

    libusb open device deviceHandle 返回 0 but libusb bulk transfer deviceHandle 0x81 data1 512 len 0 返回 5 所以我尝试找出错误code 5 usi
  • IE替代window.stop()(取消所有挂起的请求)

    我正在寻找 IE 的 window stop 的替代方案 我尝试过 document execCommand Stop 但它似乎不起作用 我试图取消从我正在使用的 ASP 用户控件中调用的 XMLHttpRequest 我无法使用 jQue
  • 致命:无法访问私钥文件“/etc/ssl/private/ssl-cert-snakeoil.key”:权限被拒绝

    我相信我最终混淆了 etc ssl 目录树的权限 因为最后一次修改是在 11 月 18 日以及我无法让 PostgreSQL 工作的第二天进行的 当我输入时 sudo 服务 postgresql 启动 I get 致命 无法访问私钥文件 e
  • Android:在嵌套在垂直线性布局中的水平线性布局中的文本视图之间放置垂直分隔线/分隔线?

    对于 android 内容视图 我有一个垂直线性布局 其中有一些文本视图 其中有一些线来划分和分隔垂直元素 这工作正常 xml 如下
  • celerybeat相对于cron有什么优势?

    我看到很多人更喜欢 celerybeat 而不是 cron jobs 来执行定期任务 我看到了 celerybeat 的文档 并且可以看到有关如何使用它的信息 但没有看到为什么 或何时 我应该更喜欢它而不是 cronjobs http do
  • html 中如何使用 iframe?

    什么是 iframe 它在 html 中如何使用 iframe 是一个允许您在 HTML 页面中嵌入外部内容的对象 您可以使用它来显示其他网页 文档 例如 PDF 等 尽管对于复杂的媒体类型 您可能想尝试使用对象标签 您可以将 iframe
  • 仅使用 Flutter 在本地环境中托管 Web 服务器

    是否可以使用基于 Flutter 桌面的应用程序在本地环境中托管 Flutter Web 应用程序 在谷歌上搜索这样的解决方案可能很困难 因为它涉及许多导致类似情况的关键字 当您需要本地解决方案时需要在线托管 仅命令行解决方案等 经过一番挖