body:Container(
child:MediaQuery.removePadding(
removeTop:true,
context:context,
child: 再些子组件
)
)
GestureDetector(
onVerticalDragUpdate:(DragUpdateDetails details){ //监听拖拽事件
RenderBox box = context.findRenderObject(); 拿到点前小部件的盒子
print(box.globalToLocal(details.globalePosition)) ; //获取offset 相对坐标
double y= box.globalToLocal(details.globalePosition).dy 获取相对高度
}
onTap:(){}, //监听点击事件
child:组件
)
var arr = [a,b,c,t,a,y,s]
arr.sort((val1,val2){
return val1.compareTo(val2)
})
int dividend = 10; // 被除数
int divisor = 3; // 除数
int result = dividend ~/ divisor; // 结果为3
print(result); // 输出: 3
dividend ~/ divisor.clamp(最小值,最大值)
class IndexBar extends StatefulWidget{
final void Function(string str) indexBarCallBack;
IndexBar({this.indexBarCallBack})
}
外部使用
IndexBar(indexBarCallBack:(string str){ print(str)})
widget.indexBarCallBack(str)
因为ListView 自带拖拽事件,会拦截自定义的拖拽事件
Navigator.pop(context)
是否包含某字符串
name.contains("str") // 判断name中是否包含某字符串
name.split(str) 返回数组 以str 切割name
定义
class MyData extends InheritedWidget{
final int data;
const MyData({required this.data,required Widget child}):puper(context);
//定义一个便捷方法,方便子组件中的widget去获取共享数据
static MyData? of(BuildContext context){
return context.dependOnInheritedWidgetOfExactType<MyData>();
}
bool updateShouldNotify(MyData oldWidget){
return oldWidget.data!=data
}
}
使用
Widget build(BuildContext context){
return MyData(data:data,child:child)
}
Widget build(BuildContext context){
return Text(MyData.of(context)!.data.toString());
}