首页 > 解决方案 > setState 不改变如何将 StatefulWidget 设置为 StatefulWidget?

问题描述

StatefulWidget 到 StatefulWidget 如何在 Test2 setstate 类中更改字符串 TimeSetdata

   class Test1 extends StatefulWidget {
      @override
      _Test1State createState() => _Test1State();
    }

    class _Test1State extends State<Test1> {
      String TimeSetdata = "9.00 AM";
      @override
      Widget build(BuildContext context) {
       ...
       Text(TimeSetdata);
      }
    }
    class Test2 extends StatefulWidget {
      @override
      _Test2State createState() => _Test2State();
    }

    class _Test2State extends State<Test2> {
      @override
      Widget build(BuildContext context) {
        ...
        onPressed: () {
          setState(() {
            TimeSetdata = "11.00 AM";
          });
        };
      }
    }

如何在类 Test2 中设置状态将小部件文本(TimeSetdata)中的字符串 TimeSetdata 更改为“11.00 AM”;

标签: dartflutter

解决方案


允许父级将回调函数传递给子级并传递一个回调,当从子级调用时,会更新父级中的值。

这假设这Test2是一个孩子Test1(你没有在你的问题中说清楚)

typedef StringCallback = void Function(String);

class Test2 extends StatefulWidget {
  Test2({@required this.onPressed});

  final StringCallback onPressed;

  @override
  _Test2State createState() => _Test2State(onPressed: onPressed);
}

class _Test2State extends State<Test2> {
  _Test2State({@required this.onPressed});

  final StringCallback onPressed;

  @override
  Widget build(BuildContext context) {
    ...
    onPressed: () => onPressed(),
  }
}

class _Test1State extends State<Test1> {
  String TimeSetdata = "9.00 AM";
  @override
  Widget build(BuildContext context) {
   ...
   Test2(onPressed: (s) => setState(() => TimeSetdata = s),
   ...
   Text(TimeSetdata);
  }
}

推荐阅读