我想在我的控制器中制作一个可观察的地图。但是,当我用 Obx() 包装使用可观察映射的小部件时,我收到运行时错误,显示“[Get] 已检测到 GetX 的不当使用。您应该只对特定的小部件使用 GetX 或 Obx更新一下。”
但我以为我已经使用 Obx 来更新特定的小部件。
class PaintingControllerX extends GetxController {
final gridImages = <ui.Image?>[].obs;
}
class PaintingPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
var controller = Get.put<PaintingControllerX>(PaintingControllerX());
return Scaffold(
body: Obx(() => GridWidget(controller.gridImages)), // ERROR
);
}
}
我在另一个 StackOverflow 问题(Obx 小部件抛出错误)中看到该问题是通过调用观察对象上的 value 属性解决的。但是 RxMap.value 是受保护的,我不能在这里使用它。我还注意到 RxList 上有一个 toList() 方法,但 RxMap 上没有对应的 toMap() 。
如何将 RxMap 与 Obx 一起使用?
当然,仅将其用于小部件。此外,您使用的是列表而不是地图。
//this line will be in controlller
RxList mymap = <ui.Image?>[].obs
class PaintingPage extends StatelessWidget {
PaintingPage({super.key});
PaintingControllerX controller = Get.put(PaintingControllerX());
@override
Widget build(BuildContext context) {
return Scaffold(
body: GridView.builder(
itemCount: 20, // Number of items in the grid
gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 3, // Number of columns in the grid
crossAxisSpacing: 5.0, // Spacing between columns
mainAxisSpacing: 5.0, // Spacing between rows
),
itemBuilder: (BuildContext context, int index) {
//here gridbuilder always update the total lenght of the file if
need.
return Obx(
() => Container(
color: Colors.primaries[index % Colors.primaries.length],
alignment: Alignment.center,
child: Image.network(controller.gridimage[index]),
),
);
},
),
);
}
}
尽管我现在还没有实施它。但它应该有效。如果没有,请发表评论,我会测试并一定会给您一个解决方案。快乐编码。