标签:run inter 通过 each cti eve child 多列 col
1、监听事件:以 Listener包裹组件支持的监听包含: onPointerDown,onPointerMove,onPointerUp,onPointerCancel。
同 Listener 类似,有 IgnorePointer(忽略本身),和AbsorbPointer(不忽略本身)。 忽略事件。
更强大的手势组件 GestureDetector (onTap) , 如果需要有波纹效果则用 InkWell代替,具有类似效果的还有RaisedBuitton、FlatButton、CupertinoButton。
2、
InkWell(波纹显示按压效果组件同GestureDetector) 必须以Material 组件为祖先,点击(出现波纹)组件.
double sideLength = 50; Widget build(BuildContext context) { return AnimatedContainer( height: sideLength, width: sideLength, duration: Duration(seconds: 2), curve: Curves.easeIn, child: Material( color: Colors.yellow, child: InkWell( onTap: () { setState(() { sideLength == 50 ? sideLength = 100 : sideLength = 50; }); }, ), ), ); }
3、column和row 不支持滚动,如果要滚动请选用ListView ,复杂列表滚动效果:GridView和CustomScrollView(多列竖向滚动)。
row 撑破横向的情况下,可以用wrap代替row
4、InheritedWidget 父节点
5、runZoned 代码执行环节范围,自定义一些代码行为,比如拦截日志输出行为等。
下面是拦截应用中所有调用print
输出日志的行为
main() { runZoned(() => runApp(MyApp()), zoneSpecification: new ZoneSpecification( print: (Zone self, ZoneDelegate parent, Zone zone, String line) { parent.print(zone, "Intercepted: $line"); }), ); }
异常捕获
runZoned(() { runApp(MyApp()); }, onError: (Object obj, StackTrace stack) { var details=makeDetails(obj,stack); reportError(details); });
需要注意的是,error-zone内部发生的错误是不会跨越当前error-zone的边界的,如果想跨越error-zone边界去捕获异常,可以通过共同的“源”zone来捕获,如
var future = new Future.value(499); runZoned(() { var future2 = future.then((_) { throw "error in first error-zone"; }); runZoned(() { var future3 = future2.catchError((e) { print("Never reached!"); }); }, onError: (e) { print("unused error handler"); }); }, onError: (e) { print("catches error of first error-zone."); });
6、
标签:run inter 通过 each cti eve child 多列 col
原文地址:https://www.cnblogs.com/Mvloveyouforever/p/12496758.html