云起工作室 15711107967
09_知识点
2025-02-06 10:43:58

删除顶部的padding

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

因为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());

}