我有一个地图(使用颤振地图),它显示了用户可以启用或禁用的一些层。为此,我有两个按钮来禁用和启用这些层,并使用getX控制器控制它们的状态。
RxBool radar = false.obs;
RxBool satelite = false.obs;
我希望当用户单击其中一个按钮时,与其相关的层将激活或禁用。然而,到目前为止,我希望当他激活radas层时,另一层将保持不变,反之亦然。正在发生的情况是,当用户激活/取消激活一个层时,map组件重新呈现并最终导致另一层重新加载其内容。
GetX<MenuController>(
init: MenuController(),
builder: (menuController) {
return FlutterMap(
options: MapOptions(),
layers: [
if (menuController.radar.value) //Handle True or false
TileLayerOptions(
wmsOptions: WMSTileLayerOptions(
baseUrl: "MyUrlLocales",
),
),
if (menuController.satelite.value) //Handle True or false
TileLayerOptions(
wmsOptions: WMSTileLayerOptions(
baseUrl: "MyUrlCars",
),
),
],
);
},
),
发布于 2022-08-16 06:52:40
显然,这是因为您已经将GetX给了整个FlutterMap
为MenuController
创建一个控制器
var _controller = Get.put(MenuController());
和
FlutterMap(options: MapOptions(), children: [
Obx(
() => Visibility(
visible: _menuController.radar.value,
child: TileLayerWidget(
options: TileLayerOptions(
wmsOptions: WMSTileLayerOptions(
baseUrl: "MyUrlLocales",
),
),
),
),
),
Obx(
() => Visibility(
visible: menuController.satelite.value,
child: TileLayerWidget(
options: TileLayerOptions(
wmsOptions: WMSTileLayerOptions(
baseUrl: "MyUrlCars",
),
),
),
),
),
]),
发布于 2022-08-16 06:25:50
你可以这样做:
var _controller = MenuController();
在构建函数中,假设您想更新一个小部件运行时,您可以这样做,
FlutterMap(
options: MapOptions(),
layers: [
if (menuController.radar.value) //Handle True or false
Obx(()=> TileLayerOptions(
wmsOptions: WMSTileLayerOptions(
baseUrl: "MyUrlLocales",
),
)),
if (menuController.satelite.value) //Handle True or false
TileLayerOptions(
wmsOptions: WMSTileLayerOptions(
baseUrl: "MyUrlCars",
),
),
],
)
因此,您需要用要更新运行时的Obx()包装小部件。
https://stackoverflow.com/questions/73367660
复制相似问题