【问题标题】:How to Set/Update State of StatefulWidget from other StatefulWidget in stack Flutter?如何从堆栈 Flutter 中的其他 StatefulWidget 设置/更新 StatefulWidget 的状态?
【发布时间】:2021-03-14 11:55:59
【问题描述】:

我正在使用类似的东西

class OpenPage extends StatefulWidget {
 @override
_OpenPageState createState() => _OpenPageState();
 }

class _OpenPageState extends State<OpenPage> {
int id= 0;

 }
@override
Widget build(BuildContext context) {
 return Stack(
  children: <Widget>[
   classOne(), //id changed here
   classTwo(), //here data depends on id

  ],
 );
}

其中 classOne 和 classTwo 是 StatefulWidget 。

当我更改 classOne 中的 id 值时,我希望它更改 classTwo,其中 classTwo 中的数据取决于 classOne 中更改的 id。 当 classOne 中的 id 改变时,我怎么能 setState classTwo 呢?

【问题讨论】:

标签: flutter


【解决方案1】:

您可以将操作 id 的功能作为 WidgetOne 的参数传递。在这个例子中 WidgetOne 和 WidgetTwo 是 StatelessWidget 但它也应该适用于 StatelessWidget

class OpenPage extends StatefulWidget {
  @override
  _OpenPage createState() => _OpenPage();
}

class _OpenPage extends State<OpenPage > {
  int id = 0;

  @override
  Widget build(BuildContext context) {
    return Stack(
      children: [
        WidgetOne(
          onPressed: () {
            setState(() {
              id++;
            });
          },
        ),
        WidgetTwo(
          id: id,
        ),
      ],
    );
  }
}

class WidgetOne extends StatelessWidget {
  final VoidCallback onPressed;

  const WidgetOne({Key key, this.onPressed}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return IconButton(
      icon: Icon(Icons.add),
      onPressed: onPressed,
    );
  }
}

class WidgetTwo extends StatelessWidget {
  final int id;
  const WidgetTwo({Key key, this.id}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Text(id.toString());
  }
}

【讨论】:

    猜你喜欢
    • 2018-07-06
    • 2019-02-12
    • 2019-09-22
    • 2021-07-01
    • 2019-10-09
    • 1970-01-01
    • 2020-08-14
    • 2020-10-01
    • 2019-03-26
    相关资源
    最近更新 更多