如何从 StatelessWidget 中的 StatefulWidget 访问变量?

Posted

技术标签:

【中文标题】如何从 StatelessWidget 中的 StatefulWidget 访问变量?【英文标题】:How do I access an variable from a StatefulWidget inside an StatelessWidget? 【发布时间】:2021-05-16 15:26:52 【问题描述】:

如何从这个 statefulWidget 访问变量“selectedTag”:

class _AlertDialogOneState extends State<AlertDialogOne> 
  Item selectedTag;
...
  

在这个 statelessWidget 内:

class CardTile extends StatelessWidget 
  @override
  Widget build(BuildContext context) 
    return Container(...

【问题讨论】:

【参考方案1】:

将其作为参数传递,

class CardTile extends StatelessWidget 
  final Item selectedTag;// Add this
  CardTile(this.selectedTag); // Add this

  @override
  Widget build(BuildContext context) 
    return Container(...

【讨论】:

【参考方案2】:

要传递这个变量,你有多种方法:

当您使用导航器导航到此类时,将其作为构造函数传递
Navigator.push(
context,
MaterialPageRoute(builder: (context) => CardTile(selectedTag)),
);
    class CardTile extends StatelessWidget 
    Item selectedTag;
    CardTile(this.selectedTag);
    @override
    Widget build(BuildContext context) 
        return Container(...
使用像提供者这样的状态管理
    class ProviderData with ChangeNotifier 
    Item selected;

    void changeSelection(newSelect) 
    selected = newSelect;
    changeNotifier();
    

    

在你需要的任何类中调用这个:

final providerData = Provider.of<ProviderData>(context);

因此您可以使用此实例访问变量或更改它,如下所示:

final variable = providerData.selected;
providerData.changeSelection(newValue);
print(variable);

希望对您有所帮助,但我发现如果您不使用状态管理器,最好通过构造函数传递它,但是我只是给您举了一个示例来说明

【讨论】:

以上是关于如何从 StatelessWidget 中的 StatefulWidget 访问变量?的主要内容,如果未能解决你的问题,请参考以下文章

Flutter:如何将变量从 StatelessWidget 传递到 StatefulWidget

如何在 StatelessWidget 的任何函数中获取上下文?

如何在 StatelessWidget 中更改 StatefulWidget 的状态?

Flutter中StatelessWidget调用StatefulWidget的函数

调用 Statelesswidget 中的方法以获取启动画面?

StatefulWidget 和 StatelessWidget 的 Flutter 性能