首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何仅用Getx重新生成已更改的内容?

如何仅用Getx重新生成已更改的内容?
EN

Stack Overflow用户
提问于 2022-08-16 00:37:28
回答 2查看 180关注 0票数 0

我有一个地图(使用颤振地图),它显示了用户可以启用或禁用的一些层。为此,我有两个按钮来禁用和启用这些层,并使用getX控制器控制它们的状态。

代码语言:javascript
运行
复制
  RxBool radar = false.obs;
  RxBool satelite = false.obs;

我希望当用户单击其中一个按钮时,与其相关的层将激活或禁用。然而,到目前为止,我希望当他激活radas层时,另一层将保持不变,反之亦然。正在发生的情况是,当用户激活/取消激活一个层时,map组件重新呈现并最终导致另一层重新加载其内容。

代码语言:javascript
运行
复制
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",
                    ),
                  ),
              ],
            );
          },
        ),
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-08-16 06:52:40

显然,这是因为您已经将GetX给了整个FlutterMap

MenuController创建一个控制器

代码语言:javascript
运行
复制
var _controller = Get.put(MenuController());

代码语言:javascript
运行
复制
 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",
                      ),
                    ),
                  ),
                ),
              ),
            ]),
票数 1
EN

Stack Overflow用户

发布于 2022-08-16 06:25:50

你可以这样做:

代码语言:javascript
运行
复制
var _controller = MenuController();

在构建函数中,假设您想更新一个小部件运行时,您可以这样做,

代码语言:javascript
运行
复制
                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()包装小部件。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73367660

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档