父传子
1.在父组件中使用子组件时 使用时就是名字+() 当要给子组件传入数据时 把属性名和属性值都放在括号里
home(title:'flutter')
2.在子组件中 需要接收数据 在vue中 只需要在类中放一个construction就可以接收 而在flutter中则需要对这个类进行重写 下面两种方法都可以
class home extends StatelessWidget{
String title;
home({Key key,this.title} : super(key:key);
home({this.title});
}
子传父
路由跳转时 需要使用 Navigator.pop 和 Navigator.push
1.在父组件 需要跳转到子组件 使用Navigator
Navigator.of(context).push(
MaterialPageRoute(builder:(BuildContext context){
return 子组件();
})
)
2.在子组件给父组件传递数据时 使用Navigator.pop进行传送数据 存在事件冲突时,官方友好的出了一个控件(GestureDetector)来解决这个问题 在事件分发那里,分析了基础手势控件Listener的事件传递(传送门) 类似一个按钮可以点击 有时候不能使用按钮时 就用这个
GestureDetector(
onTap(){
Navigator.of(context).pop('发送的数据');
}
)
3.父组件需要接收数据 不能单纯的只跳转到子组件的页面
String _ads;
var ads = Navigator.of(context).push(
MaterialPageRoute(builder:(BuildContext context){
return 子组件();
})
)
setState((){
_ads = ads;
})
注:在flutter中通过setState()改变数据 它得放到一个方法中 并且必须在有状态的组件中