From 2949ec58e08a8d4ae55a73a935731356b8819b1f Mon Sep 17 00:00:00 2001 From: Raouf Rahiche Date: Sun, 22 Sep 2024 14:53:13 +0100 Subject: [PATCH 1/4] add music player example --- example/lib/main.dart | 13 ++ example/lib/samples/map.dart | 40 +++--- example/lib/samples/music_playlist.dart | 174 ++++++++++++++++++++++++ 3 files changed, 211 insertions(+), 16 deletions(-) create mode 100644 example/lib/samples/music_playlist.dart diff --git a/example/lib/main.dart b/example/lib/main.dart index aa1e378..cf8af59 100644 --- a/example/lib/main.dart +++ b/example/lib/main.dart @@ -1,3 +1,4 @@ +import 'package:example/samples/music_playlist.dart'; import 'package:flutter/material.dart'; import 'package:example/samples/airbnb.dart'; import 'package:example/samples/map.dart'; @@ -52,6 +53,18 @@ class AppChooserHome extends StatelessWidget { }, child: const Text('Map App'), ), + const SizedBox(height: 20), + ElevatedButton( + onPressed: () { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => const MusicPlayerHome(), + ), + ); + }, + child: const Text('Music Playlist'), + ), ], ), ), diff --git a/example/lib/samples/map.dart b/example/lib/samples/map.dart index f626c94..5f0b411 100644 --- a/example/lib/samples/map.dart +++ b/example/lib/samples/map.dart @@ -56,14 +56,14 @@ class _HomePageState extends State { ? FloatingActionButton( onPressed: () { showModalBottomSheet( - backgroundColor: Theme.of(context).scaffoldBackgroundColor, // Use the default background color + backgroundColor: Theme.of(context).scaffoldBackgroundColor, context: context, isScrollControlled: true, builder: (BuildContext context) { return Theme( - data: Theme.of(context), // Use the current theme - - child: _buildControlsSheet()); + data: Theme.of(context), + child: _buildControlsSheet(), + ); }, ); }, @@ -152,7 +152,7 @@ class ControlsSheet extends StatefulWidget { final ValueChanged> onEdgesChanged; final ValueChanged onEdgeSizeChanged; final ValueChanged onBlurSigmaChanged; - final ValueChanged> onControlPointsChanged; // Add this callback + final ValueChanged> onControlPointsChanged; final VoidCallback onUpdate; const ControlsSheet({ @@ -164,7 +164,7 @@ class ControlsSheet extends StatefulWidget { required this.onEdgesChanged, required this.onEdgeSizeChanged, required this.onBlurSigmaChanged, - required this.onControlPointsChanged, // Include in constructor + required this.onControlPointsChanged, required this.onUpdate, }); @@ -201,7 +201,8 @@ class _ControlsSheetState extends State { child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - const Text('Settings', style: TextStyle(fontWeight: FontWeight.bold, fontSize: 16)), + const Text('Settings', + style: TextStyle(fontWeight: FontWeight.bold, fontSize: 16)), const SizedBox(height: 16), const Text('Blur position'), const SizedBox(height: 8), @@ -213,9 +214,12 @@ class _ControlsSheetState extends State { selected: _localSelectedEdges, segments: const [ ButtonSegment(value: EdgeType.topEdge, label: Text('Top')), - ButtonSegment(value: EdgeType.bottomEdge, label: Text('Bottom')), - ButtonSegment(value: EdgeType.leftEdge, label: Text('Left')), - ButtonSegment(value: EdgeType.rightEdge, label: Text('Right')), + ButtonSegment( + value: EdgeType.bottomEdge, label: Text('Bottom')), + ButtonSegment( + value: EdgeType.leftEdge, label: Text('Left')), + ButtonSegment( + value: EdgeType.rightEdge, label: Text('Right')), ], onSelectionChanged: (Set selectedEdges) { setState(() { @@ -258,7 +262,8 @@ class _ControlsSheetState extends State { }, ), const SizedBox(height: 32), - const Text('Control Points', style: TextStyle(fontWeight: FontWeight.bold, fontSize: 16)), + const Text('Control Points', + style: TextStyle(fontWeight: FontWeight.bold, fontSize: 16)), const SizedBox(height: 16), Column( crossAxisAlignment: CrossAxisAlignment.start, @@ -270,7 +275,8 @@ class _ControlsSheetState extends State { onPressed: () { setState(() { _localControlPoints.add( - ControlPoint(position: 0.5, type: ControlPointType.visible), + ControlPoint( + position: 0.5, type: ControlPointType.visible), ); widget.onControlPointsChanged(_localControlPoints); }); @@ -304,18 +310,20 @@ class _ControlsSheetState extends State { onChanged: (double value) { setState(() { cp.position = value; - _localControlPoints.sort((a, b) => a.position.compareTo(b.position)); widget.onControlPointsChanged(_localControlPoints); }); }, ), ), IconButton( - icon: Icon(cp.type == ControlPointType.visible ? Icons.visibility : Icons.visibility_off), + icon: Icon(cp.type == ControlPointType.visible + ? Icons.visibility + : Icons.visibility_off), onPressed: () { setState(() { - cp.type = - cp.type == ControlPointType.visible ? ControlPointType.transparent : ControlPointType.visible; + cp.type = cp.type == ControlPointType.visible + ? ControlPointType.transparent + : ControlPointType.visible; widget.onControlPointsChanged(_localControlPoints); }); }, diff --git a/example/lib/samples/music_playlist.dart b/example/lib/samples/music_playlist.dart new file mode 100644 index 0000000..181bcae --- /dev/null +++ b/example/lib/samples/music_playlist.dart @@ -0,0 +1,174 @@ +import 'package:flutter/material.dart'; +import 'package:soft_edge_blur/soft_edge_blur.dart'; + +class MusicPlayerHome extends StatefulWidget { + const MusicPlayerHome({super.key}); + + @override + State createState() => _MusicPlayerHomeState(); +} + +class _MusicPlayerHomeState extends State { + int _selectedIndex = 0; + final List songs = [ + Song("The Innovators", "Walter Isaacson", "17:28", + "https://picsum.photos/200"), + Song("Sapiens: A Brief History of Humankind", "Yuval Noah Harari", "15:17", + "https://picsum.photos/201"), + Song("The Phoenix Project", "Gene Kim, Kevin Behr, George Spafford", + "14:46", "https://picsum.photos/202"), + Song("Algorithms to Live By", "Brian Christian, Tom Griffiths", "11:50", + "https://picsum.photos/203"), + Song("AI Superpowers", "Kai-Fu Lee", "9:28", "https://picsum.photos/204"), + Song("The Lean Startup", "Eric Ries", "8:38", "https://picsum.photos/205"), + Song("Zero to One", "Peter Thiel, Blake Masters", "4:50", + "https://picsum.photos/206"), + Song("Hooked", "Nir Eyal", "4:40", "https://picsum.photos/207"), + Song("The Pragmatic Programmer", "David Thomas, Andrew Hunt", "9:22", + "https://picsum.photos/208"), + Song("Superintelligence", "Nick Bostrom", "14:17", + "https://picsum.photos/209"), + Song("Life 3.0", "Max Tegmark", "13:29", "https://picsum.photos/210"), + Song("The Code Breaker", "Walter Isaacson", "16:04", + "https://picsum.photos/211"), + Song("Everybody Lies", "Seth Stephens-Davidowitz", "7:39", + "https://picsum.photos/212"), + Song("Permanent Record", "Edward Snowden", "11:31", + "https://picsum.photos/213"), + Song("The Age of AI", "Henry Kissinger, Eric Schmidt, Daniel Huttenlocher", + "19:10", "https://picsum.photos/214"), + ]; + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: const Text('Music Player'), + backgroundColor: Colors.black, + ), + backgroundColor: Colors.transparent, + body: _buildBlurredEdge(), + extendBody: true, + bottomNavigationBar: Container( + decoration: const BoxDecoration( + color: Colors.transparent, + borderRadius: BorderRadius.vertical(top: Radius.circular(20)), + ), + child: Padding( + padding: const EdgeInsets.symmetric(vertical: 20, horizontal: 16), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceAround, + children: [ + _buildNavItem(0, 'Songs', Icons.music_note), + _buildNavItem(1, 'Artists', Icons.person_2_outlined), + _buildNavItem(2, 'Albums', Icons.image_outlined), + ], + ), + ), + ), + ); + } + + SoftEdgeBlur _buildBlurredEdge() { + return SoftEdgeBlur( + edges: [ + EdgeBlur( + type: EdgeType.bottomEdge, + size: 200, + sigma: 30, + tintColor: Theme.of(context).scaffoldBackgroundColor.withOpacity(0.8), + controlPoints: [ + ControlPoint( + position: 0.4, + type: ControlPointType.visible, + ), + ControlPoint( + position: 1.0, + type: ControlPointType.transparent, + ), + ], + ) + ], + child: _buildContent(), + ); + } + + Stack _buildContent() { + return Stack( + children: [ + Container( + color: Theme.of(context).scaffoldBackgroundColor, + child: ListView.builder( + itemCount: songs.length, + itemBuilder: (context, index) { + return ListTile( + leading: ClipRRect( + borderRadius: BorderRadius.circular(4), + child: Image.network( + songs[index].imageUrl, + width: 50, + height: 50, + fit: BoxFit.cover, + errorBuilder: (context, error, stackTrace) { + return const Icon(Icons.music_note, size: 50); + }, + ), + ), + title: Text(songs[index].title), + subtitle: Text(songs[index].artist), + trailing: Text(songs[index].duration), + ); + }, + ), + ), + Align( + alignment: Alignment.bottomCenter, + child: Container( + color: Theme.of(context).scaffoldBackgroundColor, + height: 50, + ), + ) + ], + ); + } + + Widget _buildNavItem(int index, String label, IconData icon) { + final isSlected = _selectedIndex == index; + return GestureDetector( + onTap: () => setState(() => _selectedIndex = index), + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + AnimatedContainer( + duration: Durations.medium1, + decoration: BoxDecoration( + color: isSlected ? Colors.white : Colors.transparent, + borderRadius: BorderRadius.circular(24), + ), + padding: const EdgeInsets.symmetric(vertical: 4, horizontal: 16), + child: Icon( + icon, + color: isSlected ? Colors.black : Colors.grey, + ), + ), + const SizedBox(height: 4), + Text( + label, + style: TextStyle( + color: isSlected ? Colors.white : Colors.grey, + fontSize: 12, + ), + ), + ], + ), + ); + } +} + +class Song { + final String title; + final String artist; + final String duration; + final String imageUrl; + + Song(this.title, this.artist, this.duration, this.imageUrl); +} From b9d1811e7c66ab592cffbd43e1cacb0dd75bfa7f Mon Sep 17 00:00:00 2001 From: Raouf Rahiche Date: Sun, 22 Sep 2024 14:58:05 +0100 Subject: [PATCH 2/4] update goldens --- test/goldens/soft_edge_blur_bottom_edge.png | Bin 6801 -> 7206 bytes .../goldens/soft_edge_blur_multiple_edges.png | Bin 18060 -> 17451 bytes test/goldens/soft_edge_blur_right_edge.png | Bin 7933 -> 8249 bytes test/soft_edge_blur_godel_test.dart | 16 ++++++++-------- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/test/goldens/soft_edge_blur_bottom_edge.png b/test/goldens/soft_edge_blur_bottom_edge.png index 3b2613089a3dc495538cd24c7828f1bcb414ebd7..ec557a1ab5de343341e71f6d5760a132c667d84b 100644 GIT binary patch delta 4167 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 delta 3754 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 literal 18060 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%0D=-{Eah8!`}|96B0=O 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 F{x827iEaP@ diff --git a/test/goldens/soft_edge_blur_right_edge.png b/test/goldens/soft_edge_blur_right_edge.png index 42970d6c67650bd9fbd8b13800e542a24b573765..b433295f2f1e1c7488f19869174b9aa67f8c823f 100644 GIT binary patch literal 8249 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 literal 7933 zcmeHL`9E9f{y(at+M#WdHRXiKzXTC;Sqq;$kuLQ%Wmc1#;h2%Q!! z!+e>!ZpStug4()}q$Sc+8%u~*TH!`)Aq0v0r0sou|AhNX{o;h@Ir%)F^ZvY-ll|>! z5B+V%+aL(iKY7CKdkE4thoDW~x;o%5cN4B&2EVl8zV|o=)%KZAfe)MGj-5QC3x3jc zgUAqss66R*^h{ETY}6%pe^0{T>s{ZC8a8f9_SM2hxo$t@xZ@de^Ru@G3@zhD-Dkhc z^{kE>VvS>`Vzmu6kJM6+qfi@XmPcC3{a=Qk8J$fn^7Hx52aA0Wmrf>A6`dQ>fS|U_ z4aL}oJaJ=N;(VuCX4bKGzL}DtdK_S=I)z3e<}+SX$%e`@wM0AJ9(pi)eq$y8RJo$s zX%0cIaIH-cbPM*sx=daJ#ULzD<*JL3{pkmpIT;9T=#}$kUF*q`ow6TpyzyeCFUCPo z^XFQRJXadCR))U8sb7_%PxUD`K@U{AJN?}#R4Ruo$fc9XoCJK-fWsDFN-tU9TOGh7 zS(b0z31uGHW!_d~A8MUDFy?rQ{1D9atuQxoXtZ}%AK)l*;Z9wHjq6=V5u6ZEQMv#yu53vqwvDBgMb+DLCg8X}@H z$tS1yjsXPCxM$A2=u5SWs-yjDFw`z;)0-kRe9bH3(ENhK*P!G5;O39+k9;XHs4^T1 zaqFd&&{$84rAzUVV?*hw+_F-B~KKiHNzo#1X3y7Ki9I+7*pP@-0D35;I5_ z9OwE@^R}!KJ}f5E-YmIQ@9!=@yR#gnHqJ!njWja|T1L4h`AXoqDm%X*VaSmQN##(U zSuQu&=MI}^03I`KpKB64HE+77X7$u>)UdT`j&nahg^I>6=s@e6e=@cIrsV3MX82_0-YKTSW|BGt08$h$rRZo(JeC2mA^tt!uELXcAy z^g8@4w<0NeIf^awWi z2R`w{SFk-4ODQ@myA-?!Edn3-1ch^+NCfz>)_U~A5jH#7FsPW{+&4sxsLhYzA_m~* z(lyVtX@YQ?ZMq9|Gx2lRq(CBRo8SxQ0`%3W+CWuKy-%UdWL#t z?6sBp-_h!o(auK~*82lCWSSZ0tKZHd)QO9nq*>3lCJT|+c$Qc_K+ImYAFsI}#ug;= zik5q&9bKuG^Y#I}F=2*(074xN;MZ=W{pgn?+mWU+?`tppa6KKRlu{Vl*X_-KzLcO6 z-NY6M#KY_ooACK4oz2jz831)O1}O}mIvc?c&0=uE(30#a7`#x)5y1#lJEw{C{ADBh zA|jg5WoI=nNJ*p4k8U_YnS}s>DZ@Kr*kiqxp6@2QUCorT(TkBj}b;^AYdruYFqS$gvRS%Q;jfZtny>BEeZ-^vSEd$ zF*#Jv#pWysJk&#A*P1bs&i3f7kqGrTtCigb@WL>@L~4OaF^LIxVBd#>3EQ&M+=*^4 zIWUYcB6id=;dx6L*rpRcD1sXW0rRB7_evvNy0?N+vj7KO)8nKuX8z3>sp$wqsm7uYkUI;tZsYl=O|=DSwTPz0gXywgvncp2z>JeZGe$YS)UI~C?{g3 zw>}~BnaOzw?7*o>Vg^Fs*ke=f9uc?YWbKdj+%g7U(T#_o5gM41z4Bc|Gk8mso6E64 z>=&eVXTz`@L3!|u$L`uP$&{mpezXCla_;J-7L}a;Hn`XQTnoE9hLm0)Ftj?Qfp8}D zy5+5}Uh;isom?!Ec!Ac)a;FR;F301W!qBw&!!ugYt8@)VN|a_XqFWtxPkj&l^d|h| z*_orUY0}S}6f!BOr5JksNhEC)+d1}z`@C9wE6?8SY3iDKC1DR3sU7C7NtaqA?0-ui z#|cj*y{UW=b|{hAZwIIg{71jC-JJb>71O%zX+q@gCxVHaRVB-jq1mQ(D9~=i@yxk5 zf;iXQ3nt0FCvKM+`gVsq2xMsUr~E0)KfgvuZi@G9DrmE-lWg zKY7(L?B$=K7*ZlIpm-V*tjo0Bv>Ad9XbJ+CS$lqQNmdPoN>Ug4Rp9WH%8T={>I`PC zFlsyWEhrc{F*G5&QhTv<`zJ%ZwW0xu_VHmS==WfT4ATGzeFq@ytxXss`W_((kiLDh3^|nyx|prvbhnQHJc zGWV|)1JnG<)F$aj=uu{>UoOE*7f>dkhkcUZGZEg^Fx#I{Y#7|{x02)gW6M4X-v>H| zIGQ=fP&^|OLMmo4W**-z_J6}RG$&DV(5|)>P5pW&EJ1T$X~x8=^V*4?Nja$u11FW~ z-#Pj`P-U5G~T!kWiBL1^*C>Ln``9ra-v3IMOhu( zbo}t3_M3&bDpR3zF`b@UXQM%n2E&Z>-3SRh2T-7}oPg{0I}#`+Qu5^_K%7DN@h>&2 zTs2;!^3JkyaFnQg>1Tp*T)5KSiw5tvukS>qQL4pVG>^4 z{wW|wfDWe?p66c+gC{z8SF155vvd|K)sFy_CrR29zP>(WCt6z=-8c+{K(5G8&s%q_ zB{oxB)U-}uJb|F~bgCY|^Qv_j>cSlxM{tT2vS(Tljn+1uQJb7i18ONY7-;TdPtL=l zr4r%Nq%<@+JAgSGIY#pY0$HXHe8C;9*Y_Ix%S5&*eSdg6jMp@BBJz_%II7a`cPM@x+(2TQ%c-MC;M6;_Ey6PE86Is?d%&CPy$qs*3OAIH}r#@wOGq zh{E3HMHmo^333yVRYm4|s=6nWWHPAvmE1{(Kn5W_NEKk3iYu?#_uO`MGA0}zJtV$M zA_YY&-hpIP<5(Py*$%Mha8es)Ca1#%UFFVtZfjM+23iA@3@ZxkvQ4q9VH;pY4c&oT z4WS2`P3Ml7xg9Rcyp1_#i)$k;Gwhrc4ablbO)xAlr@*V&IpeCeVsi{VleU2!?O=yL zg^Yl;cyNj;gc4$BXvUdnhBuNBIY8{7`=xPtfU@b^Kz zlE9ov%z587E|{>O>ALs8y4UE?Pj^32wvR8lT8&02LVs*rQrjI9q*`Nev7+KQo&8=t z&A`3y0K$8u;K!PW&m`kjkO&W4VI@GfX-eMor5R#O)LFO4Cblj4jjWCY9-a zvieZ9=YN^i|JV`YVOm1giPj-<`lVl#zmiDjdc0sr*Y_OtLh;AhHOybk>kAXyy-nxY ziOgP3u@|8f(kz$(MJy_?re&h&3dupGlcAj68Y9OHb9EBIKRq(%Y=>omRV1IYZnZS_ zjS+#rY@TjCa49*lmKVywJED`E@JC^L(LnP z;Tvk@S39=?Mgv}C4`0yVgDGz$SR#@2dkcl}eg6<3!DmD1K%5yR*=gVVWMV_?^Ea*Q zY~L(Ro27|>jj`U8HI_5N^K?0eiYmBB($Di$MsJ1YhCzv_=toG}+jDeu-Q6GaD}#N8 zkeKM1?85~YwcdSWWuXgJk~X8?a!0n}Bse`^Z+r-20bof1F8kNzOC$bf-_d!OMmBS7 z{A?9vf~fJgaks!BD}lOY#kZX8vp9#Y=aP%|IGE+!J~SYe4t6xCsQAK*n#i~YNUohA z82?I|&tAiR9TiB>!A00i?BGPMMLzj23b#5`pvDIyofi_|=hC-PsPO_q+Hjg$>HPi? zGx{*5YY|Kilbg`X^J>`VVp`l&Z%Zq)08Q3#ysg4~sL*ez*cHxK_~euRS+Qi~*Zc-{ zKqE*t8bJ!t2`W>9l2cT?OO7YaBO)TqcM47c_$v&_|mQ+1s-@~U3<*HQ1MkrrP z2lhfjBrU)Hn|DQO!im3}vEYP#_$4Or4vZdo)TTmgYVLQDI!OPhV%K=R9ai9opAEE(!XfM0ID!BM18RW0- zn}y9d8f{v-q(_ZdY|cdh=D+DdP3xU~kE_arT$pfSM>`*1SbsUTKHr-0 zbL&cFr&>6x{@YBss%H$lK0BE|FDgum_H1L@iG<#DLW5bL(5olUR4vdfP~$HMfozwoH`Q$d$k>8+!}Tx&4KWI zd{hrOJdHB=hPW~NpH~UWdAi~GeBZuZ{U}>2d44;JWfYOrt3uA&1OicEkt6WqHA^c- z;?|912(ktwv&cL(nLNC~M~0-mq5G&pcqb_N^uD_cZ=OCJEgB{_8O4N4fv?u&m`lp= zt>-8R6f5OMa^F3gk^BoE;k_wrfziAny1=^-U&H5%pL?{qvn=Xj!j&c&M<8h9J78qu zF~uN5GQ;?R;aDWjZ83T5{`93Cw~cH<{)I=14LmK;Vgr|V`?hNAPc+!IZ08n8 zqZRq_nn1YnqFC5k@ymGwo*|3&~ro?gL^I>P(*imwNR#(dRt0^SQXT~+|JtMROco$xOyv9a? z0NR#k2Ui?)sQc|{5v4koMiH;BTh^fQ?GAj*1Y3yYzkM?rlx`bIg$ML$ykD7_BjCiko#-~${=KgVx7~p?f zHhAD>4cFql!|YI>fx{&nXt&cf==GBtNv3J5{Q@KJOBXcbMt^LzP?=j&!49ncY6p0O z1OXYjT>Po*D^V0{m|L2scq^1Ge(SG+M+VT6n3Ag^WbV=#A*xQnUWk%1qFf^4(p2zw z5tIzQe!D)sk{jT;%_ALxUQCXuK7BxHENfFwH^{Len&P|lbUXhZ;s`+%<;OmJ1i{B)_{anw8S$eWe3Zri eg(sL8(^{?j>DsfHxd(uVp_A^X-D;0ry!s!JILJc) diff --git a/test/soft_edge_blur_godel_test.dart b/test/soft_edge_blur_godel_test.dart index 92cf28b..5d9aa2e 100644 --- a/test/soft_edge_blur_godel_test.dart +++ b/test/soft_edge_blur_godel_test.dart @@ -88,11 +88,11 @@ void main() { sigma: 10.0, controlPoints: [ ControlPoint( - position: 1.0, + position: 0.5, type: ControlPointType.visible, ), ControlPoint( - position: 0.5, + position: 1.0, type: ControlPointType.transparent, ), ], @@ -169,11 +169,11 @@ void main() { controlPoints: [ ControlPoint( position: 0.5, - type: ControlPointType.transparent, + type: ControlPointType.visible, ), ControlPoint( position: 1.0, - type: ControlPointType.visible, + type: ControlPointType.transparent, ), ], ), @@ -238,11 +238,11 @@ void main() { sigma: 10.0, controlPoints: [ ControlPoint( - position: 1.0, + position: 0.5, type: ControlPointType.visible, ), ControlPoint( - position: 0.5, + position: 1.0, type: ControlPointType.transparent, ), ], @@ -254,11 +254,11 @@ void main() { controlPoints: [ ControlPoint( position: 0.5, - type: ControlPointType.transparent, + type: ControlPointType.visible, ), ControlPoint( position: 1.0, - type: ControlPointType.visible, + type: ControlPointType.transparent, ), ], ), From e32c173f6bdd3884bd6ee711c22e088a9f5f6dd1 Mon Sep 17 00:00:00 2001 From: Raouf Rahiche Date: Sun, 22 Sep 2024 14:58:31 +0100 Subject: [PATCH 3/4] remove update goldens step from CI --- .github/workflows/flutter_tests.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/.github/workflows/flutter_tests.yml b/.github/workflows/flutter_tests.yml index 3ad587e..405a14a 100644 --- a/.github/workflows/flutter_tests.yml +++ b/.github/workflows/flutter_tests.yml @@ -25,8 +25,5 @@ jobs: - name: Install dependencies run: flutter pub get - - name: Run Flutter Tests - run: flutter test --update-goldens - - name: Run Widget Tests run: flutter test test/soft_edge_blur_test.dart From 6415ee251cdf104d660d539675801c566e4602ef Mon Sep 17 00:00:00 2001 From: Raouf Rahiche Date: Sun, 22 Sep 2024 15:05:43 +0100 Subject: [PATCH 4/4] new version 0.1.2 --- CHANGELOG.md | 4 ++++ README.md | 19 ++++++++----------- pubspec.yaml | 2 +- 3 files changed, 13 insertions(+), 12 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d40087b..0cb885e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.1.2 +* Resposnsive and updated map demo thanks to @sgruhier +* Added a new music playlist example + ## 0.1.1 * Breaking change: EdgeBlur control now requires the use of named parameters * Added support for tint color diff --git a/README.md b/README.md index 69d1ef7..8332cdd 100644 --- a/README.md +++ b/README.md @@ -9,23 +9,20 @@ A Flutter package that provides a customizable soft progressive blur effect for Map blurred - # Example video - - -https://github.com/user-attachments/assets/3a708b6d-5ed0-4717-a3c7-313c4ed7e2b6 - - - - -## Example images -## Control points +## Demos +## Map - with control points | ![](https://i.imgur.com/ZHTocas.png) | ![](https://i.imgur.com/ejYRoGu.png) | |--------------------------------------|--------------------------------------| | ![](https://i.imgur.com/2B4RJo2.png) | ![](https://i.imgur.com/lrVGtHU.png) | -## Tint Color +## Airbnb Card with tint color + Screenshot 2024-09-17 at 22 22 01 +## Music play list with tint color + +Screenshot 2024-09-17 at 22 22 01 + ## Usage Import the package in your Dart code: diff --git a/pubspec.yaml b/pubspec.yaml index ac01c48..180b8b9 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,6 +1,6 @@ name: soft_edge_blur description: "A customizable Flutter widget that applies a soft progressive blur effect to one or more edges of its child widget." -version: 0.1.1 +version: 0.1.2 repository: https://github.com/Rahiche/soft_edge_blur environment: