【问题标题】:Flutter: How to pass data between widgets located in different filesFlutter:如何在位于不同文件中的小部件之间传递数据
【发布时间】:2021-10-21 01:33:33
【问题描述】:

在主页中,我在 Stack ListWidget() 中有 2 个小部件,它们位于其自己的文件中,并在主页中显示项目列表。第二个小部件是 TextWidget() 女巫是容器中的文本,这个小部件在主页文件中。在 ListWidget() 我使用 ListTile 和 onTap 打开像这样的其他页面

Navigator.of(context).push(
  MaterialPageRoute(
   builder: (context) => ListItemPressed(),
  ),
);

这两个小部件都在同一个页面中使用,但 ListWidget() 在其他文件中。我想要实现的不是用 OnTap 打开新页面,而是想将 TextWidget 的文本更改为按下的列表项标题

基本上,我想在不打开任何页面的情况下从 ListWidget() 获取数据到 TextWidget。我的代码很大,所以这是我的应用程序的基本逻辑:

HomePage{
 Scaffold
  Stack
   StreamBuilder<NavOption> // Home page display widget based on NavOption, in this case ListWidget
    ListWidget() // I want data from here... widget located in lib/ListWidget.dart
   TextWidget() // ...in here, widget located in this file HomePage.dart
}

【问题讨论】:

  • @DineshNagarajan 在此示例中,他正在从一页移动到另一页。就我而言,我只想将数据从一个文件传递到另一个文件而不在页面之间移动
  • @IBlackVikingl 你能贴出这些文件的完整代码吗?
  • @kzrfaisal 完整代码会很大,我只需要知道我的问题的答案

标签: flutter dart


【解决方案1】:

以下是实现它的方法

  • 在主页中声明一个函数和一个变量。
     dataFromListWidget;
     onListItemPressed(data) {
      setState(() => dataFromListWidget = data);
     }
    
  • 将此函数作为参数传递给 ListWidget,并将变量传递给 TextWidget。
    [
      ListWidget(onListItemPressedFunc: onListItemPressed),
      TextWidget(data: dataFromListWidget )
    ]
    
    
  • 从 ListWidget 调用此函数并提供您希望在文本小部件中显示的数据。
     ListWidget({@required this.onListItemPressedFunc}) // ListWidget Contructor
     final Function onListItemPressedFunc;
     ...
     onListItemPressedFunc(data); // Call it When List Item is pressed and pass the data.
    
    

不过我建议你使用基于观察者的状态管理包,比如 getx 等,那样会变得容易得多。

【讨论】:

    猜你喜欢
    • 2019-04-22
    • 2020-10-07
    • 1970-01-01
    • 2018-08-01
    • 2021-01-31
    • 1970-01-01
    • 1970-01-01
    • 2021-01-08
    • 1970-01-01
    相关资源
    最近更新 更多