flutter 子组件改变父类的值用callback函数,父类改变子组件的值用GlobalKey

子组件改变父类用callback函数传值过去控制

子组件在开头的时候要用上:

class ExamInspectionDetailSliverList extends StatefulWidget {
  Function controlCallBack;
  Key key;//key是为了父类能控制字类,不控制可以不用,就用普通传参方式
  
  ExamInspectionDetailSliverList(this.controlCallBack,{this.key}):super(key: key);//指定继承父级的super(key: key)

  @override
  ExamInspectionDetailSliverListState createState() =>
      ExamInspectionDetailSliverListState();
}
//如果需要父类控制字类就要void setData,不需要就可以用正常的initState
	  @override
	  void initState() {
	    super.initState();
	  }
	  void setData(listData,_roundCheckBox, _offstageValue,_catShow){
	    setState(() {
	      _listData = listData;
	      roundCheckBox =_roundCheckBox;
	      offstageValue = _offstageValue;
	      catShow = _catShow;
	    });
	  }

	在子组件使用的地方写上:
	 //字类用来改变父类的值,传值过去
           widget.controlCallBack(offstageValue);//offstageValue是想要控制的值

父页面就需要做这些操作:

用子组件:ExamInspectionDetailSliverList是定义子组件的,
childCallBack:是自定义的一个函数,用来接收字类传的参数并同时setState需要改变的值。
key: ExamInspectionDetailSliverListKey如果父类不需要控制字类那可以不写,

ExamInspectionDetailSliverList(childCallBack,
                        key: ExamInspectionDetailSliverListKey,)

           
//子组件改变父组件的值用callback函数
  childCallBack(val){
    print(val);
    setState(() {
      offstageValue=val;
    });
  }

以下是父类在开头设置Key 父级改变子组件值,控制子组件的值

	//父级改变子组件值用 GlobalKey
	  GlobalKey 		ExamInspectionDetailSliverListKey =
	  new GlobalKey();
	  @override
	  void initState() {
	    // TODO: implement initState
	    super.initState();
	
	}

	在需要传值的地方
	//传值给子组件,父级绑定并可以改变子组件参数值
  ExamInspectionDetailSliverListKey.currentState.setData(_listData,roundCheckBox, offstageValue,catShow);

你可能感兴趣的:(flutter,前端)