在没有 setstate 的情况下更改轮播更改的 AppBar 标题值

Posted

技术标签:

【中文标题】在没有 setstate 的情况下更改轮播更改的 AppBar 标题值【英文标题】:Change AppBar title value on carousel change without setstate 【发布时间】:2021-12-29 08:13:26 【问题描述】:

我正在开发一个类似于 whatsapps 照片库的图库应用。当我的轮播滑块更改时,我希望应用栏标题更改。我使用 setstate 进行了尝试,但是因为我在显示对话框中显示了 carouselslider,所以它不起作用,我认为这可能会导致性能问题。我在项目中使用getx,没有setstate有什么办法吗?

这是我的 AppBar 小部件

  showGeneralDialog(
                        context: context,
                        barrierDismissible: true,
                        barrierLabel: MaterialLocalizations.of(context)
                            .modalBarrierDismissLabel,
                        barrierColor: Colors.black45,
                        transitionDuration:
                            const Duration(milliseconds: 200),
                        pageBuilder: (BuildContext buildContext,
                            Animation animation,
                            Animation secondaryAnimation) 
                          return Dismissible(
                            direction: DismissDirection.vertical,
                            key: const Key('key'),
                            onDismissed: (_) => Navigator.of(context).pop(),
                            child: Scaffold(
                              appBar: AppBar(title: Text(photoSender)),

而且脚手架的主体是一个carouselsliderbuilder,所以当轮播发生变化时,我希望photoSender变量发生变化。

有什么办法吗?

【问题讨论】:

您尝试过使用Obx 小部件吗??我认为您可以使用obs 作为字符串变量,最后使用Text() 小部件包装Obx 【参考方案1】:

    photoSender 变量声明为Rx<String>

    final photoSender = Rx<String>("");
    

    Obx/GetX 包裹你的Text 小部件:

    appBar: AppBar(title: Obx(()=>Text(photoSender.value))),
    

每当您的photoSender 变量的值发生变化时,它都会自动更新您应用栏中的文本。

更新值:

photoSender.value = "John";

【讨论】:

以上是关于在没有 setstate 的情况下更改轮播更改的 AppBar 标题值的主要内容,如果未能解决你的问题,请参考以下文章

如果在不使用 seState 的情况下更改状态,是不是会发生 Re-Render?

为啥 this.setState 在我的情况下有效

使用setState更改状态

setState 更改状态但不重新渲染

不要使用 GestureDetector 中的 setstate 方法更改我的容器颜色

如何使用 Bootstrap Carousel 更改幻灯片?