From b32595ac9f126c2c80e6ecb75bfdebac739b2715 Mon Sep 17 00:00:00 2001 From: toly <1981462002@qq.com> Date: Tue, 11 Aug 2020 21:09:48 +0800 Subject: [PATCH] =?UTF-8?q?:sparkles:=20=E6=B7=BB=E5=8A=A0=20ButtonBarThem?= =?UTF-8?q?e=E3=80=81CupertinoDialogAction=E3=80=81PerformanceOverlay?= =?UTF-8?q?=E3=80=81RawImage=E3=80=81TooltipTheme?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assets/flutter.db | Bin 774144 -> 782336 bytes .../Other/PerformanceOverlay/node1_base.dart | 22 +++ .../widgets/Other/RawImage/node1_base.dart | 100 ++++++++++ .../ButtonBarTheme/node1_base.dart | 46 +++++ .../ProxyWidget/TooltipTheme/node1_base.dart | 51 +++++ .../RepaintBoundary/main.dart | 26 +++ .../RepaintBoundary/node1_base.dart | 182 ++++++++++++++++++ .../RepaintBoundary/node2_save.dart | 68 +++++++ .../CupertinoDialogAction/node1_base.dart | 44 +++++ lib/views/widgets/exp/other_unit.dart | 4 +- lib/views/widgets/exp/proxy_unit.dart | 4 +- lib/views/widgets/exp/render_object_unit.dart | 2 + lib/views/widgets/exp/stateless_unit.dart | 1 + lib/views/widgets/widgets_map.dart | 27 ++- pubspec.lock | 56 ++++++ pubspec.yaml | 1 + 16 files changed, 631 insertions(+), 3 deletions(-) create mode 100644 lib/views/widgets/Other/PerformanceOverlay/node1_base.dart create mode 100644 lib/views/widgets/Other/RawImage/node1_base.dart create mode 100644 lib/views/widgets/ProxyWidget/ButtonBarTheme/node1_base.dart create mode 100644 lib/views/widgets/ProxyWidget/TooltipTheme/node1_base.dart create mode 100644 lib/views/widgets/SingleChildRenderObjectWidget/RepaintBoundary/main.dart create mode 100644 lib/views/widgets/SingleChildRenderObjectWidget/RepaintBoundary/node1_base.dart create mode 100644 lib/views/widgets/SingleChildRenderObjectWidget/RepaintBoundary/node2_save.dart create mode 100644 lib/views/widgets/StatelessWidget/CupertinoDialogAction/node1_base.dart diff --git a/assets/flutter.db b/assets/flutter.db index c18522c67df3504035f57ebe98eba2125ca48d57..adc85eaa53179d588e9c441f7098a8e1464ec7bf 100644 GIT binary patch delta 12223 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 A0ssI2 delta 6207 zcmZ{ncYIYzs9$ z`mfvGzo~LU)$I0zu4#PPwWruQ}zk_b^D0@JA1eNg8i)R zvzzTkyT-1xSKGz*GJBz&YtOW&+LP?Dc8dMD9dAe5ee51~XS=-}WLvgk6YC$=9qU`` zE9*<^&(`PG$JQUMlh#|-G3(HB>lJI4wZqzGwOE_22CK?iYpt{jttD2Tm2G8O>DB~m zv^C61vSO|NR;1O<3b)!>ftF!O<}c=b^S1eS^M-lZykLH2eq^3D-!_k%U>-2{nmf(s z&8JL{xzVgMxmjVBng!;fLxJuHqw)=B0q*~GXFl>ZCl`6l$wt2F%tnHfg*@uaKpt_X zBM&>%kcXUfFUe8m}q+~&5rkX5__>F{zS=PQxxcqy`y7bBnGE0AmXa%2Tx zid@YX`G;7=7a~`3zXfG{F0z#8AWQfhWHFzGEaHA63V9}S1^3%g!2NbC=Tni(xZjSY zd5_c4TnB9qHU}#}w|jV>0iFOyho2CUL(V6L|!3 z0{7c7p8M@c8(yGnThQj^Tb+M)N@AC~hN1a=#HN+#memoFS7rMGobD3x@c^ z_qgAH!Ty*h`9nU)AM3;dM8Xn8`~pPWyhAyY?x=m-8PNjPEbk1d`nndJ`;A3Go}{?T%O zi>EHD@?rhJ#Q6W9_qTYWXa2wC4~R|t58K6-7|)HF^$(99?M@i*==JzpJWtQs^pM`2 zh|7GW{y~c;efGoSyA#~;j~@R)i$|WrA09t0KK9Z3bz@6{=ir>O|ErHn7#JV($o>A> z;z`eT{-uvjjEaekNr?S-d;isPFo*4DD@2L<)BrNrH!6T6_|^rG4rH9~nE;Z;q-(Bm za5I1;QMy{_?!l|o7Z*%AwrfLsiK9wON{jM_mo8d5Kd(sG$94-Hn}>x$OE4)gDr@A6 zg6n(NHP>gZQ?BE#!>*l5xvIFfxi-2gTt%*2SB7hpxm+#m= zD}na6_F4Nq`v8_AkNUonYp=6c*xAZm^@zGfU1LwNN7+$!N87Z1v2I(})PB}y)(LB` zGQoPr;#R&j)k?KSCtAI&P|GlXF#lq{iG|`xv%xGf7n`%qv8G#HYIZSgHQD&dxN4j> zjvBj-t;RZ|R2gi{Gg1w=5n%-AKPv|npYKcrafd41wdGolma0XmX#Vm}*i@w~eQiyL`FR~rddXuAyyH#)%+ppM>RdR@@c z)R$CUiINMYSEUXtkG9fqv6S2-YlT(}@_I;_Ncs`z8%=^$AcF{%J6ZBy1=kFFpLN$7 zYd&jyZS>HKwGY+HYJ&2t{8wDbyE2?hAvZ+dve9HGz!x6EK zodJJLps@LnYh78%`3E1nWmF zQts%pb7+4u4~FE>I7X{_%!TTObSI&;dM>P-PjyNgCg#9^CGir(wg*qpmp>Uk=71h2(*k2r(U-x8RS#J+G8Y0 zgUP2j=R3H@yaI^ZN%JUeT)iBWr|Er(Ru?RTB!?D?WGTE-P18m1Eh-sekYF5_gV{ha z2)j~|R)-fu>nY3*NNl2)32p3I2w6INNuu@1E1-2R9l=Z{Rte@sEk=4mtioQ!xUy9% zA$$wHC(^osWsrEA9-_3aS1Dw^Pj^w+_A>2CAB2}uSuj%6KTsL_p}KKcIkYf#0+&~| z8ZMotWg=}Dv?p_0D{z2W0uAf!`dtRei zk}8Vf0&6RVqc%`T{GlB~+cp7_8Q$?+_U<7ELar_{S?XWq87e#iH zNW&VIauGsX=uP%g01NP@$&w_s2vQ3w8zr`NA!m@hpDxr*e};+TFhTiH9EOdtB5TyR z45Q;&gT$JmxCDP1&7#z!5sU?xjGPtBGuqF}WO5e8?-I6tCD-9kE7(ej)%4~XY>Qzp zi>zi6SK-!O`jN<9>dqDTbTI2f14sDhV#4c!xl>sso)%vB1iJUKYMtBg_I;|0tf3FL zVCpuum-+W=!kUGwuS5*ky_C(O8u>yn#;XP7!2u?0V;~QNg43*7W;K~S0Lr$o^EiZ? zyCBVwjxdc7!J4ah2*GJ?vyC$tJtv~k^@3us&&7J&Xt~I$Q+YeMJ(;EAqno#dE>AJH$eIgz2o%1^zEiz9jHx2M zCg^kMHSBVpvJIuYJv2s2r7~;m#6#iCA@-c)Jws8aj1;tdWhCkn6;|DucYrDDScFJ} zc^E`~&$i0mGdeofR*>4F#*|pg0^ae+0_plc4WsJ>Z82SkZ6(xhT);cw4K_im3h}I+ z;^QY-u&*XUN`^1rMiXfp9uC)Y*cSPpUKa|QA{JuTJdtf|!y};7VJ$N03`PUHFXP7B z3HntjNNk4^4ZU2&yFt|;>7HmcPT*ZJaOoPiT2fmIr1rjhJ(RY-r z2kDZujgm;%@uf7+#8VU~$P-B*jv-;XCh|TorA$u5V-&?7gRFJZZ#D0JoJYJZDEZ=T zl-&?neIf4$n=9l(#+rk9Us$?JdQ!#f)hn0-v`y5Ds(Q*AOSl`%_0kWR`w_f9Y;GrQ z7g^mn9tG(w><`qNMkR&x67+1+3wv}RY)cFu0Pi1_Vl>tm&Z8lsNO~4CLdT3?ZwXc( z_7>_6G1ipNW8lfrQohP+Ci8*tTCnu7=uO6WXeR{i1d2do8VuG~Y|~Jl04MIT6b0BBsa7V5 z(0Eo_jTZ|k5o8xB!2$9KYiP%lU{MA0G3Hsu2SJcm`VKX8i(pmIEvTub%#+6-hYs(` z*ECi`_+Y4fT&fj8+AljQ83OgM%4=|r2>A*nL*Yg@Iot$xNy4(23_F74`KF}y71X{s zR9BU4PUFMCJwy6bQAMFyke3O~oLhcFqC}VYzd<=Aul-+oYC-Bj5c7!tFL7dw#p^aeN)NBU$AT)I06Ck@$*}+(S zIv)=|I7&KWHCa3rZhS9)fvFV0$3beH62QD^iY)gLw0o=%PS=^S#<6@7#IKi6OKbz< z6QRp|h56@@6!m#Q@1Z`AGLOotL_Qfhxn+m2#_2o_A{Q$cB=k#3m&p{EaaP%Li$&SLTm2+dH;UuO|Kf^<>vcmmyZZ2f3H z9gc-5qp>)2;?v+tp43&BiTaM9zJueuhPjf!XTW=^GFZXnS|YF|_;)U2zCfONp zK{-tPx4;G5=vY1nx|Jvxnx-*)HoSUD8Lz6M)F>FYq(;y!tf7R@g{Bzg2gWw0^IYinmHas_N!%`|%f;=e*@`u99G?%_ zU&?=w*k+s0gQ9!#76q@u48dq8FAy_OH4447`9hfGQEVKvA721!i24dX=J7mOR489# z-b?@`>hcl`sRF{28e970k2R5yhYS zofP)sTD}xg4olUdw5B$kFM(t2)d)%!!xtUZp7htuZIuErpg#%n3*;y4bqn*h8($7f zE-5cCwk4A)u%6!?p0J751L|CSS?v&PxH0=f-SFXI_VQ!ALr z*8tB@-v|`>S{S-Ot+7O23GWuG2eIi1C|{*^Hwb~}tJD^S2oT$-o{|WKpPSULRU*Py zPpKPZL&o}2sC8FKFpTJ~y~#)r&`7PDO4>rNXlQwdBBp7RWzqqPW@!T?(g}9vYIzC?2V;>Irjaht zvq;k!iGb)b&Bw6tpDx#$EYc0K>b1F)bcN%M8h-b5hj+GUF9nbuu;c}8T#(W0L5%p= zx)ir>2WVmN#ZhgHNP0rIW7=VZ^oDcqXx##_@c#6fb~%9bfs5C*I7%LakiTheo%DlI zKWL{J=?ek(HJ?WM!^@(+k&-Bgll4z5G7$7&{fI~gKxdQKh#RhS)YmE` z7IM1l*)oZN*2naHHdeZ2iTcMfiHD)ddP*BJ5#I(Rd`nxI4RKl zo?eUlX?kd-auyre0x|AG4L+OPYN;$_MO%5m}Ct6=1YA) zBcmbxulfmtq(aCK`Y#e02O&S|Sjv7^SMH1j`6s<0m`s4C0OKQtjE9_1BS|A^@Jtsx z*wVrJ<<2D7+ubN+WFmw|8lF(B4hM!ARsNb0JI1(2$z+HcZ(NnhGzdyJ4l^oKU$W%B}v%q`?y#QhLRgbnnV`D$(u$J{a?-q$F%?e diff --git a/lib/views/widgets/Other/PerformanceOverlay/node1_base.dart b/lib/views/widgets/Other/PerformanceOverlay/node1_base.dart new file mode 100644 index 0000000..f420a57 --- /dev/null +++ b/lib/views/widgets/Other/PerformanceOverlay/node1_base.dart @@ -0,0 +1,22 @@ +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; + +/// create by 张风捷特烈 on 2020/7/22 +/// contact me by email 1981462002@qq.com +/// 说明: 312 PerformanceOverlay 性能浮层 6 可以非常方便地开启性能监测的两个柱图,方便查看刷新界面时帧率的变化情况。 +// { +// "widgetId": 312, +// "name": "PerformanceOverlay基本使用", +// "priority": 1, +// "subtitle": "使用PerformanceOverlay.allEnabled可以开始所有的监测项。", +// } + +class PerformanceOverlayDemo extends StatelessWidget { + @override + Widget build(BuildContext context) { + return PerformanceOverlay.allEnabled( + + ); + } +} + diff --git a/lib/views/widgets/Other/RawImage/node1_base.dart b/lib/views/widgets/Other/RawImage/node1_base.dart new file mode 100644 index 0000000..f8a5a0a --- /dev/null +++ b/lib/views/widgets/Other/RawImage/node1_base.dart @@ -0,0 +1,100 @@ +import 'dart:async'; + +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'dart:ui' as ui; + +/// create by 张风捷特烈 on 2020/7/22 +/// contact me by email 1981462002@qq.com +/// 说明: 313 RawImage 6 是实现Image组件的核心组件,可以显示ui的Image,基本属性同Image,一般很少单独使用。 +// { +// "widgetId": 313, +// "name": "RawImage基本使用", +// "priority": 1, +// "subtitle": "【image】 : 图片 【ui.Image】\n" +// "【width】 : 宽 【int】\n" +// "【height】: 高 【int】\n" +// "【isAntiAlias】: 是否抗锯齿 【bool】\n" +// "【filterQuality】: 过滤质量 【FilterQuality】\n" +// "很多属性同Image,详见之.", +// } +class RawImageDemo extends StatefulWidget { + @override + _RawImageDemoState createState() => _RawImageDemoState(); +} + +class _RawImageDemoState extends State { + ui.Image _image; + + @override + void initState() { + super.initState(); + _loadImageFromAssets('assets/images/icon_head.png'); + } + + @override + Widget build(BuildContext context) { + if (_image == null) + return Container( + width: 80, + height: 80, + ); + + return Row( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: [ + Column( + mainAxisSize: MainAxisSize.min, + children: [ + RawImage( + image: _image, + width: 150, + height: 150, + isAntiAlias: true, + filterQuality: FilterQuality.high, + ), + Text('isAntiAlias: true'), + Text('FilterQuality.high') + ], + ), + Column( + mainAxisSize: MainAxisSize.min, + children: [ + RawImage( + image: _image, + width: 150, + height: 150, + isAntiAlias: false, + ), + Text('isAntiAlias: false'), + Text('FilterQuality.low') + ], + ), + ], + ); + } + + void _loadImageFromAssets(String name) async { + _image = await loadImageByProvider(AssetImage(name)); + + setState(() {}); + } + + //通过ImageProvider读取Image + Future loadImageByProvider( + ImageProvider provider, { + ImageConfiguration config = ImageConfiguration.empty, + }) async { + Completer completer = Completer(); //完成的回调 + ImageStreamListener listener; + ImageStream stream = provider.resolve(config); //获取图片流 + listener = ImageStreamListener((ImageInfo frame, bool sync) { + //监听 + final ui.Image image = frame.image; + completer.complete(image); //完成 + stream.removeListener(listener); //移除监听 + }); + stream.addListener(listener); //添加监听 + return completer.future; //返回 + } +} diff --git a/lib/views/widgets/ProxyWidget/ButtonBarTheme/node1_base.dart b/lib/views/widgets/ProxyWidget/ButtonBarTheme/node1_base.dart new file mode 100644 index 0000000..73d03cd --- /dev/null +++ b/lib/views/widgets/ProxyWidget/ButtonBarTheme/node1_base.dart @@ -0,0 +1,46 @@ +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; + +/// create by 张风捷特烈 on 2020/7/22 +/// contact me by email 1981462002@qq.com +/// 说明: 338 ButtonBarTheme 5 主要用于为后代的ButtonBar组件统一设置默认属性,也可以通过该组件获取默认ButtonBarTheme的属性。 +// { +// "widgetId": 338, +// "name": "ButtonBarTheme基本使用", +// "priority": 1, +// "subtitle": "可指定ButtonBarThemeData数据属性为【后代】的ButtonBar组件设置默认样式,如对齐方式、样式、边距等。也可以用ButtonBarTheme.of获取ButtonBar的主题属性。", +// } + +class ButtonBarThemeDemo extends StatelessWidget { + @override + Widget build(BuildContext context) { + return ButtonBarTheme( + child: TempButtonBar(), + data: ButtonBarTheme.of(context).copyWith( + alignment: MainAxisAlignment.center, + buttonPadding: EdgeInsets.symmetric(horizontal: 6), + overflowDirection: VerticalDirection.up, + buttonMinWidth: 150, + buttonHeight: 30, + buttonTextTheme: ButtonTextTheme.primary)); + } +} + +class TempButtonBar extends StatelessWidget { + @override + Widget build(BuildContext context) { + return ButtonBar( + alignment: MainAxisAlignment.center, + children: [ + RaisedButton( + color: Colors.blue, child: Text("1.Raised"), onPressed: () {}), + OutlineButton(child: Text("2.Outline"), onPressed: () {}), + FlatButton( + color: Colors.blue, + onPressed: () {}, + child: Text("3.Flat"), + ) + ], + ); + } +} diff --git a/lib/views/widgets/ProxyWidget/TooltipTheme/node1_base.dart b/lib/views/widgets/ProxyWidget/TooltipTheme/node1_base.dart new file mode 100644 index 0000000..d9dff80 --- /dev/null +++ b/lib/views/widgets/ProxyWidget/TooltipTheme/node1_base.dart @@ -0,0 +1,51 @@ +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; + +/// create by 张风捷特烈 on 2020/7/22 +/// contact me by email 1981462002@qq.com +/// 说明: 333 TooltipTheme 5 主要用于为后代的Tooltip组件统一设置默认属性,也可以通过该组件获取默认TooltipTheme的属性。 +// { +// "widgetId": 333, +// "name": "TooltipTheme基本使用", +// "priority": 1, +// "subtitle": "可指定TooltipThemeData数据属性为【后代】的Tooltip组件设置默认样式,如装饰、文字样式、显示时长、边距等。也可以用TooltipTheme.of获取Tooltip的主题属性。", +// } + +class TooltipThemeDemo extends StatelessWidget { + @override + Widget build(BuildContext context) { + return TooltipTheme( + child: TempTooltip(), + data: TooltipTheme.of(context).copyWith( + preferBelow: false, + padding: EdgeInsets.all(5), + verticalOffset: 20, + margin: EdgeInsets.all(2), + textStyle: TextStyle( + color: Colors.red, + shadows: [Shadow(color: Colors.white, offset: Offset(1, 1))]), + decoration: BoxDecoration(boxShadow: [ + BoxShadow( + color: Colors.orangeAccent, + offset: Offset(1, 1), + blurRadius: 8) + ]))); + } +} + +class TempTooltip extends StatelessWidget { + @override + Widget build(BuildContext context) { + return Row( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: [ + Tooltip( + message: "天王盖地虎", + child: Icon(Icons.info_outline)), + Tooltip( + message: "宝塔镇河妖", + child: Icon(Icons.info_outline)), + ], + ); + } +} diff --git a/lib/views/widgets/SingleChildRenderObjectWidget/RepaintBoundary/main.dart b/lib/views/widgets/SingleChildRenderObjectWidget/RepaintBoundary/main.dart new file mode 100644 index 0000000..f214419 --- /dev/null +++ b/lib/views/widgets/SingleChildRenderObjectWidget/RepaintBoundary/main.dart @@ -0,0 +1,26 @@ +/// create by 张风捷特烈 on 2020/7/22 +/// contact me by email 1981462002@qq.com +/// 说明: + +import 'package:flutter/material.dart'; + +import 'node1_base.dart'; +import 'node2_save.dart'; + + +void main() => runApp(MyApp()); + +class MyApp extends StatelessWidget { + @override + Widget build(BuildContext context) { + return MaterialApp( + title: 'Flutter Demo', + theme: ThemeData( + primarySwatch: Colors.blue, + ), + home: Scaffold( + appBar: AppBar(), + body: Center(child: RepaintBoundarySave()), + )); + } +} diff --git a/lib/views/widgets/SingleChildRenderObjectWidget/RepaintBoundary/node1_base.dart b/lib/views/widgets/SingleChildRenderObjectWidget/RepaintBoundary/node1_base.dart new file mode 100644 index 0000000..2cf57af --- /dev/null +++ b/lib/views/widgets/SingleChildRenderObjectWidget/RepaintBoundary/node1_base.dart @@ -0,0 +1,182 @@ +import 'dart:ui'; + +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; + +/// create by 张风捷特烈 on 2020/7/22 +/// contact me by email 1981462002@qq.com +/// 说明: 264 RepaintBoundary 重绘边界 为子组件创建一个单独的显示列表,提升性能。源码中在TextField、DrawerController、Scrollbar、Sliver等组件中均有应用。 +// { +// "widgetId": 264, +// "name": "RepaintBoundary基本使用", +// "priority": 1, +// "subtitle": "【child】 : 子组件 【Widget】\n" +// "比如上面的绘制视图,即使shouldRepaint为false,在滑动中会也会不断执行paint方法,使用RepaintBoundary可以避免不必要的绘制。", +// } + +class RepaintBoundaryDemo extends StatelessWidget{ + @override + Widget build(BuildContext context) { + return RepaintBoundary( + child: TempPlayBezier3Page(), + ); + } +} + +class TempPlayBezier3Page extends StatefulWidget { + @override + _TempPlayBezier3PageState createState() => _TempPlayBezier3PageState(); +} + +class _TempPlayBezier3PageState extends State { + List _pos = []; + int selectPos; + + @override + void initState() { + _initPoints(); + super.initState(); + } + + void _initPoints() { + _pos = List(); + _pos.add(Offset(0, 0)); + _pos.add(Offset(60, -60)); + _pos.add(Offset(-90, -90)); + _pos.add(Offset(-120, -40)); + } + + @override + Widget build(BuildContext context) { + return Container( + height: 200, + width: MediaQuery.of(context).size.width, + child: CustomPaint( + painter: TempBezierPainter(pos: _pos, selectPos: selectPos), + ), + ); + } +} + +class TempBezierPainter extends CustomPainter { + Paint _gridPaint; + Path _gridPath; + + Paint _mainPaint; + Path _mainPath; + int selectPos; + Paint _helpPaint; + + List pos; + + TempBezierPainter({this.pos, this.selectPos}) { + _gridPaint = Paint()..style = PaintingStyle.stroke; + _gridPath = Path(); + + _mainPaint = Paint() + ..color = Colors.orange + ..style = PaintingStyle.stroke + ..strokeWidth = 2; + _mainPath = Path(); + + _helpPaint = Paint() + ..color = Colors.purple + ..style = PaintingStyle.stroke + ..strokeWidth = 2 + ..strokeCap = StrokeCap.round; + } + + @override + void paint(Canvas canvas, Size size) { + print('----------Paint-------'); + canvas.clipRect(Offset.zero & size); + canvas.translate(size.width / 2, size.height / 2); + _drawGrid(canvas, size); //绘制格线 + _drawAxis(canvas, size); //绘制轴线 + + _mainPath.moveTo(pos[0].dx, pos[0].dy); + _mainPath.cubicTo( + pos[1].dx, pos[1].dy, pos[2].dx, pos[2].dy, pos[3].dx, pos[3].dy); + canvas.drawPath(_mainPath, _mainPaint); + _drawHelp(canvas); + _drawSelectPos(canvas); + } + + @override + bool shouldRepaint(CustomPainter oldDelegate) => false; + + void _drawGrid(Canvas canvas, Size size) { + _gridPaint + ..color = Colors.grey + ..strokeWidth = 0.5; + _gridPath = _buildGridPath(_gridPath, size); + canvas.drawPath(_buildGridPath(_gridPath, size), _gridPaint); + + canvas.save(); + canvas.scale(1, -1); //沿x轴镜像 + canvas.drawPath(_gridPath, _gridPaint); + canvas.restore(); + + canvas.save(); + canvas.scale(-1, 1); //沿y轴镜像 + canvas.drawPath(_gridPath, _gridPaint); + canvas.restore(); + + canvas.save(); + canvas.scale(-1, -1); //沿原点镜像 + canvas.drawPath(_gridPath, _gridPaint); + canvas.restore(); + } + + void _drawAxis(Canvas canvas, Size size) { + canvas.drawPoints( + PointMode.lines, + [ + Offset(-size.width / 2, 0), + Offset(size.width / 2, 0), + Offset(0, -size.height / 2), + Offset(0, size.height / 2), + Offset(0, size.height / 2), + Offset(0 - 7.0, size.height / 2 - 10), + Offset(0, size.height / 2), + Offset(0 + 7.0, size.height / 2 - 10), + Offset(size.width / 2, 0), + Offset(size.width / 2 - 10, 7), + Offset(size.width / 2, 0), + Offset(size.width / 2 - 10, -7), + ], + _gridPaint + ..color = Colors.blue + ..strokeWidth = 1.5); + } + + Path _buildGridPath(Path path, Size size, {step = 20.0}) { + for (int i = 0; i < size.height / 2 / step; i++) { + path.moveTo(0, step * i); + path.relativeLineTo(size.width / 2, 0); + } + for (int i = 0; i < size.width / 2 / step; i++) { + path.moveTo(step * i, 0); + path.relativeLineTo( + 0, + size.height / 2, + ); + } + return path; + } + + void _drawHelp(Canvas canvas) { + canvas.drawPoints(PointMode.lines, pos, _helpPaint..strokeWidth = 1); + canvas.drawPoints(PointMode.points, pos, _helpPaint..strokeWidth = 8); + } + + void _drawSelectPos(Canvas canvas) { + if (selectPos == null) return; + canvas.drawCircle( + pos[selectPos], + 10, + _helpPaint + ..color = Colors.green + ..strokeWidth = 2); + } +} diff --git a/lib/views/widgets/SingleChildRenderObjectWidget/RepaintBoundary/node2_save.dart b/lib/views/widgets/SingleChildRenderObjectWidget/RepaintBoundary/node2_save.dart new file mode 100644 index 0000000..7d700f2 --- /dev/null +++ b/lib/views/widgets/SingleChildRenderObjectWidget/RepaintBoundary/node2_save.dart @@ -0,0 +1,68 @@ +import 'dart:io'; +import 'dart:typed_data'; +import 'dart:ui'; + +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter/rendering.dart'; +import 'package:path_provider/path_provider.dart'; +import 'dart:ui' as ui; +import 'node1_base.dart'; + +/// create by 张风捷特烈 on 2020/7/22 +/// contact me by email 1981462002@qq.com +/// 说明: +// { +// "widgetId": 264, +// "name": "保存Widget成为图片", +// "priority": 2, +// "subtitle": "通过RenderRepaintBoundary可以获取子组件的Image信息,从而获取字节保存为图片文件。", +// } + +class RepaintBoundarySave extends StatelessWidget { + final GlobalKey _globalKey = GlobalKey(); + + @override + Widget build(BuildContext context) { + return Stack( + children: [ + RepaintBoundary( + key: _globalKey, + child: TempPlayBezier3Page(), + ), + Positioned(right: -10, child: _buildButton3(context)) + ], + ); + } + + Widget _buildButton3(context) => MaterialButton( + child: Icon( + Icons.save_alt, + size: 15, + color: Colors.white, + ), + color: Colors.green, + shape: CircleBorder( + side: BorderSide(width: 2.0, color: Color(0xFFFFDFDFDF)), + ), + onPressed: () async { + var bits = await _widget2Image(_globalKey); + var dir = await getApplicationSupportDirectory(); + var file = File(dir.path + "/save_img.png"); + var f = await file.writeAsBytes(bits); + Scaffold.of(context).showSnackBar(SnackBar( + backgroundColor: Theme.of(context).primaryColor, + content: Text('保存成功后! 路径为:${f.path}'), + )); + }); + + Future _widget2Image(GlobalKey key) async { + RenderRepaintBoundary boundary = key.currentContext.findRenderObject(); + //获得 ui.image + ui.Image img = await boundary.toImage(); + //获取图片字节 + var byteData = await img.toByteData(format: ui.ImageByteFormat.png); + Uint8List bits = byteData.buffer.asUint8List(); + return bits; + } +} diff --git a/lib/views/widgets/StatelessWidget/CupertinoDialogAction/node1_base.dart b/lib/views/widgets/StatelessWidget/CupertinoDialogAction/node1_base.dart new file mode 100644 index 0000000..bc68abc --- /dev/null +++ b/lib/views/widgets/StatelessWidget/CupertinoDialogAction/node1_base.dart @@ -0,0 +1,44 @@ +import 'dart:async'; + +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'dart:ui' as ui; + +/// create by 张风捷特烈 on 2020/7/22 +/// contact me by email 1981462002@qq.com +/// 说明: 352 CupertinoDialogAction 0 一个简单的按钮,通常用于CupertinoAlertDialog中,一般不单独使用。 +// { +// "widgetId": 352, +// "name": "CupertinoDialogAction基本使用", +// "priority": 1, +// "subtitle": "【isDefaultAction】 : 是否是默认性操作 【bool】\n" +// "【isDestructiveAction】 : 是否是毁灭性操作 【bool】\n" +// "【textStyle】: 文字样式 【TextStyle】\n" +// "【onPressed】: 点击事件 【VoidCallback】\n" +// "【child】: 子组件 【Widget】", +// } +class CupertinoDialogActionDemo extends StatelessWidget { + @override + Widget build(BuildContext context) { + return Column( + children: [ + CupertinoDialogAction( + isDestructiveAction: false, + onPressed: ()=>_toast(context), + child: Text('CupertinoDialogAction'), + ), + CupertinoDialogAction( + isDestructiveAction: true, + onPressed: ()=>_toast(context), + child: Text('CupertinoDialogAction'), + ), + ], + ); + } + + _toast(BuildContext context){ + Scaffold.of(context).showSnackBar(SnackBar( + backgroundColor: Theme.of(context).primaryColor, + content: Text('CupertinoDialogAction'),)); + } +} diff --git a/lib/views/widgets/exp/other_unit.dart b/lib/views/widgets/exp/other_unit.dart index 7f9bb09..bcb507c 100644 --- a/lib/views/widgets/exp/other_unit.dart +++ b/lib/views/widgets/exp/other_unit.dart @@ -6,4 +6,6 @@ library other_unit.dart; export '../Other/ErrorWidget/node1_base.dart'; -export '../Other/Table/node1_base.dart'; \ No newline at end of file +export '../Other/Table/node1_base.dart'; +export '../Other/RawImage/node1_base.dart'; +export '../Other/PerformanceOverlay/node1_base.dart'; \ No newline at end of file diff --git a/lib/views/widgets/exp/proxy_unit.dart b/lib/views/widgets/exp/proxy_unit.dart index 5f5a708..2042101 100644 --- a/lib/views/widgets/exp/proxy_unit.dart +++ b/lib/views/widgets/exp/proxy_unit.dart @@ -22,4 +22,6 @@ export '../ProxyWidget/ChipTheme/node1_base.dart' hide CustomFilterChip; export '../ProxyWidget/ListTileTheme/node1_base.dart'; export '../ProxyWidget/MaterialBannerTheme/node1_base.dart'; export '../ProxyWidget/PopupMenuTheme/node1_base.dart'; -export '../ProxyWidget/ToggleButtonsTheme/node1_base.dart'; \ No newline at end of file +export '../ProxyWidget/ToggleButtonsTheme/node1_base.dart'; +export '../ProxyWidget/ButtonBarTheme/node1_base.dart'; +export '../ProxyWidget/TooltipTheme/node1_base.dart'; diff --git a/lib/views/widgets/exp/render_object_unit.dart b/lib/views/widgets/exp/render_object_unit.dart index 3197d96..b18d292 100644 --- a/lib/views/widgets/exp/render_object_unit.dart +++ b/lib/views/widgets/exp/render_object_unit.dart @@ -29,6 +29,8 @@ export '../SingleChildRenderObjectWidget/Align/node1_base.dart'; export '../SingleChildRenderObjectWidget/Align/node2_other.dart'; export '../SingleChildRenderObjectWidget/CustomSingleChildLayout/node1_base.dart'; export '../SingleChildRenderObjectWidget/CustomSingleChildLayout/node2_offset.dart'; +export '../SingleChildRenderObjectWidget/RepaintBoundary/node1_base.dart'; +export '../SingleChildRenderObjectWidget/RepaintBoundary/node2_save.dart'; export '../SingleChildRenderObjectWidget/ConstrainedBox/node1_base.dart'; export '../SingleChildRenderObjectWidget/FractionalTranslation/node1_base.dart'; diff --git a/lib/views/widgets/exp/stateless_unit.dart b/lib/views/widgets/exp/stateless_unit.dart index 6c135e2..fe813a0 100644 --- a/lib/views/widgets/exp/stateless_unit.dart +++ b/lib/views/widgets/exp/stateless_unit.dart @@ -11,6 +11,7 @@ export '../StatelessWidget/PreferredSize/node1_base.dart'; export '../StatelessWidget/PreferredSize/node2_adapter.dart'; export '../StatelessWidget/Builder/node1_base.dart'; export '../StatelessWidget/NavigationToolbar/node1_base.dart'; +export '../StatelessWidget/CupertinoDialogAction/node1_base.dart'; export '../StatelessWidget/CheckboxListTile/node1_base.dart'; export '../StatelessWidget/CheckboxListTile/node2_select.dart'; diff --git a/lib/views/widgets/widgets_map.dart b/lib/views/widgets/widgets_map.dart index 9d849db..f480d85 100644 --- a/lib/views/widgets/widgets_map.dart +++ b/lib/views/widgets/widgets_map.dart @@ -103,10 +103,30 @@ class WidgetsMap { return [ ToggleButtonsThemeDemo(), ]; + case "PerformanceOverlay": + return [ + PerformanceOverlayDemo(), + ]; case "NavigationToolbar": return [ NavigationToolbarDemo(), ]; + case "CupertinoDialogAction": + return [ + CupertinoDialogActionDemo(), + ]; + case "ButtonBarTheme": + return [ + ButtonBarThemeDemo(), + ]; + case "RawImage": + return [ + RawImageDemo(), + ]; + case "TooltipTheme": + return [ + TooltipThemeDemo(), + ]; case "CupertinoTextField": return [ CupertinoTextFieldDemo(), @@ -134,7 +154,7 @@ class WidgetsMap { return [ CustomFadeInImage(), ]; - case "InteractiveViewer": + case "InteractiveViewer": return [ InteractiveViewerDemo(), InteractiveViewerDemo2(), @@ -149,6 +169,11 @@ class WidgetsMap { CustomVisibility(), ReplacementVisibility(), ]; + case "RepaintBoundary": + return [ + RepaintBoundaryDemo(), + RepaintBoundarySave(), + ]; case "Chip": return [ CustomChip(), diff --git a/pubspec.lock b/pubspec.lock index fdec551..d56a1a2 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -99,6 +99,13 @@ packages: url: "https://pub.flutter-io.cn" source: hosted version: "1.1.0" + file: + dependency: transitive + description: + name: file + url: "https://pub.flutter-io.cn" + source: hosted + version: "5.2.1" flutter: dependency: "direct main" description: flutter @@ -177,6 +184,41 @@ packages: url: "https://pub.flutter-io.cn" source: hosted version: "1.7.0" + path_provider: + dependency: "direct main" + description: + name: path_provider + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.6.11" + path_provider_linux: + dependency: transitive + description: + name: path_provider_linux + url: "https://pub.flutter-io.cn" + source: hosted + version: "0.0.1+2" + path_provider_macos: + dependency: transitive + description: + name: path_provider_macos + url: "https://pub.flutter-io.cn" + source: hosted + version: "0.0.4+3" + path_provider_platform_interface: + dependency: transitive + description: + name: path_provider_platform_interface + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.0.2" + platform: + dependency: transitive + description: + name: platform + url: "https://pub.flutter-io.cn" + source: hosted + version: "2.2.1" plugin_platform_interface: dependency: transitive description: @@ -184,6 +226,13 @@ packages: url: "https://pub.flutter-io.cn" source: hosted version: "1.0.2" + process: + dependency: transitive + description: + name: process + url: "https://pub.flutter-io.cn" + source: hosted + version: "3.0.13" provider: dependency: transitive description: @@ -350,6 +399,13 @@ packages: url: "https://pub.flutter-io.cn" source: hosted version: "2.0.8" + xdg_directories: + dependency: transitive + description: + name: xdg_directories + url: "https://pub.flutter-io.cn" + source: hosted + version: "0.1.0" sdks: dart: ">=2.9.0-14.0.dev <3.0.0" flutter: ">=1.12.13+hotfix.5 <2.0.0" diff --git a/pubspec.yaml b/pubspec.yaml index 7cc2c35..3ed91e2 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -31,6 +31,7 @@ dependencies: url_launcher: ^5.4.2 # url share: ^0.6.3+6 intl: ^0.16.1 + path_provider: ^1.6.11 connectivity: ^0.4.8+6 #网络状态 flutter_spinkit: ^4.1.2+1 #loading dio: ^3.0.9 #dio