草庐IT

Flutter Stateful Widget 状态未初始化

我正在使用Flutter制作命令和控制应用程序,但遇到了一个奇怪的问题。该应用程序的主状态页面显示了一个有状态小部件列表,每个小部件都拥有一个WebSocket连接,该连接从连接的机器人平台流式传输状态数据。当机器人本身被硬编码时,这很有效。但是现在我动态添加它们(通过条形码扫描),只有第一个小部件显示状态。使用调试器的进一步调查表明,这是由于仅为列表中的第一个小部件创建状态。随后添加的小部件已成功构建,但没有获得状态。这意味着除了添加的第一个小部件之外,不会调用createState。我检查了小部件本身确实被添加到列表中,并且它们每个都有唯一的哈希码。此外,IOWebSocketCh

dart - 如何在 Widget 构建方法中调用异步属性

我是Flutter和Dart的新手,我正在尝试构建一个在屏幕上显示设备信息的Flutter应用程序。为此,我试图从这里使用这个库:'device_info':https://pub.dartlang.org/packages/device_info#-readme-tab-在MyApp类的“build”方法中,我试图从“device_info”包中实例化对象并调用一个恰好是异步属性的属性。由于默认的构建方法不是异步的,那么如何在构建方法中调用这个属性呢?以下是我的代码:classMyAppextendsStatelessWidget{@overrideWidgetbuild(Build

Flutter Stateful Widget 重新创建 State

我正在开发一个flutter应用程序,并发现状态管理出现意外行为。我创建了一个示例应用来重现该行为,您可以在下面找到代码和日志输出。该应用程序包含一个简单的ListView,其中包含10个有状态的容器(文本+装饰)。当我向下滚动时,每个容器及其容器状态将按预期创建一次。当我再次向上滚动时,Flutter会为再次出现在显示屏上的每个容器小部件重新创建每个状态(但不是容器小部件)。我希望flutter会在不重新创建整个状态对象的情况下检索先前的状态。我在这里做错了吗?示例代码:classMyHomePageextendsStatefulWidget{MyHomePage({Keykey})

dart - 在 flutter 中使用其 GlobalKey 获取 Widget 的高度

我正在努力使用其GlobalKey获取Widget的高度。在呈现布局后调用获取高度的函数以确保上下文可用,但key.currentState和key.currentContext仍然返回null。import'package:flutter/material.dart';classTestPageextendsStatefulWidget{@overrideStatecreateState()=>newTestPageState();}classTestPageStateextendsState{finalTestWidgettestWidget=newTestWidget();@ov

widget - 如何在 Flutter 中禁用默认的 Widget 飞溅效果?

如何禁用Widget上的默认飞溅/波纹/墨迹效果?有时效果是不需要的,例如在以下TextField情况下: 最佳答案 根据上面@hunter的建议,我发现通过将我的主题中的highlightColor和splashColor都设置为Colors.transparent可以消除波纹。我确实担心设置highlightColor可能会产生一些链式react,但我还没有注意到。编辑:虽然我最初的答案有很多赞成票,但我学得越多,我就越意识到这确实不是正确的方法。正如下面一些人所指出的,更好的解决方案是使用splashFactory。例如,下面

flutter - 从 Widget 或 Canvas 创建原始图像

我的最终目标是能够通过传递原始图像数据或将图像保存到磁盘以供原生android/ios服务共享来共享动态图像。如何将flutter中的Widget或Canvas转换为原始图像数据(如byte[])? 最佳答案 现在有对此的支持。您可以使用RenderRepaintBoundry或OffsetLayer或Scene。它们都有一个toImage。这是RenderRepaintBoundry.toImage()的链接classPngHomeextendsStatefulWidget{constPngHome({super.key});@o

widget - Flutter 进度指示器大小

这个问题在这里已经有了答案:HowtosetsizetoCircularProgressIndicator?(13个回答)关闭3年前。我想知道是否有办法改变线性和圆形进度条的宽度/长度/高度。我正在尝试使用它制作一个XP栏,但我不确定这是否可能。此外,我知道这些值仅通过0.0和1.0,但我也认为我有可能(不确定)能够制定一个仍然可以工作的公式。 最佳答案 进度指示器将填充其父布局小部件,例如SizedBox(height:300.0,width:300.0,child:CircularProgressIndicator(valueC

dart - Flutter:如何在 Widget 启动时读取首选项?

我一直在尝试阅读Widget启动时的首选项,但无法找到解决方案。我希望在TextField中显示用户名(他们可以更改)并将其存储在首选项中,以便在他们返回页面时立即显示。class_MyHomePageStateextendsState{TextEditingController_controller;::FuturestoreName(Stringname)async{SharedPreferencesprefs=awaitSharedPreferences.getInstance();prefs.setString("name",name);}@overrideinitState(

dart - 在 Flutter 中向父 Widget 发送数据

我正在尝试将文本从子小部件设置为父小部件。但是文本没有反射(reflect)在父小部件中。也尝试使用setState()但仍然无法获得预期的结果。以下是我的代码:voidmain()=>runApp(newTestApp());classTestAppextendsStatefulWidget{@override_TestStatecreateState()=>new_TestState();}class_TestStateextendsState{Stringabc="";@overrideWidgetbuild(BuildContextcontext){returnnewMater

flutter - Scoped Model、BLoC 模式、StreamBuilder 和 Inherited Widget(或 Model)我应该选择哪一个,为什么?

我想我现在至少对如何使用BLoC、StreamBuilder有了一个模糊的概念和我的应用中的InheritedWidget(或Model)(没什么特别的,但对我来说这需要时间),但是使用ScopedModel我有一种生存危机:我觉得他们大多可以做同样的事情,或者至少我可以用他们中的任何一个取得相同的明显结果,但我没有能力理解何时和为什么一个比另一个好。 最佳答案 范围模型与Bloc简而言之:如果您有小型应用程序,请使用范围模型,因为bloc往往会使它复杂化,如果您有大型应用程序,请使用bloc。详细解释见这篇文章:blocvssco