mobile bluesky app made with flutter lazurite.stormlightlabs.org/
mobile bluesky flutter
3
fork

Configure Feed

Select the types of activity you want to include in your feed.

fix: profile tab navigation

+102 -67
+3 -25
assets/tangled.svg
··· 1 - <svg xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" version="1.1" id="svg1" width="24.122343" height="23.274094" viewBox="0 0 24.122343 23.274094" sodipodi:docname="tangled_dolly_face_only.svg" inkscape:export-filename="tangled_dolly_face_only_white_on_trans.svg" inkscape:export-xdpi="96" inkscape:export-ydpi="96" inkscape:version="1.4 (e7c3feb100, 2024-10-09)"> 2 - <defs id="defs1"> 3 - <filter style="color-interpolation-filters:sRGB" inkscape:menu-tooltip="Fades hue progressively to white" inkscape:menu="Color" inkscape:label="Hue to White" id="filter24" x="0" y="0" width="1" height="1"> 4 - <feColorMatrix values="1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 1 " type="matrix" result="r" in="SourceGraphic" id="feColorMatrix17"/> 5 - <feColorMatrix values="0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 1 " type="matrix" result="g" in="SourceGraphic" id="feColorMatrix18"/> 6 - <feColorMatrix values="0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 1 " type="matrix" result="b" in="SourceGraphic" id="feColorMatrix19"/> 7 - <feBlend result="minrg" in="r" mode="darken" in2="g" id="feBlend19"/> 8 - <feBlend result="p" in="minrg" mode="darken" in2="b" id="feBlend20"/> 9 - <feBlend result="maxrg" in="r" mode="lighten" in2="g" id="feBlend21"/> 10 - <feBlend result="q" in="maxrg" mode="lighten" in2="b" id="feBlend22"/> 11 - <feComponentTransfer result="q2" in="q" id="feComponentTransfer22"> 12 - <feFuncR slope="0" type="linear" id="feFuncR22"/> 13 - </feComponentTransfer> 14 - <feBlend result="pq" in="p" mode="lighten" in2="q2" id="feBlend23"/> 15 - <feColorMatrix values="-1 1 0 0 0 -1 1 0 0 0 -1 1 0 0 0 0 0 0 0 1 " type="matrix" result="qminp" in="pq" id="feColorMatrix23"/> 16 - <feComposite k3="1" operator="arithmetic" result="qminpc" in="qminp" in2="qminp" id="feComposite23" k1="0" k2="0" k4="0"/> 17 - <feBlend result="result2" in2="SourceGraphic" mode="screen" id="feBlend24"/> 18 - <feComposite operator="in" in="result2" in2="SourceGraphic" result="result1" id="feComposite24"/> 19 - </filter> 20 - </defs> 21 - <sodipodi:namedview id="namedview1" pagecolor="#ffffff" bordercolor="#000000" borderopacity="0.25" inkscape:showpageshadow="2" inkscape:pageopacity="0.0" inkscape:pagecheckerboard="true" inkscape:deskcolor="#d5d5d5" inkscape:zoom="7.0916564" inkscape:cx="38.84847" inkscape:cy="31.515909" inkscape:window-width="1920" inkscape:window-height="1080" inkscape:window-x="0" inkscape:window-y="0" inkscape:window-maximized="0" inkscape:current-layer="g1"> 22 - <inkscape:page x="0" y="0" width="24.122343" height="23.274094" id="page2" margin="0" bleed="0"/> 23 - </sodipodi:namedview> 24 - <g inkscape:groupmode="layer" inkscape:label="Image" id="g1" transform="translate(-0.4388285,-0.8629527)"> 25 - <path style="fill:#000000;fill-opacity:1;stroke-width:0.111183;filter:url(#filter24)" d="m 16.348974,24.09935 -0.06485,-0.03766 -0.202005,-0.0106 -0.202008,-0.01048 -0.275736,-0.02601 -0.275734,-0.02602 v -0.02649 -0.02648 l -0.204577,-0.04019 -0.204578,-0.04019 -0.167616,-0.08035 -0.167617,-0.08035 -0.0014,-0.04137 -0.0014,-0.04137 -0.266473,-0.143735 -0.266475,-0.143735 -0.276098,-0.20335 -0.2761,-0.203347 -0.262064,-0.251949 -0.262064,-0.25195 -0.22095,-0.284628 -0.220948,-0.284629 -0.170253,-0.284631 -0.170252,-0.284628 -0.01341,-0.0144 -0.0134,-0.0144 -0.141982,0.161297 -0.14198,0.1613 -0.22313,0.21426 -0.223132,0.214264 -0.186025,0.146053 -0.186023,0.14605 -0.252501,0.163342 -0.252502,0.163342 -0.249014,0.115348 -0.249013,0.115336 0.0053,0.03241 0.0053,0.03241 -0.1716725,0.04599 -0.171669,0.046 -0.3379966,0.101058 -0.3379972,0.101058 -0.1778925,0.04506 -0.1778935,0.04508 -0.3913655,0.02601 -0.3913643,0.02603 -0.3557868,-0.03514 -0.3557863,-0.03514 -0.037426,-0.03029 -0.037427,-0.03029 -0.076924,0.02011 -0.076924,0.02011 -0.050508,-0.05051 -0.050405,-0.05056 L 6.6604532,23.110188 6.451745,23.063961 6.1546135,22.960559 5.8574835,22.857156 5.5319879,22.694039 5.2064938,22.530922 4.8793922,22.302961 4.5522905,22.075005 4.247598,21.786585 3.9429055,21.49817 3.7185335,21.208777 3.4941628,20.919385 3.3669822,20.705914 3.239803,20.492443 3.1335213,20.278969 3.0272397,20.065499 2.9015252,19.7275 2.7758105,19.389504 2.6925225,18.998139 2.6092345,18.606774 2.6096814,17.91299 2.6101284,17.219208 2.6744634,16.90029 2.7387984,16.581374 2.8474286,16.242088 2.9560588,15.9028 3.1137374,15.583492 3.2714148,15.264182 3.3415068,15.150766 3.4115988,15.03735 3.3127798,14.96945 3.2139618,14.90157 3.0360685,14.800239 2.8581753,14.698908 2.5913347,14.503228 2.3244955,14.307547 2.0621238,14.055599 1.7997507,13.803651 1.6111953,13.56878 1.4226411,13.333906 1.2632237,13.087474 1.1038089,12.841042 0.97442,12.575195 0.8450307,12.30935 0.724603,11.971351 0.6041766,11.633356 0.52150365,11.241991 0.4388285,10.850626 0.44091592,10.156842 0.44300333,9.4630594 0.54235911,9.0369608 0.6417149,8.6108622 0.7741173,8.2694368 0.9065196,7.9280115 1.0736303,7.6214262 1.2407515,7.3148397 1.45931,7.0191718 1.6778685,6.7235039 1.9300326,6.4611321 2.1821966,6.1987592 2.4134579,6.0137228 2.6447193,5.8286865 2.8759792,5.6776409 3.1072406,5.526594 3.4282004,5.3713977 3.7491603,5.2162016 3.9263009,5.1508695 4.1034416,5.0855373 4.2813348,4.7481598 4.4592292,4.4107823 4.6718,4.108422 4.8843733,3.8060618 5.198353,3.4805372 5.5123313,3.155014 5.7685095,2.9596425 6.0246877,2.7642722 6.329187,2.5851365 6.6336863,2.406002 6.9497657,2.2751596 7.2658453,2.1443184 7.4756394,2.0772947 7.6854348,2.01027 8.0825241,1.931086 8.4796139,1.851902 l 0.5870477,0.00291 0.5870469,0.00291 0.4447315,0.092455 0.444734,0.092455 0.302419,0.1105495 0.302417,0.1105495 0.329929,0.1646046 0.32993,0.1646033 0.239329,-0.2316919 0.239329,-0.2316919 0.160103,-0.1256767 0.160105,-0.1256767 0.160102,-0.1021909 0.160105,-0.1021899 0.142315,-0.082328 0.142314,-0.082328 0.231262,-0.1090091 0.231259,-0.1090091 0.26684,-0.098743 0.266839,-0.098743 0.320208,-0.073514 0.320209,-0.073527 0.355787,-0.041833 0.355785,-0.041834 0.426942,0.023827 0.426945,0.023828 0.355785,0.071179 0.355788,0.0711791 0.284627,0.09267 0.284629,0.09267 0.28514,0.1310267 0.28514,0.1310255 0.238179,0.1446969 0.238174,0.1446979 0.259413,0.1955332 0.259413,0.1955319 0.290757,0.296774 0.290758,0.2967753 0.151736,0.1941581 0.151734,0.1941594 0.135326,0.2149951 0.135327,0.2149952 0.154755,0.3202073 0.154758,0.3202085 0.09409,0.2677358 0.09409,0.267737 0.06948,0.3319087 0.06948,0.3319099 0.01111,0.00808 0.01111,0.00808 0.444734,0.2173653 0.444734,0.2173665 0.309499,0.2161102 0.309497,0.2161101 0.309694,0.2930023 0.309694,0.2930037 0.18752,0.2348726 0.187524,0.2348727 0.166516,0.2574092 0.166519,0.2574108 0.15273,0.3260252 0.152734,0.3260262 0.08972,0.2668403 0.08971,0.2668391 0.08295,0.3913655 0.08295,0.3913652 -6.21e-4,0.6582049 -6.21e-4,0.658204 -0.06362,0.315725 -0.06362,0.315725 -0.09046,0.289112 -0.09046,0.289112 -0.122759,0.281358 -0.12276,0.281356 -0.146626,0.252323 -0.146629,0.252322 -0.190443,0.258668 -0.190448,0.258671 -0.254911,0.268356 -0.254911,0.268355 -0.286872,0.223127 -0.286874,0.223127 -0.320203,0.187693 -0.320209,0.187693 -0.04347,0.03519 -0.04347,0.03521 0.0564,0.12989 0.0564,0.129892 0.08728,0.213472 0.08728,0.213471 0.189755,0.729363 0.189753,0.729362 0.0652,0.302417 0.0652,0.302419 -0.0018,0.675994 -0.0018,0.675995 -0.0801,0.373573 -0.08009,0.373577 -0.09,0.266839 -0.09,0.26684 -0.190389,0.391364 -0.19039,0.391366 -0.223169,0.320207 -0.223167,0.320209 -0.303585,0.315294 -0.303584,0.315291 -0.284631,0.220665 -0.284629,0.220663 -0.220128,0.132359 -0.220127,0.132358 -0.242395,0.106698 -0.242394,0.106699 -0.08895,0.04734 -0.08895,0.04733 -0.249052,0.07247 -0.24905,0.07247 -0.322042,0.0574 -0.322044,0.0574 -0.282794,-0.003 -0.282795,-0.003 -0.07115,-0.0031 -0.07115,-0.0031 -0.177894,-0.0033 -0.177893,-0.0033 -0.124528,0.02555 -0.124528,0.02555 z m -4.470079,-5.349839 0.214838,-0.01739 0.206601,-0.06782 0.206602,-0.06782 0.244389,-0.117874 0.244393,-0.11786 0.274473,-0.206822 0.27447,-0.20682 0.229308,-0.257201 0.229306,-0.2572 0.219161,-0.28463 0.219159,-0.284629 0.188541,-0.284628 0.188543,-0.28463 0.214594,-0.373574 0.214593,-0.373577 0.133861,-0.312006 0.133865,-0.312007 0.02861,-0.01769 0.02861,-0.01769 0.197275,0.26212 0.197278,0.262119 0.163613,0.150814 0.163614,0.150814 0.201914,0.09276 0.201914,0.09276 0.302417,0.01421 0.302418,0.01421 0.213472,-0.08025 0.213471,-0.08025 0.200606,-0.204641 0.200606,-0.204642 0.09242,-0.278887 0.09241,-0.278888 0.05765,-0.302418 0.05764,-0.302416 L 18.41327,13.768114 18.39502,13.34117 18.31849,12.915185 18.24196,12.4892 18.15595,12.168033 18.06994,11.846867 17.928869,11.444534 17.787801,11.042201 17.621278,10.73296 17.454757,10.423723 17.337388,10.263619 17.220021,10.103516 17.095645,9.9837986 16.971268,9.8640816 16.990048,9.6813736 17.008828,9.4986654 16.947568,9.249616 16.886308,9.0005655 16.752419,8.7159355 16.618521,8.4313217 16.435707,8.2294676 16.252892,8.0276114 16.079629,7.9004245 15.906366,7.773238 l -0.20429,0.1230127 -0.204289,0.1230121 -0.26702,0.059413 -0.267022,0.059413 -0.205761,-0.021508 -0.205766,-0.021508 -0.23495,-0.08844 -0.234953,-0.08844 -0.118429,-0.090334 -0.118428,-0.090333 h -0.03944 -0.03944 L 13.711268,7.8540732 13.655958,7.9706205 13.497227,8.1520709 13.338499,8.3335203 13.168394,8.4419112 12.998289,8.550301 12.777045,8.624223 12.5558,8.698155 H 12.275611 11.995429 L 11.799973,8.6309015 11.604513,8.5636472 11.491311,8.5051061 11.37811,8.446565 11.138172,8.2254579 10.898231,8.0043497 l -0.09565,-0.084618 -0.09565,-0.084613 -0.218822,0.198024 -0.218822,0.1980231 -0.165392,0.078387 -0.1653925,0.078387 -0.177894,0.047948 -0.177892,0.047948 L 9.3635263,8.4842631 9.144328,8.4846889 8.9195029,8.4147138 8.6946778,8.3447386 8.5931214,8.4414036 8.491565,8.5380686 8.3707618,8.7019598 8.2499597,8.8658478 8.0802403,8.9290726 7.9105231,8.9922974 7.7952769,9.0780061 7.6800299,9.1637148 7.5706169,9.2778257 7.4612038,9.3919481 7.1059768,9.9205267 6.7507497,10.449105 l -0.2159851,0.449834 -0.2159839,0.449834 -0.2216572,0.462522 -0.2216559,0.462523 -0.1459343,0.337996 -0.1459342,0.337998 -0.055483,0.220042 -0.055483,0.220041 -0.015885,0.206903 -0.015872,0.206901 0.034307,0.242939 0.034307,0.24294 0.096281,0.196632 0.096281,0.196634 0.143607,0.125222 0.1436071,0.125222 0.1873143,0.08737 0.1873141,0.08737 0.2752084,0.002 0.2752084,0.002 0.2312297,-0.09773 0.231231,-0.09772 0.1067615,-0.07603 0.1067614,-0.07603 0.3679062,-0.29377 0.3679065,-0.293771 0.026804,0.01656 0.026804,0.01656 0.023626,0.466819 0.023626,0.466815 0.088326,0.513195 0.088326,0.513193 0.08897,0.364413 0.08897,0.364411 0.1315362,0.302418 0.1315352,0.302418 0.1051964,0.160105 0.1051954,0.160103 0.1104741,0.11877 0.1104731,0.118769 0.2846284,0.205644 0.2846305,0.205642 0.144448,0.07312 0.144448,0.07312 0.214787,0.05566 0.214787,0.05566 0.245601,0.03075 0.245602,0.03075 0.204577,-0.0125 0.204578,-0.0125 z m 0.686342,-3.497495 -0.11281,-0.06077 -0.106155,-0.134033 -0.106155,-0.134031 -0.04406,-0.18371 -0.04406,-0.183707 0.02417,-0.553937 0.02417,-0.553936 0.03513,-0.426945 0.03513,-0.426942 0.07225,-0.373576 0.07225,-0.373575 0.05417,-0.211338 0.05417,-0.211339 0.0674,-0.132112 0.0674,-0.132112 0.132437,-0.10916 0.132437,-0.109161 0.187436,-0.04195 0.187438,-0.04195 0.170366,0.06469 0.170364,0.06469 0.114312,0.124073 0.114313,0.124086 0.04139,0.18495 0.04139,0.184951 -0.111218,0.459845 -0.111219,0.459844 -0.03383,0.26584 -0.03382,0.265841 -0.03986,0.818307 -0.03986,0.818309 -0.0378,0.15162 -0.03779,0.151621 -0.11089,0.110562 -0.110891,0.110561 -0.114489,0.04913 -0.114489,0.04913 -0.187932,-0.0016 -0.187929,-0.0016 z m -2.8087655,-0.358124 -0.146445,-0.06848 -0.088025,-0.119502 -0.088024,-0.119502 -0.038581,-0.106736 -0.038581,-0.106736 -0.02237,-0.134956 -0.02239,-0.134957 -0.031955,-0.46988 -0.031955,-0.469881 0.036203,-0.444733 0.036203,-0.444731 0.048862,-0.215257 0.048862,-0.215255 0.076082,-0.203349 0.076081,-0.203348 0.0936,-0.111244 0.0936,-0.111245 0.143787,-0.06531 0.1437865,-0.06532 h 0.142315 0.142314 l 0.142314,0.06588 0.142316,0.06588 0.093,0.102325 0.093,0.102325 0.04042,0.120942 0.04042,0.120942 v 0.152479 0.152477 l -0.03347,0.08804 -0.03347,0.08805 -0.05693,0.275653 -0.05693,0.275651 2.11e-4,0.430246 2.12e-4,0.430243 0.04294,0.392646 0.04295,0.392647 -0.09189,0.200702 -0.09189,0.200702 -0.148688,0.0984 -0.148687,0.0984 -0.20136,0.01212 -0.2013595,0.01212 z" id="path4"/> 1 + <svg xmlns="http://www.w3.org/2000/svg" version="1.1" id="svg1" width="24.122343" height="23.274094" viewBox="0 0 24.122343 23.274094"> 2 + <g id="g1" transform="translate(-0.4388285,-0.8629527)"> 3 + <path style="fill:#000000;fill-opacity:1;stroke-width:0.111183" d="m 16.348974,24.09935 -0.06485,-0.03766 -0.202005,-0.0106 -0.202008,-0.01048 -0.275736,-0.02601 -0.275734,-0.02602 v -0.02649 -0.02648 l -0.204577,-0.04019 -0.204578,-0.04019 -0.167616,-0.08035 -0.167617,-0.08035 -0.0014,-0.04137 -0.0014,-0.04137 -0.266473,-0.143735 -0.266475,-0.143735 -0.276098,-0.20335 -0.2761,-0.203347 -0.262064,-0.251949 -0.262064,-0.25195 -0.22095,-0.284628 -0.220948,-0.284629 -0.170253,-0.284631 -0.170252,-0.284628 -0.01341,-0.0144 -0.0134,-0.0144 -0.141982,0.161297 -0.14198,0.1613 -0.22313,0.21426 -0.223132,0.214264 -0.186025,0.146053 -0.186023,0.14605 -0.252501,0.163342 -0.252502,0.163342 -0.249014,0.115348 -0.249013,0.115336 0.0053,0.03241 0.0053,0.03241 -0.1716725,0.04599 -0.171669,0.046 -0.3379966,0.101058 -0.3379972,0.101058 -0.1778925,0.04506 -0.1778935,0.04508 -0.3913655,0.02601 -0.3913643,0.02603 -0.3557868,-0.03514 -0.3557863,-0.03514 -0.037426,-0.03029 -0.037427,-0.03029 -0.076924,0.02011 -0.076924,0.02011 -0.050508,-0.05051 -0.050405,-0.05056 L 6.6604532,23.110188 6.451745,23.063961 6.1546135,22.960559 5.8574835,22.857156 5.5319879,22.694039 5.2064938,22.530922 4.8793922,22.302961 4.5522905,22.075005 4.247598,21.786585 3.9429055,21.49817 3.7185335,21.208777 3.4941628,20.919385 3.3669822,20.705914 3.239803,20.492443 3.1335213,20.278969 3.0272397,20.065499 2.9015252,19.7275 2.7758105,19.389504 2.6925225,18.998139 2.6092345,18.606774 2.6096814,17.91299 2.6101284,17.219208 2.6744634,16.90029 2.7387984,16.581374 2.8474286,16.242088 2.9560588,15.9028 3.1137374,15.583492 3.2714148,15.264182 3.3415068,15.150766 3.4115988,15.03735 3.3127798,14.96945 3.2139618,14.90157 3.0360685,14.800239 2.8581753,14.698908 2.5913347,14.503228 2.3244955,14.307547 2.0621238,14.055599 1.7997507,13.803651 1.6111953,13.56878 1.4226411,13.333906 1.2632237,13.087474 1.1038089,12.841042 0.97442,12.575195 0.8450307,12.30935 0.724603,11.971351 0.6041766,11.633356 0.52150365,11.241991 0.4388285,10.850626 0.44091592,10.156842 0.44300333,9.4630594 0.54235911,9.0369608 0.6417149,8.6108622 0.7741173,8.2694368 0.9065196,7.9280115 1.0736303,7.6214262 1.2407515,7.3148397 1.45931,7.0191718 1.6778685,6.7235039 1.9300326,6.4611321 2.1821966,6.1987592 2.4134579,6.0137228 2.6447193,5.8286865 2.8759792,5.6776409 3.1072406,5.526594 3.4282004,5.3713977 3.7491603,5.2162016 3.9263009,5.1508695 4.1034416,5.0855373 4.2813348,4.7481598 4.4592292,4.4107823 4.6718,4.108422 4.8843733,3.8060618 5.198353,3.4805372 5.5123313,3.155014 5.7685095,2.9596425 6.0246877,2.7642722 6.329187,2.5851365 6.6336863,2.406002 6.9497657,2.2751596 7.2658453,2.1443184 7.4756394,2.0772947 7.6854348,2.01027 8.0825241,1.931086 8.4796139,1.851902 l 0.5870477,0.00291 0.5870469,0.00291 0.4447315,0.092455 0.444734,0.092455 0.302419,0.1105495 0.302417,0.1105495 0.329929,0.1646046 0.32993,0.1646033 0.239329,-0.2316919 0.239329,-0.2316919 0.160103,-0.1256767 0.160105,-0.1256767 0.160102,-0.1021909 0.160105,-0.1021899 0.142315,-0.082328 0.142314,-0.082328 0.231262,-0.1090091 0.231259,-0.1090091 0.26684,-0.098743 0.266839,-0.098743 0.320208,-0.073514 0.320209,-0.073527 0.355787,-0.041833 0.355785,-0.041834 0.426942,0.023827 0.426945,0.023828 0.355785,0.071179 0.355788,0.0711791 0.284627,0.09267 0.284629,0.09267 0.28514,0.1310267 0.28514,0.1310255 0.238179,0.1446969 0.238174,0.1446979 0.259413,0.1955332 0.259413,0.1955319 0.290757,0.296774 0.290758,0.2967753 0.151736,0.1941581 0.151734,0.1941594 0.135326,0.2149951 0.135327,0.2149952 0.154755,0.3202073 0.154758,0.3202085 0.09409,0.2677358 0.09409,0.267737 0.06948,0.3319087 0.06948,0.3319099 0.01111,0.00808 0.01111,0.00808 0.444734,0.2173653 0.444734,0.2173665 0.309499,0.2161102 0.309497,0.2161101 0.309694,0.2930023 0.309694,0.2930037 0.18752,0.2348726 0.187524,0.2348727 0.166516,0.2574092 0.166519,0.2574108 0.15273,0.3260252 0.152734,0.3260262 0.08972,0.2668403 0.08971,0.2668391 0.08295,0.3913655 0.08295,0.3913652 -6.21e-4,0.6582049 -6.21e-4,0.658204 -0.06362,0.315725 -0.06362,0.315725 -0.09046,0.289112 -0.09046,0.289112 -0.122759,0.281358 -0.12276,0.281356 -0.146626,0.252323 -0.146629,0.252322 -0.190443,0.258668 -0.190448,0.258671 -0.254911,0.268356 -0.254911,0.268355 -0.286872,0.223127 -0.286874,0.223127 -0.320203,0.187693 -0.320209,0.187693 -0.04347,0.03519 -0.04347,0.03521 0.0564,0.12989 0.0564,0.129892 0.08728,0.213472 0.08728,0.213471 0.189755,0.729363 0.189753,0.729362 0.0652,0.302417 0.0652,0.302419 -0.0018,0.675994 -0.0018,0.675995 -0.0801,0.373573 -0.08009,0.373577 -0.09,0.266839 -0.09,0.26684 -0.190389,0.391364 -0.19039,0.391366 -0.223169,0.320207 -0.223167,0.320209 -0.303585,0.315294 -0.303584,0.315291 -0.284631,0.220665 -0.284629,0.220663 -0.220128,0.132359 -0.220127,0.132358 -0.242395,0.106698 -0.242394,0.106699 -0.08895,0.04734 -0.08895,0.04733 -0.249052,0.07247 -0.24905,0.07247 -0.322042,0.0574 -0.322044,0.0574 -0.282794,-0.003 -0.282795,-0.003 -0.07115,-0.0031 -0.07115,-0.0031 -0.177894,-0.0033 -0.177893,-0.0033 -0.124528,0.02555 -0.124528,0.02555 z m -4.470079,-5.349839 0.214838,-0.01739 0.206601,-0.06782 0.206602,-0.06782 0.244389,-0.117874 0.244393,-0.11786 0.274473,-0.206822 0.27447,-0.20682 0.229308,-0.257201 0.229306,-0.2572 0.219161,-0.28463 0.219159,-0.284629 0.188541,-0.284628 0.188543,-0.28463 0.214594,-0.373574 0.214593,-0.373577 0.133861,-0.312006 0.133865,-0.312007 0.02861,-0.01769 0.02861,-0.01769 0.197275,0.26212 0.197278,0.262119 0.163613,0.150814 0.163614,0.150814 0.201914,0.09276 0.201914,0.09276 0.302417,0.01421 0.302418,0.01421 0.213472,-0.08025 0.213471,-0.08025 0.200606,-0.204641 0.200606,-0.204642 0.09242,-0.278887 0.09241,-0.278888 0.05765,-0.302418 0.05764,-0.302416 L 18.41327,13.768114 18.39502,13.34117 18.31849,12.915185 18.24196,12.4892 18.15595,12.168033 18.06994,11.846867 17.928869,11.444534 17.787801,11.042201 17.621278,10.73296 17.454757,10.423723 17.337388,10.263619 17.220021,10.103516 17.095645,9.9837986 16.971268,9.8640816 16.990048,9.6813736 17.008828,9.4986654 16.947568,9.249616 16.886308,9.0005655 16.752419,8.7159355 16.618521,8.4313217 16.435707,8.2294676 16.252892,8.0276114 16.079629,7.9004245 15.906366,7.773238 l -0.20429,0.1230127 -0.204289,0.1230121 -0.26702,0.059413 -0.267022,0.059413 -0.205761,-0.021508 -0.205766,-0.021508 -0.23495,-0.08844 -0.234953,-0.08844 -0.118429,-0.090334 -0.118428,-0.090333 h -0.03944 -0.03944 L 13.711268,7.8540732 13.655958,7.9706205 13.497227,8.1520709 13.338499,8.3335203 13.168394,8.4419112 12.998289,8.550301 12.777045,8.624223 12.5558,8.698155 H 12.275611 11.995429 L 11.799973,8.6309015 11.604513,8.5636472 11.491311,8.5051061 11.37811,8.446565 11.138172,8.2254579 10.898231,8.0043497 l -0.09565,-0.084618 -0.09565,-0.084613 -0.218822,0.198024 -0.218822,0.1980231 -0.165392,0.078387 -0.1653925,0.078387 -0.177894,0.047948 -0.177892,0.047948 L 9.3635263,8.4842631 9.144328,8.4846889 8.9195029,8.4147138 8.6946778,8.3447386 8.5931214,8.4414036 8.491565,8.5380686 8.3707618,8.7019598 8.2499597,8.8658478 8.0802403,8.9290726 7.9105231,8.9922974 7.7952769,9.0780061 7.6800299,9.1637148 7.5706169,9.2778257 7.4612038,9.3919481 7.1059768,9.9205267 6.7507497,10.449105 l -0.2159851,0.449834 -0.2159839,0.449834 -0.2216572,0.462522 -0.2216559,0.462523 -0.1459343,0.337996 -0.1459342,0.337998 -0.055483,0.220042 -0.055483,0.220041 -0.015885,0.206903 -0.015872,0.206901 0.034307,0.242939 0.034307,0.24294 0.096281,0.196632 0.096281,0.196634 0.143607,0.125222 0.1436071,0.125222 0.1873143,0.08737 0.1873141,0.08737 0.2752084,0.002 0.2752084,0.002 0.2312297,-0.09773 0.231231,-0.09772 0.1067615,-0.07603 0.1067614,-0.07603 0.3679062,-0.29377 0.3679065,-0.293771 0.026804,0.01656 0.026804,0.01656 0.023626,0.466819 0.023626,0.466815 0.088326,0.513195 0.088326,0.513193 0.08897,0.364413 0.08897,0.364411 0.1315362,0.302418 0.1315352,0.302418 0.1051964,0.160105 0.1051954,0.160103 0.1104741,0.11877 0.1104731,0.118769 0.2846284,0.205644 0.2846305,0.205642 0.144448,0.07312 0.144448,0.07312 0.214787,0.05566 0.214787,0.05566 0.245601,0.03075 0.245602,0.03075 0.204577,-0.0125 0.204578,-0.0125 z m 0.686342,-3.497495 -0.11281,-0.06077 -0.106155,-0.134033 -0.106155,-0.134031 -0.04406,-0.18371 -0.04406,-0.183707 0.02417,-0.553937 0.02417,-0.553936 0.03513,-0.426945 0.03513,-0.426942 0.07225,-0.373576 0.07225,-0.373575 0.05417,-0.211338 0.05417,-0.211339 0.0674,-0.132112 0.0674,-0.132112 0.132437,-0.10916 0.132437,-0.109161 0.187436,-0.04195 0.187438,-0.04195 0.170366,0.06469 0.170364,0.06469 0.114312,0.124073 0.114313,0.124086 0.04139,0.18495 0.04139,0.184951 -0.111218,0.459845 -0.111219,0.459844 -0.03383,0.26584 -0.03382,0.265841 -0.03986,0.818307 -0.03986,0.818309 -0.0378,0.15162 -0.03779,0.151621 -0.11089,0.110562 -0.110891,0.110561 -0.114489,0.04913 -0.114489,0.04913 -0.187932,-0.0016 -0.187929,-0.0016 z m -2.8087655,-0.358124 -0.146445,-0.06848 -0.088025,-0.119502 -0.088024,-0.119502 -0.038581,-0.106736 -0.038581,-0.106736 -0.02237,-0.134956 -0.02239,-0.134957 -0.031955,-0.46988 -0.031955,-0.469881 0.036203,-0.444733 0.036203,-0.444731 0.048862,-0.215257 0.048862,-0.215255 0.076082,-0.203349 0.076081,-0.203348 0.0936,-0.111244 0.0936,-0.111245 0.143787,-0.06531 0.1437865,-0.06532 h 0.142315 0.142314 l 0.142314,0.06588 0.142316,0.06588 0.093,0.102325 0.093,0.102325 0.04042,0.120942 0.04042,0.120942 v 0.152479 0.152477 l -0.03347,0.08804 -0.03347,0.08805 -0.05693,0.275653 -0.05693,0.275651 2.11e-4,0.430246 2.12e-4,0.430243 0.04294,0.392646 0.04295,0.392647 -0.09189,0.200702 -0.09189,0.200702 -0.148688,0.0984 -0.148687,0.0984 -0.20136,0.01212 -0.2013595,0.01212 z" id="path4"/> 26 4 </g> 27 5 </svg>
+1 -1
lib/core/widgets/sliver_tab_bar_delegate.dart
··· 28 28 } 29 29 30 30 @override 31 - bool shouldRebuild(SliverTabBarDelegate oldDelegate) => false; 31 + bool shouldRebuild(SliverTabBarDelegate oldDelegate) => oldDelegate.tabBar != tabBar; 32 32 }
+2 -6
lib/features/feed/presentation/widgets/facet_text.dart
··· 8 8 import 'package:go_router/go_router.dart'; 9 9 import 'package:lazurite/core/router/in_app_link_resolver.dart'; 10 10 import 'package:lazurite/features/search/data/hashtag_utils.dart'; 11 + import 'package:lazurite/shared/presentation/helpers/navigation_helpers.dart'; 11 12 import 'package:url_launcher/url_launcher.dart'; 12 13 13 14 class FacetText extends StatelessWidget { ··· 198 199 } 199 200 200 201 void _openProfile(BuildContext context, String actor) { 201 - final router = GoRouter.maybeOf(context); 202 - if (router == null) { 203 - return; 204 - } 205 - 206 - router.push('/profile/view?actor=${Uri.encodeQueryComponent(actor)}'); 202 + navigateToProfile(context, actor); 207 203 } 208 204 209 205 void _openLink(BuildContext context, String rawLink) {
+2 -2
lib/features/feed/presentation/widgets/post_interactions_sheet.dart
··· 1 1 import 'package:atproto_core/atproto_core.dart'; 2 2 import 'package:bluesky/app_bsky_actor_defs.dart'; 3 3 import 'package:flutter/material.dart'; 4 - import 'package:go_router/go_router.dart'; 5 4 import 'package:lazurite/features/feed/data/post_action_repository.dart'; 6 5 import 'package:lazurite/core/theme/theme_extensions.dart'; 6 + import 'package:lazurite/shared/presentation/helpers/navigation_helpers.dart'; 7 7 8 8 enum InteractionTab { likes, reposts } 9 9 ··· 259 259 subtitle: Text('@${profile.handle}', style: TextStyle(color: colorScheme.onSurfaceVariant)), 260 260 onTap: () { 261 261 Navigator.pop(context); 262 - GoRouter.maybeOf(context)?.push('/profile/view?actor=${Uri.encodeQueryComponent(profile.did)}'); 262 + navigateToProfile(context, profile.did); 263 263 }, 264 264 ); 265 265 },
+2 -1
lib/features/lists/presentation/list_detail_screen.dart
··· 11 11 import 'package:lazurite/features/lists/bloc/list_feed_bloc.dart'; 12 12 import 'package:lazurite/features/lists/data/list_repository.dart'; 13 13 import 'package:lazurite/features/lists/presentation/widgets/create_edit_list_dialog.dart'; 14 + import 'package:lazurite/shared/presentation/helpers/navigation_helpers.dart'; 14 15 import 'package:lazurite/shared/presentation/widgets/confirmation_dialog.dart'; 15 16 import 'package:lazurite/shared/presentation/widgets/options_sheet.dart'; 16 17 import 'package:lazurite/core/theme/theme_extensions.dart'; ··· 398 399 ), 399 400 title: Text(subject.displayName ?? subject.handle, maxLines: 1, overflow: TextOverflow.ellipsis), 400 401 subtitle: Text('@${subject.handle}', style: TextStyle(color: context.colorScheme.onSurfaceVariant)), 401 - onTap: () => context.push('/profile/view?actor=${subject.did}'), 402 + onTap: () => navigateToProfile(context, subject.did), 402 403 trailing: isOwn 403 404 ? IconButton( 404 405 icon: Icon(Icons.remove_circle_outline, color: context.colorScheme.error),
+2 -2
lib/features/lists/presentation/list_members_screen.dart
··· 2 2 import 'package:bluesky/app_bsky_actor_defs.dart'; 3 3 import 'package:flutter/material.dart'; 4 4 import 'package:flutter_bloc/flutter_bloc.dart'; 5 - import 'package:go_router/go_router.dart'; 6 5 import 'package:lazurite/features/lists/bloc/list_bloc.dart'; 7 6 import 'package:lazurite/features/lists/data/list_repository.dart'; 7 + import 'package:lazurite/shared/presentation/helpers/navigation_helpers.dart'; 8 8 import 'package:lazurite/core/theme/theme_extensions.dart'; 9 9 10 10 /// Screen for adding and removing members from a list. ··· 192 192 ), 193 193 title: Text(subject.displayName ?? subject.handle, maxLines: 1, overflow: TextOverflow.ellipsis), 194 194 subtitle: Text('@${subject.handle}', style: TextStyle(color: colorScheme.onSurfaceVariant)), 195 - onTap: () => context.push('/profile/view?actor=${subject.did}'), 195 + onTap: () => navigateToProfile(context, subject.did), 196 196 trailing: state.isMutating 197 197 ? const SizedBox(width: 20, height: 20, child: CircularProgressIndicator(strokeWidth: 2)) 198 198 : IconButton(
+2 -1
lib/features/notifications/presentation/widgets/notification_list_item.dart
··· 5 5 import 'package:lazurite/features/moderation/presentation/moderation_ui_helpers.dart'; 6 6 import 'package:lazurite/features/moderation/presentation/widgets/moderated_blur_overlay.dart'; 7 7 import 'package:lazurite/features/moderation/presentation/widgets/moderation_badge_row.dart'; 8 + import 'package:lazurite/shared/presentation/helpers/navigation_helpers.dart'; 8 9 import 'package:lazurite/shared/presentation/helpers/notification_icon_mapper.dart'; 9 10 import 'package:lazurite/shared/presentation/widgets/profile_avatar.dart'; 10 11 import 'package:lazurite/shared/utils/format_utils.dart'; ··· 193 194 final reason = notification.reason; 194 195 195 196 if (reason.isKnownValue && reason.knownValue == bsky.KnownNotificationReason.follow) { 196 - context.push('/profile/view?actor=${notification.author.did}'); 197 + navigateToProfile(context, notification.author.did); 197 198 } else { 198 199 final isLikeOrRepost = 199 200 reason.isKnownValue &&
+2 -2
lib/features/profile/presentation/follow_audit_screen.dart
··· 4 4 import 'package:flutter/material.dart'; 5 5 import 'package:flutter/services.dart'; 6 6 import 'package:flutter_bloc/flutter_bloc.dart'; 7 - import 'package:go_router/go_router.dart'; 8 7 import 'package:lazurite/features/profile/cubit/follow_audit_cubit.dart'; 9 8 import 'package:lazurite/features/profile/data/follow_audit_repository.dart'; 9 + import 'package:lazurite/shared/presentation/helpers/navigation_helpers.dart'; 10 10 11 11 class FollowAuditScreen extends StatelessWidget { 12 12 const FollowAuditScreen({super.key}); ··· 507 507 key: Key('follow_audit_handle_${item.record.rkey}'), 508 508 style: TextButton.styleFrom(padding: EdgeInsets.zero, minimumSize: const Size(0, 0)), 509 509 onPressed: () { 510 - context.push('/profile/view?actor=${Uri.encodeComponent(item.record.subjectDid)}'); 510 + navigateToProfile(context, item.record.subjectDid); 511 511 }, 512 512 child: Text( 513 513 item.handle ?? item.record.subjectDid,
+3 -4
lib/features/profile/presentation/profile_context_screen.dart
··· 6 6 import 'package:lazurite/features/moderation/presentation/widgets/moderated_avatar.dart'; 7 7 import 'package:lazurite/features/profile/cubit/profile_context_cubit.dart'; 8 8 import 'package:lazurite/features/profile/data/profile_context_repository.dart'; 9 + import 'package:lazurite/shared/presentation/helpers/navigation_helpers.dart'; 9 10 import 'package:lazurite/core/theme/theme_extensions.dart'; 10 11 11 12 class ProfileContextScreen extends StatefulWidget { ··· 183 184 return _ProfileTile( 184 185 key: ValueKey('blocked_by_${profile.did}'), 185 186 profile: profile, 186 - onTap: () => 187 - context.push('/profile/view?actor=${Uri.encodeQueryComponent(_profileActor(profile))}'), 187 + onTap: () => navigateToProfile(context, _profileActor(profile)), 188 188 ); 189 189 } 190 190 ··· 303 303 return _ProfileTile( 304 304 key: ValueKey('blocking_${profile.did}'), 305 305 profile: profile, 306 - onTap: () => 307 - context.push('/profile/view?actor=${Uri.encodeQueryComponent(_profileActor(profile))}'), 306 + onTap: () => navigateToProfile(context, _profileActor(profile)), 308 307 ); 309 308 }, 310 309 ),
+9 -5
lib/features/profile/presentation/profile_screen.dart
··· 38 38 import 'package:lazurite/features/starter_packs/cubit/actor_starter_packs_cubit.dart'; 39 39 import 'package:lazurite/features/starter_packs/data/starter_pack_repository.dart'; 40 40 import 'package:lazurite/features/starter_packs/presentation/widgets/starter_pack_card.dart'; 41 + import 'package:lazurite/shared/presentation/helpers/navigation_helpers.dart'; 41 42 import 'package:lazurite/shared/presentation/helpers/snackbar_helper.dart'; 42 43 import 'package:lazurite/shared/presentation/widgets/options_sheet.dart'; 43 44 import 'package:lazurite/shared/utils/format_utils.dart'; ··· 121 122 122 123 final maxIndex = show ? _baseTabLabels.length : _baseTabLabels.length - 1; 123 124 final nextIndex = _tabController.index.clamp(0, maxIndex); 124 - _tabController.dispose(); 125 + final previousController = _tabController; 125 126 _showSuggestedTab = show; 126 127 _tabController = TabController(length: _tabLabels.length, vsync: this, initialIndex: nextIndex); 127 128 setState(() {}); 129 + 130 + // Dispose after rebuild so widgets still referencing the previous 131 + // controller do not observe a torn-down animation during this frame. 132 + WidgetsBinding.instance.addPostFrameCallback((_) { 133 + previousController.dispose(); 134 + }); 128 135 } 129 136 130 137 String _appBarTitle(ProfileViewDetailed? profile) { ··· 645 652 return const SizedBox.shrink(); 646 653 } 647 654 648 - return _SuggestedFollowsTab( 649 - actor: actor, 650 - onProfileTap: (target) => context.push('/profile/view?actor=${Uri.encodeComponent(target.did)}'), 651 - ); 655 + return _SuggestedFollowsTab(actor: actor, onProfileTap: (target) => navigateToProfile(context, target.did)); 652 656 } 653 657 654 658 Widget? _buildComposeFab(BuildContext context) {
+2 -3
lib/features/profile/presentation/widgets/suggested_follows_sheet.dart
··· 1 1 import 'package:flutter/material.dart'; 2 - import 'package:go_router/go_router.dart'; 3 2 import 'package:lazurite/features/profile/presentation/widgets/suggested_follows_list.dart'; 3 + import 'package:lazurite/shared/presentation/helpers/navigation_helpers.dart'; 4 4 import 'package:lazurite/core/theme/theme_extensions.dart'; 5 5 6 6 class SuggestedFollowsSheet extends StatelessWidget { ··· 30 30 actor: actor, 31 31 scrollController: scrollController, 32 32 onProfileTap: (profile) { 33 - final router = GoRouter.of(context); 34 33 if (Navigator.of(context).canPop()) { 35 34 Navigator.of(context).pop(); 36 35 } 37 - router.push('/profile/view?actor=${Uri.encodeComponent(profile.did)}'); 36 + navigateToProfile(context, profile.did); 38 37 }, 39 38 ), 40 39 ),
+2 -4
lib/features/search/presentation/hashtag_screen.dart
··· 11 11 import 'package:lazurite/features/moderation/presentation/widgets/moderation_badge_row.dart'; 12 12 import 'package:lazurite/features/search/cubit/hashtag_cubit.dart'; 13 13 import 'package:lazurite/features/search/data/hashtag_utils.dart'; 14 + import 'package:lazurite/shared/presentation/helpers/navigation_helpers.dart'; 14 15 import 'package:lazurite/shared/presentation/widgets/options_sheet.dart'; 15 16 import 'package:lazurite/shared/presentation/widgets/profile_avatar.dart'; 16 17 import 'package:lazurite/shared/utils/format_utils.dart'; ··· 374 375 } 375 376 376 377 void _navigateToProfile(BuildContext context, String did) { 377 - final router = GoRouter.maybeOf(context); 378 - if (router != null) { 379 - router.push('/profile/view?actor=${Uri.encodeQueryComponent(did)}'); 380 - } 378 + navigateToProfile(context, did); 381 379 } 382 380 383 381 FeedPostRecord? _tryParseRecord(Map<String, dynamic> record) {
+4 -9
lib/features/search/presentation/search_screen.dart
··· 15 15 import 'package:lazurite/features/moderation/presentation/widgets/moderation_badge_row.dart'; 16 16 import 'package:lazurite/features/search/bloc/search_bloc.dart'; 17 17 import 'package:lazurite/features/starter_packs/presentation/widgets/starter_pack_card.dart'; 18 + import 'package:lazurite/shared/presentation/helpers/navigation_helpers.dart'; 18 19 import 'package:lazurite/shared/presentation/helpers/snackbar_helper.dart'; 19 20 import 'package:lazurite/shared/presentation/widgets/confirmation_dialog.dart'; 20 21 import 'package:lazurite/shared/presentation/widgets/profile_avatar.dart'; ··· 128 129 Navigator.of(dialogContext).pop(); 129 130 WidgetsBinding.instance.addPostFrameCallback((_) { 130 131 if (mounted) { 131 - GoRouter.of(this.context).push('/profile/view?actor=${Uri.encodeQueryComponent(handle)}'); 132 + navigateToProfile(this.context, handle); 132 133 } 133 134 }); 134 135 } ··· 716 717 } 717 718 718 719 void _navigateToProfile(BuildContext context, String did) { 719 - final router = GoRouter.maybeOf(context); 720 - if (router != null) { 721 - router.push('/profile/view?actor=${Uri.encodeQueryComponent(did)}'); 722 - } 720 + navigateToProfile(context, did); 723 721 } 724 722 725 723 FeedPostRecord? _tryParseRecord(Map<String, dynamic> record) { ··· 802 800 } 803 801 804 802 void _navigateToProfile(BuildContext context, String did) { 805 - final router = GoRouter.maybeOf(context); 806 - if (router != null) { 807 - router.push('/profile/view?actor=${Uri.encodeQueryComponent(did)}'); 808 - } 803 + navigateToProfile(context, did); 809 804 } 810 805 } 811 806
+3 -2
lib/features/starter_packs/presentation/starter_pack_detail_screen.dart
··· 7 7 import 'package:go_router/go_router.dart'; 8 8 import 'package:lazurite/features/starter_packs/bloc/starter_pack_bloc.dart'; 9 9 import 'package:lazurite/features/starter_packs/data/starter_pack_repository.dart'; 10 + import 'package:lazurite/shared/presentation/helpers/navigation_helpers.dart'; 10 11 import 'package:lazurite/shared/utils/format_utils.dart'; 11 12 import 'package:lazurite/core/theme/theme_extensions.dart'; 12 13 ··· 420 421 crossAxisAlignment: CrossAxisAlignment.start, 421 422 children: [ 422 423 GestureDetector( 423 - onTap: () => context.push('/profile/view?actor=${pack.creator.did}'), 424 + onTap: () => navigateToProfile(context, pack.creator.did), 424 425 child: Row( 425 426 children: [ 426 427 CircleAvatar( ··· 537 538 itemBuilder: (context, index) { 538 539 final member = sample[index]; 539 540 return GestureDetector( 540 - onTap: () => context.push('/profile/view?actor=${member.subject.did}'), 541 + onTap: () => navigateToProfile(context, member.subject.did), 541 542 child: Padding( 542 543 padding: const EdgeInsets.only(right: 12), 543 544 child: Column(
+42
test/features/profile/presentation/profile_screen_test.dart
··· 424 424 expect(find.text('Replies'), findsNothing); 425 425 expect(find.text('Media'), findsNothing); 426 426 }); 427 + 428 + testWidgets('does not throw when suggested tab visibility toggles with profile changes', (tester) async { 429 + useLargeScreen(tester); 430 + const otherProfile = ProfileViewDetailed( 431 + did: 'did:plc:other', 432 + handle: 'other.bsky.social', 433 + displayName: 'Other User', 434 + ); 435 + final mockProfileActionRepository = MockProfileActionRepository(); 436 + final streamController = StreamController<ProfileState>.broadcast(); 437 + addTearDown(streamController.close); 438 + 439 + when(() => profileBloc.state).thenReturn(ProfileState.loaded(profile: profile)); 440 + whenListen(profileBloc, streamController.stream, initialState: ProfileState.loaded(profile: profile)); 441 + 442 + await tester.pumpWidget( 443 + MultiRepositoryProvider( 444 + providers: [RepositoryProvider<ProfileActionRepository>.value(value: mockProfileActionRepository)], 445 + child: MultiBlocProvider( 446 + providers: [ 447 + BlocProvider<AuthBloc>.value(value: authBloc), 448 + BlocProvider<ProfileBloc>.value(value: profileBloc), 449 + BlocProvider<FeedBloc>.value(value: feedBloc), 450 + BlocProvider<SettingsCubit>.value(value: settingsCubit), 451 + BlocProvider<ConnectivityCubit>.value(value: connectivityCubit), 452 + ], 453 + child: const MaterialApp(home: ProfileScreen()), 454 + ), 455 + ), 456 + ); 457 + await tester.pump(); 458 + 459 + streamController.add(const ProfileState.loaded(profile: otherProfile)); 460 + await tester.pump(); 461 + await tester.pump(); 462 + expect(tester.takeException(), isNull); 463 + 464 + streamController.add(ProfileState.loaded(profile: profile)); 465 + await tester.pump(); 466 + await tester.pump(); 467 + expect(tester.takeException(), isNull); 468 + }); 427 469 }); 428 470 429 471 group('Feed layout switching', () {
+21
test/flutter_test_config.dart
··· 1 + import 'dart:async'; 2 + 3 + Future<void> testExecutable(FutureOr<void> Function() testMain) async { 4 + await runZoned( 5 + () async { 6 + await testMain(); 7 + }, 8 + zoneSpecification: ZoneSpecification( 9 + print: (self, parent, zone, line) { 10 + if (_isKnownSvgWarning(line)) { 11 + return; 12 + } 13 + parent.print(zone, line); 14 + }, 15 + ), 16 + ); 17 + } 18 + 19 + bool _isKnownSvgWarning(String line) { 20 + return line.contains('unhandled element') && (line.contains('<filter />') || line.contains('<sodipodi:namedview />')); 21 + }