父组件
class Parent extends StatefulWidget {
  @override
  _ParentState createState() => _ParentState();
}

class _ParentState extends State<Parent> {
  String childData = '传给子组件的值';
  void onChanged(val) {
    setState(() {
      childData= val;
    });
  }

  @override
  void initState() {
  Widget build(BuildContext context) {
    return LayoutBuilder(
      builder: (BuildContext context, BoxConstraints viewportConstraints) {
        return SingleChildScrollView(
          child: ConstrainedBox(
            constraints: BoxConstraints(
              minHeight: viewportConstraints.maxHeight,
            ),
            child: Column(
              mainAxisSize: MainAxisSize.min,
              mainAxisAlignment: MainAxisAlignment.spaceAround,
              children: <Widget>[
                Container(
                  padding: EdgeInsets.all(0.0),
                  margin: EdgeInsets.all(0.0),
                  child: new Child(
                      childData: childData,
                      callBack: (value) => onChanged(value)),
                  height: 200.0,
                ),
                Container(
                  // Another fixed-height child.
                  color: const Color(0xff008000), // Green
                  height: 120.0,
                )
              ],
            ),
          ),
        );
      },
    );
  }
}

子组件
class Child extends StatefulWidget {
  // 获取父组件的值
  Child({Key key, this.childData, this.callBack}) : super(key: key);
  final callBack;
  List childData;
  @override
  _ChildState createState() {
    return _ChildState();
  }
}

class _ChildState extends State<Child> {
  @override
  void initState() {
    // TODO: implement initState
    // childData的值可以在 initState中通过widget.childData拿到。
    print(widget.childData);
    super.initState();
  }
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Container(Text("子组件"))
    );
  }
}

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐