在构建 GetX<LogoPickerController>(控制器:'LogoPickerController' 的实例,标签:null,有构建器,脏
Posted
技术标签:
【中文标题】在构建 GetX<LogoPickerController>(控制器:\'LogoPickerController\' 的实例,标签:null,有构建器,脏【英文标题】:The following message was thrown building GetX<LogoPickerController>(controller: Instance of 'LogoPickerController', tag: null, has builder, dirty在构建 GetX<LogoPickerController>(控制器:'LogoPickerController' 的实例,标签:null,有构建器,脏 【发布时间】:2021-12-28 18:49:21 【问题描述】:我正在使用 Getx。但我正面临这个问题:
══╡ 小部件库发现异常 ╞═════════════════════════════════════════════════ ══════════ 以下消息被抛出建设 GetX(控制器:的实例 'LogoPickerController',标签:null,有生成器,脏,状态: GetXState#ec9a5(控制器:实例 'LogoPickerController')): [Get] 检测到 GetX 使用不当。 您应该只对将要更新的特定小部件使用 GetX 或 Obx。 如果您看到此错误,您可能没有在 GetX/Obx 中插入任何可观察变量 或将它们插入 GetX 认为适合更新的范围之外 (例如:GetX => HeavyWidget => variableObservable)。 如果您需要更新父窗口小部件和子窗口小部件,请将每个窗口小部件包装在 Obx/GetX 中。
代码是:
Center(
child: GetX<LogoPickerController>(
init: LogoPickerController(),
builder: (controller)
if (controller.image?.value != null)
return CircleAvatar(
radius: 30,
child: ClipOval(
child: Image.file(
controller.image?.value ?? File(""),
width: 200,
height: 200,
fit: BoxFit.fill,
)),
);
else
return const EntityLogoPickerWidget();
),
),
【问题讨论】:
【参考方案1】:当我们使用反应变量时,首选使用 GetX 和 Obx。
尝试将GetX
替换为GetBuilder
。那是
Center(
child: GetBuilder<LogoPickerController>(
init: LogoPickerController(),
initState: (_) , //NOT NEEDED
builder: (controller)
if (controller.image?.value != null)
return CircleAvatar(
radius: 30,
child: ClipOval(
child: Image.file(
controller.image?.value ?? File(""),
width: 200,
height: 200,
fit: BoxFit.fill,
)),
);
else
return const EntityLogoPickerWidget();
),
),
【讨论】:
但当用户选择图像时,此小部件不会重建 UI。如果我选择图像没有任何变化,当我进行热重载时,图像会出现@Krish Bhanushali @winter 你能分享你的控制器吗? 我将控制器的值更改为不可观察,感谢您的回答很有帮助。以上是关于在构建 GetX<LogoPickerController>(控制器:'LogoPickerController' 的实例,标签:null,有构建器,脏的主要内容,如果未能解决你的问题,请参考以下文章