如何让在 MacOS 上运行的 Flutter 项目成功使用 Firestore?

2024-03-26

我有一个简单的 Flutter 项目。它所做的只是连接到 Firestore 集合、提取一些文档并显示它们。这在 iOS 上运行良好。但是,当我尝试在 macOS 中运行它时,我无法检索文档。我没有看到任何例外,只是没有成功。

我从最初的默认项目中唯一改变的是构建方法之一(如下),并导入'package:cloud_firestore/cloud_firestore.dart'.

我的构建方法:

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: StreamBuilder(
        stream: Firestore.instance.collection('mycollection').snapshots(),
        builder: (context, snapshot) {
          if (!snapshot.hasData) return const Text('Loading');
          return ListView.builder(
              itemExtent: 80,
              itemCount: snapshot.data.documents.length,
              itemBuilder: (context, index) => ListTile(
                      title: Row(
                    children: [
                      Expanded(
                        child:
                            Text(snapshot.data.documents[index].data['title']),
                      )
                    ],
                  )));
        },
      ),

      floatingActionButton: FloatingActionButton(
        onPressed: _incrementCounter,
        tooltip: 'Increment',
        child: Icon(Icons.add),
      ), // This trailing comma makes auto-formatting nicer for build methods.
    );
  }

通过阅读,Firebase 似乎并不完全支持 macOS。也就是说,人们似乎已经能够让它发挥作用——例如,Swift macOS Firebase https://stackoverflow.com/questions/59805273/swift-macos-firebase。我还看到也许我应该使用FirebaseCore吊舱而不是Firebase/Core所见吊舱here https://github.com/firebase/firebase-ios-sdk/issues/1757。当我尝试手动添加FirebaseCorepod,看来我还有Firebase/Corepod,我不明白如何pubspec/pods机制还不足以将其拉出来。

更多背景:

▶ flutter doctor
Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel master, 1.21.0-1.0.pre, on Mac OS X 10.15.5 19F101, locale en-US)
[✗] Android toolchain - develop for Android devices
    ✗ Unable to locate Android SDK.
      Install Android Studio from: https://developer.android.com/studio/index.html
      On first launch it will assist you in installing the Android SDK components.
      (or visit https://flutter.dev/docs/get-started/install/macos#android-setup for detailed instructions).
      If the Android SDK has been installed to a custom location, set ANDROID_SDK_ROOT to that location.
      You may also want to add it to your PATH environment variable.


[✓] Xcode - develop for iOS and macOS (Xcode 11.6)
[✓] Chrome - develop for the web
[!] Android Studio (not installed)
[✓] VS Code (version 1.47.0)
[✓] Connected device (4 available)

我的应用程序处于应用程序沙盒模式,并且没有适当的权利。我可以用两种不同的方式解决这个问题:

  1. Add the com.apple.security.network.client对两个权利文件的权利(DebugProfile.entitlements and Release.entitlements,均在macos/Runner。如果我希望能够在 App Store 中发布我的应用程序,这是首选选项。

  2. 我可以通过设置来关闭应用程序沙盒模式com.apple.security.app-sandbox再次在相同的权利文件中将权利设置为 false。

在我的案例中,无法发出网络请求的问题被掩盖了,因为如果无法到达云端,Firestore 客户端默认使用本地缓存。因此,就我而言,本地缓存没有数据,我得到的是空响应而不是错误。

See https://flutter.dev/desktop#entitlements-and-the-app-sandbox https://flutter.dev/desktop#entitlements-and-the-app-sandbox了解更多信息。

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

如何让在 MacOS 上运行的 Flutter 项目成功使用 Firestore? 的相关文章

随机推荐

  • 在jsp页面中显示jfreechart

    我想显示一个jfreechartjsp 页面中的图表 我写的代码如下 img src chart jpg 哪里的createCategoryChart 方法创建所需的 jpg 它存储在 eclipse 文件夹中 我没有在文件名中添加任何路径
  • 强制 UIView/UIVIewController 方向

    我们正在编写一个专门处于横向模式的应用程序 我们对根视图使用变换将其旋转到 LandscapeRight 然后该视图加载的每个视图都共享坐标系 这一切都很好 除了我们的视图之一有一个由视图控制器加载的 UIWebView 对象 我们尝试查看
  • 如何将shadershop公式转换成glsl

    我最近一直在学习着色器的一些基础知识 并且想出了一个很棒的视觉工具 着色器商店 http www cdglabs org Shadershop 但我无法将我在此站点中创建的公式转换为 glsl 一个简单的例子 我在此网站中创建了一个公式 我
  • data.table 相当于 tidyr 中的complete/fill

    我有以下数据 library tidyr library dplyr gt gt Attaching package dplyr gt The following objects are masked from package stats
  • Android-状态栏通知

    我是安卓新手 我现在想知道如何在主页中创建状态通知栏 谁能帮我一些代码 提前致谢 notificationManager NotificationManager context getSystemService Context NOTIFI
  • JTable 单元格中的图像相差一个像素?

    因此 我现在可以将图像加载到 JTable 的单元格中 但由于某种原因 图形全部向右移动了一个像素 使我能够看到 JTable 的背景 有任何想法吗 抱歉 如果我的格式已关闭 仍然没有完全习惯这种标记 public static void
  • 使用 php cUrl 发送会话变量

    我正在尝试在我的应用程序内的脚本之间发送数据 问题是会话 ID 没有响应 脚本1是
  • 使用 bash 自动化点文件

    我想创建自己的自动点文件文件夹 我将使用 git 对我的点文件使用版本控制 但这与问题无关 我想要的只是符号链接中的所有文件和文件夹 dotfiles到我的主文件夹 由于我对 bash 一点都不擅长 所以我无法做到这一点 请在这件事上给予我
  • ravendb 结合搜索和Where

    我正在 C 中执行 raven 查询 并利用Where 和Search 扩展方法 我需要这两个功能 因为我只需要返回具有特定 Guid 字段的索引以及文本正文中存在的文本 不幸的是 Where 扩展方法似乎与 Search 扩展方法不兼容
  • Clojure 宏:根据条件将过滤后的映射和数量传递给其他宏

    defmacro action1 prn action1 start etype1 defmacro block bindings body let mapcat fn k v if symbol k k symbol name k v c
  • Arduino - 高效地迭代 C 数组

    我有以下数组 PROGMEM prog uint16 t show hide info 4216 8900 4380 580 500 600 500 580 1620 580 500 600 500 580 500 600 480 600
  • 将满足范围内的值的行复制到sheet2

    对于 Excel VBA 我是个新手 如果满足某些条件 我有一个任务将行从工作表 1 复制到工作表 2 在sheet1中 JY列中的值以MV列结尾 我希望您能帮我编写一个宏 将包含小于 1 的值的所有行复制到sheet2 一行可能有多个 例
  • 无法使用使用Python编写的Robot Framework自定义库

    创建了一个示例 Python 脚本 Elements py 其函数如下 from robot api deco import keyword keyword join two strings def join two strings arg
  • 通过 SNMP 访问路由表

    如果我尝试查找安装了 openWRT 的 Linksys WRT54G 的路由表 我需要哪个 MIB 那应该是MIB II SNMP 对象 ID OID 为 1 3 6 1 2 1 4 21 可转换为ip ipRouteTable 这对我在
  • 按组的 SQL 计数

    我必须遵循架构 Movie mvID title rating year Director directorID firstname lastname Genre mvID genre Direct mvID directorID 我需要知
  • 错误类“HTML”未找到 - Laravel 5.4

    我收到以下错误 未找到 HTML 类 查看 C WORK Software XamppOne htdocs APOSTXUI ContractorsClubField resources views includes header blad
  • 将表格添加到 ggplot 图

    我有剂量反应数据 df lt data frame dose c 10 0 625 2 5 0 15625 0 0390625 0 0024414 0 00976562 0 00061034 10 0 625 2 5 0 15625 0 0
  • 无法删除 Android Studio 中的目录

    当我运行项目时安卓工作室2 0它显示以下错误 错误 任务 app clean 执行失败 gt 无法删除 目录 XX build outputs apk 在 android studio 终端中 转到项目根目录并使用命令 gradlew cl
  • SQL Server:将多行数据合并为一行

    我想要做的是合并几行数据 以便从 Transact SQL 或 SSIS 中显示为单行 例如 MAKE REF ID Title Surname Forename DOB Add1 Postcode D 10 MR KINGSTON NUL
  • 如何让在 MacOS 上运行的 Flutter 项目成功使用 Firestore?

    我有一个简单的 Flutter 项目 它所做的只是连接到 Firestore 集合 提取一些文档并显示它们 这在 iOS 上运行良好 但是 当我尝试在 macOS 中运行它时 我无法检索文档 我没有看到任何例外 只是没有成功 我从最初的默认