对此答案的一些评论表明,可以捕获小部件的每个像素,即使它部分位于屏幕外。这个答案中的评论表明相反的观点。我一直无法弄清楚,我今天才开始搞乱它。这是我到目前为止的代码:
RenderRepaintBoundary boundary = globalKey.currentContext.findRenderObject();
ui.Image image = await boundary.toImage();
ByteData byteData = await image.toByteData(format: ui.ImageByteFormat.png);
Uint8List pngBytes = byteData.buffer.asUint8List();
Run Code Online (Sandbox Code Playgroud)
有人知道如何修改它以便捕获完整的小部件吗?或者这仅适用于屏幕上的小部件部分?
FWIW,在将这个问题标记为重复的类似问题中提供的答案被自我描述为故意破坏颤动为优化所做的事情,并且仅在最坏的情况下。我正在寻找一个不需要做两年内就会崩溃的疯狂事情的答案。
我有一个没有公共初始化程序或实例的类,它将自身的实例传递给另一个类中的闭包。它通过其他类的镜像来做到这一点。当我从闭包内访问该实例时,出现错误EXC_BAD_ACCESS,但传递给闭包的其他参数显然可以访问,并且不会导致错误的访问错误。我不知道为什么。请参阅下面的代码以在新项目或游乐场中进行复制。
我一直在试图找出一种方法来实现特定于类的访问控制,其中多个特定类可以单独访问另一个包含要在它们之间共享的变量和函数的类。所有其他类都没有这样的访问权限。有点像静态类或单例模式,但具有特定的、以类命名的访问控制。
我以为我有一些东西可以在纯 swift 中实际工作(这对我来说很好,因为我不了解 Objective-C,并且大约 16 个月前才开始使用 swift。)它是以一种几乎反 swift 的方式完成的,所以请耐心听我说——我的目标是从功能性的东西开始,然后将其推向优雅和美丽。
尽管我相当有信心它应该一切正常,但我EXC_BAD_ACCESS在一个非常意想不到的地方遇到了错误。
除非您在其“可以”列表中,否则不允许您访问“特定于类的私有”类的实例,我们可以将其称为“受限制”类。
允许访问 Restricted 类的类我们可以称为访问器类。
程序员必须告诉 Restricted 类从访问器调用函数,并通过将 Restricted 类的实例作为参数传递给该函数来“放入”该实例。您可以通过传入要调用的函数的名称、要调用该函数的 Accessor 类的实例以及该函数除了 Restricted 类实例之外还需要的任何参数来完成此操作。
我可以在 Restricted 类中进行巨大的切换,每种情况都正确调用每个 Accessor 类上指示的每个函数...但是为了避免过多的开销/设置,我有要调用的函数的名称Accessor 类作为字符串传入,并通过镜像进行访问。由于镜像只反映属性而不反映函数,因此函数必须是带有指定闭包的属性,而不是传统的函数。
我们可以将这些闭包称为 DropClosures,因为它们的目的是将共享的 Restricted 类放入其中。事实上,我们可以将整个模式称为“DropClosure 模式”。(或者也许是反模式,我知道这有点可怕。)
Restricted 类的“共享”实例的属性在内部存储为私有静态字典(基本上为 json)。为了生成自身的实际实例,Restricted 类使用接受该字典作为参数的私有初始值设定项。在 DropClosure 使用所述初始化实例运行后,Restricted 类使用该实例的 Mirror 将任何更改存储回“共享”字典中,并且该实例将超出范围,除非对其进行引用。因此,在每个 DropClosure 完成其运行之后,传递给它的实例作为类的“共享”方面的表示或多或少是无用的,这是故意的。
我这样做只是因为没有办法要求所有对某个弱引用的引用也都是弱的。我不希望有权访问弱引用的类为同一实例分配强引用并将其保留在内存中,这会允许实例在其访问范围之外共享,从而破坏访问控制目标。由于我无法在闭包完成后强制实例过期,因此下一个最好的办法是通过在闭包完成后使对象不再连接到共享源来消除这样做的动机。
这一切理论上都是有效的,并且会编译,并且在运行时不会抛出任何快速异常。
Accessor(或任何具有 Accessor 实例的类)调用 RestrictedClass.run(),运行代码验证 Accessor 实例,在该实例中查找 DropClosure,并将 Restricted 类的实例传递给该闭包。
然而,每当我尝试从 DropClosure 中访问该实例时,它都会给我带来前面提到的错误访问错误,似乎是在 C 或 Objective-C 级别上。
据我所知,此时该实例应该是可以访问的,并且正在使用的任何变量都不应该超出范围。
此时我完全在吐痰 - 是否有可能后台有某些东西阻止没有公共初始化器的类通过镜像传递?这是否与将其传递到从该镜像调用的闭包中有关?是否存在某种隐藏的弱引用使实例获得 ARC?
请注意,我尝试丢弃“弱”包装器对象,只将 Restricted …
我的 Swift 应用程序从在线 API 以 JSON 形式下载 3 个数据库,然后将 JSON 对象转换为 CoreData 对象,因此该应用程序可以在互联网访问之外运行。
我有一个实体客户端,它与地址类型的实体有 toMany 关系。地址与实体客户端具有一对一的关系。
客户 <-->> 地址
客户端到地址关系具有级联删除规则,地址到客户端关系具有无效删除规则。
客户端对 id 属性有唯一性约束,并且上下文始终使用 NSMergePolicyType.overwriteMergePolicyType。
当实例化一个新的 Client NSManagedObject 时,保存上下文,并找到具有相同 ID 的 Client,新的 Client 会覆盖旧的 Client,但有一个很大的警告 - 由于某种未知的原因,旧的 Address 对象仍然存在,现在链接到新客户。这会在每次重新加载缓存/数据库时生成每个地址的新副本。
我有多个具有像这样的关系和唯一性的实体,它们会遇到相同的结果 - 多个对象实例的重复。
对于像 Address 这样的对象,没有一个属性可以封装容器中所有其他 Address 对象之间的唯一性。它必须是所有属性(地址 1、地址 2、城市、州、邮政编码等)的总和,并根据另一个地址的所有属性的总和检查唯一性。所以我不确定如何通过唯一性约束来实现这一点 - 据我所知,唯一性约束不能用 if 逻辑来扩展。
另一个解决方案是更改策略的合并行为,或创建自定义合并策略,以确保它在用新对象替换之前实际删除旧对象(级联到多对多关系对象)。
我对 CoreData 或 Objective-c 不太熟悉,无法跟踪迄今为止我在该主题上找到的任何内容。
有没有人对如何 A. 扩展唯一性约束功能、B. 定义合并策略行为或 C. 以其他方式防止上述地址对象重复有建议?
编辑:
我怀疑我对唯一性约束的假设是错误的 - 请参阅我关于它的单独问题
我正在将一个非常简单的标签打印应用程序转换为FlutterSwift。该应用程序的一个主要组件是本地缓存的数据库,用于离线访问产品。
虽然我可以在主线程上下载并缓存所有 12,000 多个产品,但对于如此繁重的操作来说,这是一个非常非常糟糕的解决方案,我真的很想避免这种情况,除非作为最后的手段。即使作为最后的手段,如果后台线程无法完成诸如将在线数据缓存到本地数据库等基本任务,我也很难说服雇主让我从 Swift 迁移到 Flutter。
因此,我一直在探索隔离。在此过程中,每当我
"'Window_sendPlatformMessage' (4 arguments) cannot be found"尝试在.
现在我在github和stackoverflow上读到Isolates 不支持使用插件(可能是包?),除非以一种奇怪的解决方法。我尝试过一个插件,当我尝试使用它时,它只会使我的应用程序崩溃,并出现非常神秘的堆栈跟踪,因此看起来解决方法是唯一的方法。Isolate
我大约一周前才开始使用 flutter 进行构建,大约两天前才开始使用 Isolates,所以目前我对一切的基本了解还很肤浅。在 flutter 存储库上,有一条评论似乎概述了插件问题的解决方法,我希望它允许我使用path_provider和sqflite缓存从 Web API 获取的数据。
更有经验的 Flutter 开发人员能否为我将这个解释分解为婴儿咬伤?
正如下面的答案中所述,sqflite它已经是异步的,并且显然在与主线程不同的线程上运行,因此看起来我的具体情况将通过使用计算来解决我的 dart-pure API 调用以获取 JSON 数据并使用常规sqflite用于存储。尽管如此,仍然需要一个关于不稳定的隔离解决方法的初学者指南,所以我将这个问题留待解决。
我有一个带有设置为 BLOB 数据类型的唯一键之外的所有列的表的 sqflite 数据库。目的是存储为二进制数据。我对 dart 和 flutter 很陌生,所以我尽可能地保持简单。我有int, double, String, List<String>,Map<String:String>和DateTime数据进入这些列。我使用的是 .insert() 函数,而不是 .rawInsert() 函数。
在我的TEST 应用程序中,string 或 int 作为 BLOB 数据类型进入表中没有任何问题。我使用完全相同的代码来插入,只是不同列的不同对象。在我为生产构建的应用程序中,它有更大、更长的字符串(如 base 64 中的图像)和更大的整数,我收到错误。
奇怪的是,我有类型检查代码,它将我从我的服务器获取的所有整数数据转换为实际的整数数据......除了整数之外,整数不可能是任何东西。每个值都经过一个只能抛出或返回整数的函数。
那么数据库如何获取它试图转换为整数的字符串?
我不是在寻求解决方案,而是我应该采取的其他故障排除步骤,但由于大脑疲劳或缺乏经验,我可能会遗漏这些步骤。我遇到了各种各样的障碍。
这是引发异常的堆栈跟踪:
I/flutter ( 6502): #0 wrapDatabaseException (package:sqflite/src/exception_impl.dart:11:7)
I/flutter ( 6502): <asynchronous suspension>
I/flutter ( 6502): #1 SqfliteDatabaseFactoryImpl.wrapDatabaseException (package:sqflite/src/factory_impl.dart:29:7)
I/flutter ( 6502): #2 _SqfliteDatabaseBase&Object&SqfliteDatabaseMixin.safeInvokeMethod (package:sqflite/src/database_mixin.dart:183:15)
I/flutter ( 6502): #3 _SqfliteDatabaseBase&Object&SqfliteDatabaseMixin.txnRawInsert.<anonymous closure> (package:sqflite/src/database_mixin.dart:340:14)
I/flutter ( 6502): #4 _SqfliteDatabaseBase&Object&SqfliteDatabaseMixin.txnSynchronized.<anonymous closure> (package:sqflite/src/database_mixin.dart:290:22)
I/flutter ( …Run Code Online (Sandbox Code Playgroud)