New version
This commit is contained in:
parent
cf2b2f0433
commit
c3421f7d54
185
assets/chat.svg
Normal file
185
assets/chat.svg
Normal file
|
@ -0,0 +1,185 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
<svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" width="210mm" height="297mm" viewBox="0 0 210 297" version="1.1" id="svg8" inkscape:version="0.92.3 (d244b95, 2018-08-02)" sodipodi:docname="1.svg">
|
||||||
|
<defs id="defs2"/>
|
||||||
|
<sodipodi:namedview id="base" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:zoom="0.5" inkscape:cx="675" inkscape:cy="548.18772" inkscape:document-units="mm" inkscape:current-layer="layer1" showgrid="false" inkscape:window-width="640" inkscape:window-height="748" inkscape:window-x="640" inkscape:window-y="24" inkscape:window-maximized="0"/>
|
||||||
|
<metadata id="metadata5">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
|
||||||
|
<dc:title/>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<g inkscape:label="Layer 1" inkscape:groupmode="layer" id="layer1">
|
||||||
|
<g id="g3735" transform="matrix(1.3863783,0,0,1.3863783,53.572287,59.067903)">
|
||||||
|
<path id="path3715" d="m 12.7,30.7 c 4,5.3 1.9,-0.3 7.3,-0.3 5.4,0 8,-5.1 7.9,-10.4 C 27.8,14.7 16.2,7.7 11.1,9.4 c -3.2,1.2 -1.6,17 1.6,21.3 z" class="st0" inkscape:connector-curvature="0" style="fill:#878787"/>
|
||||||
|
|
||||||
|
<path id="path3717" d="m 14.6,25.1 c 2.3,3 9.3,-1.9 9.3,-5 0,-3.1 -6.7,-7.1 -9.6,-6 -1.9,0.6 -1.6,8.5 0.3,11 z" class="st1" inkscape:connector-curvature="0" style="fill:#ffffff"/>
|
||||||
|
|
||||||
|
<path id="path3719" d="m 61,30.6 c -3.9,5.3 -1.9,-0.2 -7.3,-0.2 -5.4,0 -8,-5 -8,-10.4 0,-5.4 11.7,-12.4 16.7,-10.7 3.3,1.1 1.8,17 -1.4,21.3 z" class="st0" inkscape:connector-curvature="0" style="fill:#878787"/>
|
||||||
|
|
||||||
|
<path id="path3721" d="m 59.1,25 c -2.3,3.1 -9.3,-1.8 -9.3,-4.9 0,-3.1 6.7,-7.1 9.6,-6.1 1.8,0.6 1.5,8.5 -0.3,11 z" class="st1" inkscape:connector-curvature="0" style="fill:#ffffff"/>
|
||||||
|
|
||||||
|
<g id="g3725">
|
||||||
|
<path id="path3723" d="m 30.7,60.8 c 0.2,2.1 2.6,3.6 4.9,2.1 0.5,-0.3 0.8,-0.9 0.9,-1.4 0.1,-0.3 0.4,-0.6 0.8,-0.6 0.4,0 0.7,0.2 0.8,0.6 0.1,0.5 0.3,0.9 0.7,1.2 2.3,1.8 4.9,0.3 5.1,-1.9 0,-0.3 0.2,-0.6 0.5,-0.7 0.3,-0.1 0.6,0 0.8,0.2 0.6,0.6 1.3,1 2.1,1 0,0 0,0 0,0 1,0 2,-0.5 2.6,-1.5 0.4,-0.6 0.5,-1.2 0.4,-2 0,-0.3 0.1,-0.6 0.3,-0.8 0.2,-0.2 0.6,-0.2 0.8,0 0.6,0.3 1.3,0.5 2,0.3 1.1,-0.2 2,-1.1 2.3,-2.1 0.2,-0.7 0.1,-1.4 -0.2,-2.1 -0.1,-0.3 -0.1,-0.6 0.1,-0.8 0.2,-0.2 0.5,-0.3 0.8,-0.3 0.7,0.1 1.3,0.1 1.9,-0.2 0.9,-0.4 1.5,-1.2 1.7,-2.2 0.2,-1 -0.1,-1.9 -0.8,-2.6 -0.2,-0.2 -0.3,-0.5 -0.2,-0.8 0.1,-0.3 0.4,-0.5 0.7,-0.5 0.7,0 1.5,-0.2 2,-0.8 1.7,-1.8 0.9,-4.2 -1,-5 -0.3,-0.1 -0.5,-0.4 -0.5,-0.8 0,-0.3 0.3,-0.6 0.6,-0.7 0.6,-0.1 1.1,-0.4 1.5,-0.8 1.6,-2.1 0.3,-4.7 -1.8,-5 -0.3,0 -0.6,-0.3 -0.6,-0.6 -0.1,-0.3 0,-0.6 0.3,-0.8 0.8,-0.6 1.2,-1.4 1.2,-2.3 0,-0.3 -0.1,-0.7 -0.3,-1 -1.3,-2 -2.1,-2.2 -3,-2.1 -0.3,0 -0.6,-0.1 -0.7,-0.4 -0.2,-0.3 -0.1,-0.6 0,-0.8 0.3,-0.5 0.5,-1 0.5,-1.6 0,-0.7 -0.2,-1.4 -0.6,-1.9 -0.6,-0.7 -1.4,-1.1 -2.3,-1.2 -0.4,0 -0.8,0.1 -1.2,0.2 -0.3,0.1 -0.6,0.1 -0.8,-0.2 -0.2,-0.2 -0.3,-0.5 -0.2,-0.8 0.2,-0.6 0.2,-1.2 0,-1.8 -0.4,-1.1 -1.3,-1.9 -2.5,-2.1 -0.8,-0.1 -1.6,0.1 -2.3,0.7 -0.2,0.2 -0.6,0.2 -0.8,0.1 -0.3,-0.1 -0.4,-0.4 -0.4,-0.7 0.1,-1.2 -0.5,-2.2 -1.4,-2.7 -1.8,-0.9 -3.5,0 -4.2,1.3 -0.2,0.3 -0.5,0.5 -0.8,0.4 -0.3,0 -0.6,-0.3 -0.6,-0.6 -0.2,-1 -0.8,-1.8 -1.7,-2.2 -1.9,-0.8 -3.9,0.3 -4.2,2.1 -0.1,0.3 -0.3,0.6 -0.6,0.6 C 33,14.3 32.7,14.1 32.5,13.8 32,13.1 31,12.5 30,12.5 c -1.6,0 -3,1.3 -3.1,2.9 0,0 0,0.1 0,0.1 v 0.1 c 0,0.3 -0.2,0.6 -0.4,0.7 -0.3,0.1 -0.6,0.1 -0.8,-0.1 -0.6,-0.5 -1.4,-0.7 -2.3,-0.6 -1.1,0.1 -2.1,1 -2.4,2.1 -0.2,0.6 -0.2,1.2 0,1.8 0.1,0.3 0,0.6 -0.2,0.8 -0.2,0.2 -0.5,0.3 -0.8,0.2 -0.6,-0.2 -1.2,-0.3 -1.8,-0.1 -1.1,0.3 -2,1.2 -2.2,2.3 -0.2,0.8 0,1.6 0.5,2.3 0.2,0.2 0.2,0.6 0,0.8 -0.2,0.3 -0.4,0.4 -0.7,0.4 h -0.1 c 0,0 -0.1,0 -0.1,0 -1.6,0 -3,1.3 -3.1,2.9 0,1 0.5,2 1.3,2.6 0.3,0.2 0.4,0.5 0.3,0.8 -0.1,0.3 -0.4,0.6 -0.7,0.6 -0.5,0 -1,0.2 -1.4,0.5 -2.1,2 -0.9,4.8 1.2,5.3 0.3,0.1 0.6,0.4 0.6,0.7 0,0.3 -0.2,0.7 -0.5,0.8 -0.4,0.2 -0.8,0.4 -1.1,0.8 -1.6,2.3 0,4.9 2.2,4.9 0.3,0 0.6,0.2 0.7,0.5 0.1,0.3 0.1,0.6 -0.2,0.8 -0.6,0.6 -0.9,1.4 -0.8,2.2 0.1,1.1 0.8,2.1 1.9,2.6 0.6,0.3 1.2,0.3 1.8,0.2 0.3,-0.1 0.6,0 0.8,0.3 0.2,0.2 0.2,0.6 0.1,0.8 -0.3,0.6 -0.4,1.3 -0.2,2 0.3,1.1 1.1,1.9 2.2,2.2 1,0.2 1.7,-0.1 2.2,-0.3 0.2,-0.1 -1.3,3.6 -2.4,6.1 -0.3,0.8 0.5,1.7 1.4,1.3 3.2,-1.7 8.8,-4.2 8.8,-4 z" class="st0" inkscape:connector-curvature="0" style="fill:#878787"/>
|
||||||
|
|
||||||
|
</g>
|
||||||
|
|
||||||
|
<g id="g3733">
|
||||||
|
<circle id="circle3727" r="3.7" cy="38.299999" cx="24.9" class="st1" style="fill:#ffffff"/>
|
||||||
|
|
||||||
|
<path id="path3729" d="m 40.7,38.3 c 0,2.1 -1.7,3.7 -3.7,3.7 -2.1,0 -3.7,-1.7 -3.7,-3.7 0,-2 7.4,-2.1 7.4,0 z" class="st1" inkscape:connector-curvature="0" style="fill:#ffffff"/>
|
||||||
|
|
||||||
|
<circle id="circle3731" r="3.7" cy="38.299999" cx="49" class="st1" style="fill:#ffffff"/>
|
||||||
|
|
||||||
|
</g>
|
||||||
|
|
||||||
|
</g>
|
||||||
|
<g transform="matrix(0.20394939,0,0,0.20394939,53.147489,17.386415)" id="layer1-3">
|
||||||
|
<g transform="matrix(0,-1,-1,0,373.51,516.51)" id="g4845">
|
||||||
|
<g transform="matrix(-0.9996,0,0,1,575.94,-611)" id="g4778">
|
||||||
|
<g transform="matrix(-1,0,0,1,576,611)" id="g4780">
|
||||||
|
<rect x="-438" y="345.35999" width="96.038002" height="96" transform="scale(-1,1)" style="color:#000000;fill:none" id="rect4782"/>
|
||||||
|
<path d="m 430,411.93 c 0,11.675 -9.3424,21.174 -20.961,21.429 -5.3915,0 -9.5995,-1.413 -13.487,-2.8571 -16.066,-6.7837 -29.485,-20 -45.584,-37.143 16.098,-17.143 29.518,-30.359 45.584,-37.143 3.888,-1.4441 8.096,-2.8571 13.487,-2.8571 11.618,0.25447 20.961,9.7538 20.961,21.429 0,7.9422 -4.3266,14.87 -10.748,18.571 6.4217,3.7014 10.748,10.629 10.748,18.571 z" style="color:#000000;fill:#808080" id="path4849" inkscape:connector-curvature="0"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g transform="matrix(0.14331597,0,0,0.14331597,115.93632,6.4245667)" id="layer1-7" inkscape:label="Layer 1">
|
||||||
|
<g style="display:inline" id="g4845-5" transform="matrix(0,-1,-1,0,373.50506,516.50504)">
|
||||||
|
<g inkscape:label="Layer 1" id="g4778-3" transform="matrix(-0.9996045,0,0,1,575.94296,-611.00001)" inkscape:export-filename="next01.png" inkscape:export-xdpi="90" inkscape:export-ydpi="90">
|
||||||
|
<g style="display:inline" id="g4780-5" transform="matrix(-1,0,0,1,575.99999,611)">
|
||||||
|
<rect transform="scale(-1,1)" y="345.36221" x="-438.00244" height="96" width="96.037987" id="rect4782-6" style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:none;stroke-width:4;marker:none;enable-background:accumulate"/>
|
||||||
|
<path inkscape:connector-curvature="0" id="path4170" d="m 429.99929,393.33773 c 0,0.004 -9.5e-4,0.007 -0.007,0.009 -0.001,0.007 -0.006,0.007 -0.009,0.009 -0.003,0.006 -0.008,0.008 -0.011,0.009 -0.003,0.006 -0.003,0.006 -0.007,0.009 -10.86428,5.06033 -21.9364,8.97057 -28.72087,11.19382 -0.006,7.31383 -0.28348,19.36 -1.77427,30.84126 -0.004,10e-4 -0.006,0.002 -0.009,-0.002 -0.007,10e-4 -0.01,-0.004 -0.0129,-0.007 -0.007,-10e-4 -0.009,-0.004 -0.011,-0.007 -0.007,-10e-4 -0.006,-0.002 -0.009,-0.004 -8.17196,-8.76466 -15.31373,-18.08322 -19.52571,-23.8462 -6.9601,2.25521 -18.50812,5.71446 -29.89293,7.84517 -0.002,-0.003 -0.003,-0.004 0,-0.009 -0.003,-0.006 10e-4,-0.01 0.002,-0.0129 -0.001,-0.007 10e-4,-0.011 0.002,-0.0129 -0.001,-0.007 -0.001,-0.008 0,-0.011 5.81401,-10.47791 12.47128,-20.14765 16.65275,-25.93264 -4.29657,-5.92015 -11.1555,-15.83137 -16.70025,-25.99521 0.002,-0.003 0.006,-0.003 0.0111,-0.002 0.004,-0.004 0.01,-0.002 0.0129,-0.002 0.006,-0.003 0.011,-0.002 0.0129,-0.002 0.006,-0.003 0.007,-0.004 0.0111,-0.004 11.76574,2.28943 23.02338,5.63169 29.81955,7.81927 4.30503,-5.9142 11.61263,-15.49511 19.56888,-23.90661 0.003,10e-4 0.006,0.003 0.007,0.009 0.006,0.003 0.006,0.008 0.007,0.011 0.004,0.004 0.006,0.0112 0.007,0.0129 0.004,0.004 0.007,0.004 0.009,0.009 1.4575,11.89244 1.75546,23.62651 1.77428,30.76358 6.95749,2.26527 18.3316,6.25356 28.7921,11.21756 z" style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#808080;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;marker:none;enable-background:accumulate"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g transform="matrix(-0.05275813,-0.13325181,0.13325181,-0.05275813,6.9661783,108.94066)" id="layer1-7-2" inkscape:label="Layer 1">
|
||||||
|
<g style="display:inline" id="g4845-5-9" transform="matrix(0,-1,-1,0,373.50506,516.50504)">
|
||||||
|
<g inkscape:label="Layer 1" id="g4778-3-1" transform="matrix(-0.9996045,0,0,1,575.94296,-611.00001)" inkscape:export-filename="next01.png" inkscape:export-xdpi="90" inkscape:export-ydpi="90">
|
||||||
|
<g style="display:inline" id="g4780-5-2" transform="matrix(-1,0,0,1,575.99999,611)">
|
||||||
|
<rect transform="scale(-1,1)" y="345.36221" x="-438.00244" height="96" width="96.037987" id="rect4782-6-7" style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:none;stroke-width:4;marker:none;enable-background:accumulate"/>
|
||||||
|
<path inkscape:connector-curvature="0" id="path4170-0" d="m 429.99929,393.33773 c 0,0.004 -9.5e-4,0.007 -0.007,0.009 -0.001,0.007 -0.006,0.007 -0.009,0.009 -0.003,0.006 -0.008,0.008 -0.011,0.009 -0.003,0.006 -0.003,0.006 -0.007,0.009 -10.86428,5.06033 -21.9364,8.97057 -28.72087,11.19382 -0.006,7.31383 -0.28348,19.36 -1.77427,30.84126 -0.004,10e-4 -0.006,0.002 -0.009,-0.002 -0.007,10e-4 -0.01,-0.004 -0.0129,-0.007 -0.007,-10e-4 -0.009,-0.004 -0.011,-0.007 -0.007,-10e-4 -0.006,-0.002 -0.009,-0.004 -8.17196,-8.76466 -15.31373,-18.08322 -19.52571,-23.8462 -6.9601,2.25521 -18.50812,5.71446 -29.89293,7.84517 -0.002,-0.003 -0.003,-0.004 0,-0.009 -0.003,-0.006 10e-4,-0.01 0.002,-0.0129 -0.001,-0.007 10e-4,-0.011 0.002,-0.0129 -0.001,-0.007 -0.001,-0.008 0,-0.011 5.81401,-10.47791 12.47128,-20.14765 16.65275,-25.93264 -4.29657,-5.92015 -11.1555,-15.83137 -16.70025,-25.99521 0.002,-0.003 0.006,-0.003 0.0111,-0.002 0.004,-0.004 0.01,-0.002 0.0129,-0.002 0.006,-0.003 0.011,-0.002 0.0129,-0.002 0.006,-0.003 0.007,-0.004 0.0111,-0.004 11.76574,2.28943 23.02338,5.63169 29.81955,7.81927 4.30503,-5.9142 11.61263,-15.49511 19.56888,-23.90661 0.003,10e-4 0.006,0.003 0.007,0.009 0.006,0.003 0.006,0.008 0.007,0.011 0.004,0.004 0.006,0.0112 0.007,0.0129 0.004,0.004 0.007,0.004 0.009,0.009 1.4575,11.89244 1.75546,23.62651 1.77428,30.76358 6.95749,2.26527 18.3316,6.25356 28.7921,11.21756 z" style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#808080;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;marker:none;enable-background:accumulate"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g transform="matrix(0.11335991,-0.05676641,0.05676641,0.11335991,131.32884,182.57734)" id="layer1-3-9">
|
||||||
|
<g transform="matrix(0,-1,-1,0,373.51,516.51)" id="g4845-3">
|
||||||
|
<g transform="matrix(-0.9996,0,0,1,575.94,-611)" id="g4778-6">
|
||||||
|
<g transform="matrix(-1,0,0,1,576,611)" id="g4780-0">
|
||||||
|
<rect x="-438" y="345.35999" width="96.038002" height="96" transform="scale(-1,1)" style="color:#000000;fill:none" id="rect4782-62"/>
|
||||||
|
<path d="m 430,411.93 c 0,11.675 -9.3424,21.174 -20.961,21.429 -5.3915,0 -9.5995,-1.413 -13.487,-2.8571 -16.066,-6.7837 -29.485,-20 -45.584,-37.143 16.098,-17.143 29.518,-30.359 45.584,-37.143 3.888,-1.4441 8.096,-2.8571 13.487,-2.8571 11.618,0.25447 20.961,9.7538 20.961,21.429 0,7.9422 -4.3266,14.87 -10.748,18.571 6.4217,3.7014 10.748,10.629 10.748,18.571 z" style="color:#000000;fill:#808080" id="path4849-6" inkscape:connector-curvature="0"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g transform="matrix(-0.08526503,-0.09382307,0.09382307,-0.08526503,162.91459,100.60822)" id="layer1-3-1">
|
||||||
|
<g transform="matrix(0,-1,-1,0,373.51,516.51)" id="g4845-8">
|
||||||
|
<g transform="matrix(-0.9996,0,0,1,575.94,-611)" id="g4778-7">
|
||||||
|
<g transform="matrix(-1,0,0,1,576,611)" id="g4780-9">
|
||||||
|
<rect x="-438" y="345.35999" width="96.038002" height="96" transform="scale(-1,1)" style="color:#000000;fill:none" id="rect4782-2"/>
|
||||||
|
<path d="m 430,411.93 c 0,11.675 -9.3424,21.174 -20.961,21.429 -5.3915,0 -9.5995,-1.413 -13.487,-2.8571 -16.066,-6.7837 -29.485,-20 -45.584,-37.143 16.098,-17.143 29.518,-30.359 45.584,-37.143 3.888,-1.4441 8.096,-2.8571 13.487,-2.8571 11.618,0.25447 20.961,9.7538 20.961,21.429 0,7.9422 -4.3266,14.87 -10.748,18.571 6.4217,3.7014 10.748,10.629 10.748,18.571 z" style="color:#000000;fill:#808080" id="path4849-0" inkscape:connector-curvature="0"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g transform="matrix(0.10698289,0.06802614,-0.06802614,0.10698289,41.950743,171.57375)" id="layer1-3-2">
|
||||||
|
<g transform="matrix(0,-1,-1,0,373.51,516.51)" id="g4845-37">
|
||||||
|
<g transform="matrix(-0.9996,0,0,1,575.94,-611)" id="g4778-5">
|
||||||
|
<g transform="matrix(-1,0,0,1,576,611)" id="g4780-92">
|
||||||
|
<rect x="-438" y="345.35999" width="96.038002" height="96" transform="scale(-1,1)" style="color:#000000;fill:none" id="rect4782-28"/>
|
||||||
|
<path d="m 430,411.93 c 0,11.675 -9.3424,21.174 -20.961,21.429 -5.3915,0 -9.5995,-1.413 -13.487,-2.8571 -16.066,-6.7837 -29.485,-20 -45.584,-37.143 16.098,-17.143 29.518,-30.359 45.584,-37.143 3.888,-1.4441 8.096,-2.8571 13.487,-2.8571 11.618,0.25447 20.961,9.7538 20.961,21.429 0,7.9422 -4.3266,14.87 -10.748,18.571 6.4217,3.7014 10.748,10.629 10.748,18.571 z" style="color:#000000;fill:#808080" id="path4849-9" inkscape:connector-curvature="0"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g transform="matrix(0.21497396,0,0,0.21497395,186.37278,111.09076)" id="layer1-7-7" inkscape:label="Layer 1">
|
||||||
|
<g style="display:inline" id="g4845-5-3" transform="matrix(0,-1,-1,0,373.50506,516.50504)">
|
||||||
|
<g inkscape:label="Layer 1" id="g4778-3-6" transform="matrix(-0.9996045,0,0,1,575.94296,-611.00001)" inkscape:export-filename="next01.png" inkscape:export-xdpi="90" inkscape:export-ydpi="90">
|
||||||
|
<g style="display:inline" id="g4780-5-1" transform="matrix(-1,0,0,1,575.99999,611)">
|
||||||
|
<rect transform="scale(-1,1)" y="345.36221" x="-438.00244" height="96" width="96.037987" id="rect4782-6-2" style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:none;stroke-width:4;marker:none;enable-background:accumulate"/>
|
||||||
|
<path inkscape:connector-curvature="0" id="path4170-9" d="m 429.99929,393.33773 c 0,0.004 -9.5e-4,0.007 -0.007,0.009 -0.001,0.007 -0.006,0.007 -0.009,0.009 -0.003,0.006 -0.008,0.008 -0.011,0.009 -0.003,0.006 -0.003,0.006 -0.007,0.009 -10.86428,5.06033 -21.9364,8.97057 -28.72087,11.19382 -0.006,7.31383 -0.28348,19.36 -1.77427,30.84126 -0.004,10e-4 -0.006,0.002 -0.009,-0.002 -0.007,10e-4 -0.01,-0.004 -0.0129,-0.007 -0.007,-10e-4 -0.009,-0.004 -0.011,-0.007 -0.007,-10e-4 -0.006,-0.002 -0.009,-0.004 -8.17196,-8.76466 -15.31373,-18.08322 -19.52571,-23.8462 -6.9601,2.25521 -18.50812,5.71446 -29.89293,7.84517 -0.002,-0.003 -0.003,-0.004 0,-0.009 -0.003,-0.006 10e-4,-0.01 0.002,-0.0129 -0.001,-0.007 10e-4,-0.011 0.002,-0.0129 -0.001,-0.007 -0.001,-0.008 0,-0.011 5.81401,-10.47791 12.47128,-20.14765 16.65275,-25.93264 -4.29657,-5.92015 -11.1555,-15.83137 -16.70025,-25.99521 0.002,-0.003 0.006,-0.003 0.0111,-0.002 0.004,-0.004 0.01,-0.002 0.0129,-0.002 0.006,-0.003 0.011,-0.002 0.0129,-0.002 0.006,-0.003 0.007,-0.004 0.0111,-0.004 11.76574,2.28943 23.02338,5.63169 29.81955,7.81927 4.30503,-5.9142 11.61263,-15.49511 19.56888,-23.90661 0.003,10e-4 0.006,0.003 0.007,0.009 0.006,0.003 0.006,0.008 0.007,0.011 0.004,0.004 0.006,0.0112 0.007,0.0129 0.004,0.004 0.007,0.004 0.009,0.009 1.4575,11.89244 1.75546,23.62651 1.77428,30.76358 6.95749,2.26527 18.3316,6.25356 28.7921,11.21756 z" style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#808080;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;marker:none;enable-background:accumulate"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g transform="matrix(-0.08041856,0.09800893,-0.09800893,-0.08041856,139.91992,284.24876)" id="layer1-3-1-3">
|
||||||
|
<g transform="matrix(0,-1,-1,0,373.51,516.51)" id="g4845-8-1">
|
||||||
|
<g transform="matrix(-0.9996,0,0,1,575.94,-611)" id="g4778-7-9">
|
||||||
|
<g transform="matrix(-1,0,0,1,576,611)" id="g4780-9-4">
|
||||||
|
<rect x="-438" y="345.35999" width="96.038002" height="96" transform="scale(-1,1)" style="color:#000000;fill:none" id="rect4782-2-7"/>
|
||||||
|
<path d="m 430,411.93 c 0,11.675 -9.3424,21.174 -20.961,21.429 -5.3915,0 -9.5995,-1.413 -13.487,-2.8571 -16.066,-6.7837 -29.485,-20 -45.584,-37.143 16.098,-17.143 29.518,-30.359 45.584,-37.143 3.888,-1.4441 8.096,-2.8571 13.487,-2.8571 11.618,0.25447 20.961,9.7538 20.961,21.429 0,7.9422 -4.3266,14.87 -10.748,18.571 6.4217,3.7014 10.748,10.629 10.748,18.571 z" style="color:#000000;fill:#808080" id="path4849-0-8" inkscape:connector-curvature="0"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g transform="matrix(0.01456664,-0.07599603,0.07599603,0.01456664,80.480787,182.36304)" id="layer1-7-2-4" inkscape:label="Layer 1">
|
||||||
|
<g style="display:inline" id="g4845-5-9-5" transform="matrix(0,-1,-1,0,373.50506,516.50504)">
|
||||||
|
<g inkscape:label="Layer 1" id="g4778-3-1-0" transform="matrix(-0.9996045,0,0,1,575.94296,-611.00001)" inkscape:export-filename="next01.png" inkscape:export-xdpi="90" inkscape:export-ydpi="90">
|
||||||
|
<g style="display:inline" id="g4780-5-2-3" transform="matrix(-1,0,0,1,575.99999,611)">
|
||||||
|
<rect transform="scale(-1,1)" y="345.36221" x="-438.00244" height="96" width="96.037987" id="rect4782-6-7-6" style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:none;stroke-width:4;marker:none;enable-background:accumulate"/>
|
||||||
|
<path inkscape:connector-curvature="0" id="path4170-0-1" d="m 429.99929,393.33773 c 0,0.004 -9.5e-4,0.007 -0.007,0.009 -0.001,0.007 -0.006,0.007 -0.009,0.009 -0.003,0.006 -0.008,0.008 -0.011,0.009 -0.003,0.006 -0.003,0.006 -0.007,0.009 -10.86428,5.06033 -21.9364,8.97057 -28.72087,11.19382 -0.006,7.31383 -0.28348,19.36 -1.77427,30.84126 -0.004,10e-4 -0.006,0.002 -0.009,-0.002 -0.007,10e-4 -0.01,-0.004 -0.0129,-0.007 -0.007,-10e-4 -0.009,-0.004 -0.011,-0.007 -0.007,-10e-4 -0.006,-0.002 -0.009,-0.004 -8.17196,-8.76466 -15.31373,-18.08322 -19.52571,-23.8462 -6.9601,2.25521 -18.50812,5.71446 -29.89293,7.84517 -0.002,-0.003 -0.003,-0.004 0,-0.009 -0.003,-0.006 10e-4,-0.01 0.002,-0.0129 -0.001,-0.007 10e-4,-0.011 0.002,-0.0129 -0.001,-0.007 -0.001,-0.008 0,-0.011 5.81401,-10.47791 12.47128,-20.14765 16.65275,-25.93264 -4.29657,-5.92015 -11.1555,-15.83137 -16.70025,-25.99521 0.002,-0.003 0.006,-0.003 0.0111,-0.002 0.004,-0.004 0.01,-0.002 0.0129,-0.002 0.006,-0.003 0.011,-0.002 0.0129,-0.002 0.006,-0.003 0.007,-0.004 0.0111,-0.004 11.76574,2.28943 23.02338,5.63169 29.81955,7.81927 4.30503,-5.9142 11.61263,-15.49511 19.56888,-23.90661 0.003,10e-4 0.006,0.003 0.007,0.009 0.006,0.003 0.006,0.008 0.007,0.011 0.004,0.004 0.006,0.0112 0.007,0.0129 0.004,0.004 0.007,0.004 0.009,0.009 1.4575,11.89244 1.75546,23.62651 1.77428,30.76358 6.95749,2.26527 18.3316,6.25356 28.7921,11.21756 z" style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#808080;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;marker:none;enable-background:accumulate"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g transform="matrix(-0.12765378,0.07360069,-0.07360069,-0.12765378,81.653111,258.78327)" id="layer1-7-2-0" inkscape:label="Layer 1">
|
||||||
|
<g style="display:inline" id="g4845-5-9-6" transform="matrix(0,-1,-1,0,373.50506,516.50504)">
|
||||||
|
<g inkscape:label="Layer 1" id="g4778-3-1-3" transform="matrix(-0.9996045,0,0,1,575.94296,-611.00001)" inkscape:export-filename="next01.png" inkscape:export-xdpi="90" inkscape:export-ydpi="90">
|
||||||
|
<g style="display:inline" id="g4780-5-2-2" transform="matrix(-1,0,0,1,575.99999,611)">
|
||||||
|
<rect transform="scale(-1,1)" y="345.36221" x="-438.00244" height="96" width="96.037987" id="rect4782-6-7-0" style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:none;stroke-width:4;marker:none;enable-background:accumulate"/>
|
||||||
|
<path inkscape:connector-curvature="0" id="path4170-0-6" d="m 429.99929,393.33773 c 0,0.004 -9.5e-4,0.007 -0.007,0.009 -0.001,0.007 -0.006,0.007 -0.009,0.009 -0.003,0.006 -0.008,0.008 -0.011,0.009 -0.003,0.006 -0.003,0.006 -0.007,0.009 -10.86428,5.06033 -21.9364,8.97057 -28.72087,11.19382 -0.006,7.31383 -0.28348,19.36 -1.77427,30.84126 -0.004,10e-4 -0.006,0.002 -0.009,-0.002 -0.007,10e-4 -0.01,-0.004 -0.0129,-0.007 -0.007,-10e-4 -0.009,-0.004 -0.011,-0.007 -0.007,-10e-4 -0.006,-0.002 -0.009,-0.004 -8.17196,-8.76466 -15.31373,-18.08322 -19.52571,-23.8462 -6.9601,2.25521 -18.50812,5.71446 -29.89293,7.84517 -0.002,-0.003 -0.003,-0.004 0,-0.009 -0.003,-0.006 10e-4,-0.01 0.002,-0.0129 -0.001,-0.007 10e-4,-0.011 0.002,-0.0129 -0.001,-0.007 -0.001,-0.008 0,-0.011 5.81401,-10.47791 12.47128,-20.14765 16.65275,-25.93264 -4.29657,-5.92015 -11.1555,-15.83137 -16.70025,-25.99521 0.002,-0.003 0.006,-0.003 0.0111,-0.002 0.004,-0.004 0.01,-0.002 0.0129,-0.002 0.006,-0.003 0.011,-0.002 0.0129,-0.002 0.006,-0.003 0.007,-0.004 0.0111,-0.004 11.76574,2.28943 23.02338,5.63169 29.81955,7.81927 4.30503,-5.9142 11.61263,-15.49511 19.56888,-23.90661 0.003,10e-4 0.006,0.003 0.007,0.009 0.006,0.003 0.006,0.008 0.007,0.011 0.004,0.004 0.006,0.0112 0.007,0.0129 0.004,0.004 0.007,0.004 0.009,0.009 1.4575,11.89244 1.75546,23.62651 1.77428,30.76358 6.95749,2.26527 18.3316,6.25356 28.7921,11.21756 z" style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#808080;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;marker:none;enable-background:accumulate"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g transform="matrix(-0.12725507,-0.14002765,0.14002765,-0.12725507,1.4536,290.74091)" id="layer1-3-1-1">
|
||||||
|
<g transform="matrix(0,-1,-1,0,373.51,516.51)" id="g4845-8-5">
|
||||||
|
<g transform="matrix(-0.9996,0,0,1,575.94,-611)" id="g4778-7-5">
|
||||||
|
<g transform="matrix(-1,0,0,1,576,611)" id="g4780-9-47">
|
||||||
|
<rect x="-438" y="345.35999" width="96.038002" height="96" transform="scale(-1,1)" style="color:#000000;fill:none" id="rect4782-2-6"/>
|
||||||
|
<path d="m 430,411.93 c 0,11.675 -9.3424,21.174 -20.961,21.429 -5.3915,0 -9.5995,-1.413 -13.487,-2.8571 -16.066,-6.7837 -29.485,-20 -45.584,-37.143 16.098,-17.143 29.518,-30.359 45.584,-37.143 3.888,-1.4441 8.096,-2.8571 13.487,-2.8571 11.618,0.25447 20.961,9.7538 20.961,21.429 0,7.9422 -4.3266,14.87 -10.748,18.571 6.4217,3.7014 10.748,10.629 10.748,18.571 z" style="color:#000000;fill:#808080" id="path4849-0-5" inkscape:connector-curvature="0"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g transform="matrix(-0.04494106,-0.11350812,0.11350812,-0.04494106,164.40006,247.77949)" id="layer1-7-2-6" inkscape:label="Layer 1">
|
||||||
|
<g style="display:inline" id="g4845-5-9-9" transform="matrix(0,-1,-1,0,373.50506,516.50504)">
|
||||||
|
<g inkscape:label="Layer 1" id="g4778-3-1-37" transform="matrix(-0.9996045,0,0,1,575.94296,-611.00001)" inkscape:export-filename="next01.png" inkscape:export-xdpi="90" inkscape:export-ydpi="90">
|
||||||
|
<g style="display:inline" id="g4780-5-2-4" transform="matrix(-1,0,0,1,575.99999,611)">
|
||||||
|
<rect transform="scale(-1,1)" y="345.36221" x="-438.00244" height="96" width="96.037987" id="rect4782-6-7-5" style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:none;stroke-width:4;marker:none;enable-background:accumulate"/>
|
||||||
|
<path inkscape:connector-curvature="0" id="path4170-0-2" d="m 429.99929,393.33773 c 0,0.004 -9.5e-4,0.007 -0.007,0.009 -0.001,0.007 -0.006,0.007 -0.009,0.009 -0.003,0.006 -0.008,0.008 -0.011,0.009 -0.003,0.006 -0.003,0.006 -0.007,0.009 -10.86428,5.06033 -21.9364,8.97057 -28.72087,11.19382 -0.006,7.31383 -0.28348,19.36 -1.77427,30.84126 -0.004,10e-4 -0.006,0.002 -0.009,-0.002 -0.007,10e-4 -0.01,-0.004 -0.0129,-0.007 -0.007,-10e-4 -0.009,-0.004 -0.011,-0.007 -0.007,-10e-4 -0.006,-0.002 -0.009,-0.004 -8.17196,-8.76466 -15.31373,-18.08322 -19.52571,-23.8462 -6.9601,2.25521 -18.50812,5.71446 -29.89293,7.84517 -0.002,-0.003 -0.003,-0.004 0,-0.009 -0.003,-0.006 10e-4,-0.01 0.002,-0.0129 -0.001,-0.007 10e-4,-0.011 0.002,-0.0129 -0.001,-0.007 -0.001,-0.008 0,-0.011 5.81401,-10.47791 12.47128,-20.14765 16.65275,-25.93264 -4.29657,-5.92015 -11.1555,-15.83137 -16.70025,-25.99521 0.002,-0.003 0.006,-0.003 0.0111,-0.002 0.004,-0.004 0.01,-0.002 0.0129,-0.002 0.006,-0.003 0.011,-0.002 0.0129,-0.002 0.006,-0.003 0.007,-0.004 0.0111,-0.004 11.76574,2.28943 23.02338,5.63169 29.81955,7.81927 4.30503,-5.9142 11.61263,-15.49511 19.56888,-23.90661 0.003,10e-4 0.006,0.003 0.007,0.009 0.006,0.003 0.006,0.008 0.007,0.011 0.004,0.004 0.006,0.0112 0.007,0.0129 0.004,0.004 0.007,0.004 0.009,0.009 1.4575,11.89244 1.75546,23.62651 1.77428,30.76358 6.95749,2.26527 18.3316,6.25356 28.7921,11.21756 z" style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#808080;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;marker:none;enable-background:accumulate"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g transform="matrix(0.11335991,-0.05676641,0.05676641,0.11335991,164.93091,31.23567)" id="layer1-3-9-5">
|
||||||
|
<g transform="matrix(0,-1,-1,0,373.51,516.51)" id="g4845-3-4">
|
||||||
|
<g transform="matrix(-0.9996,0,0,1,575.94,-611)" id="g4778-6-7">
|
||||||
|
<g transform="matrix(-1,0,0,1,576,611)" id="g4780-0-4">
|
||||||
|
<rect x="-438" y="345.35999" width="96.038002" height="96" transform="scale(-1,1)" style="color:#000000;fill:none" id="rect4782-62-4"/>
|
||||||
|
<path d="m 430,411.93 c 0,11.675 -9.3424,21.174 -20.961,21.429 -5.3915,0 -9.5995,-1.413 -13.487,-2.8571 -16.066,-6.7837 -29.485,-20 -45.584,-37.143 16.098,-17.143 29.518,-30.359 45.584,-37.143 3.888,-1.4441 8.096,-2.8571 13.487,-2.8571 11.618,0.25447 20.961,9.7538 20.961,21.429 0,7.9422 -4.3266,14.87 -10.748,18.571 6.4217,3.7014 10.748,10.629 10.748,18.571 z" style="color:#000000;fill:#808080" id="path4849-6-3" inkscape:connector-curvature="0"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g transform="matrix(0.07328708,0.04660033,-0.04660033,0.07328708,202.61287,11.89896)" id="layer1-3-2-0">
|
||||||
|
<g transform="matrix(0,-1,-1,0,373.51,516.51)" id="g4845-37-7">
|
||||||
|
<g transform="matrix(-0.9996,0,0,1,575.94,-611)" id="g4778-5-8">
|
||||||
|
<g transform="matrix(-1,0,0,1,576,611)" id="g4780-92-6">
|
||||||
|
<rect x="-438" y="345.35999" width="96.038002" height="96" transform="scale(-1,1)" style="color:#000000;fill:none" id="rect4782-28-8"/>
|
||||||
|
<path d="m 430,411.93 c 0,11.675 -9.3424,21.174 -20.961,21.429 -5.3915,0 -9.5995,-1.413 -13.487,-2.8571 -16.066,-6.7837 -29.485,-20 -45.584,-37.143 16.098,-17.143 29.518,-30.359 45.584,-37.143 3.888,-1.4441 8.096,-2.8571 13.487,-2.8571 11.618,0.25447 20.961,9.7538 20.961,21.429 0,7.9422 -4.3266,14.87 -10.748,18.571 6.4217,3.7014 10.748,10.629 10.748,18.571 z" style="color:#000000;fill:#808080" id="path4849-9-8" inkscape:connector-curvature="0"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<style id="style3713" type="text/css">
|
||||||
|
.st0{fill:#878787;}
|
||||||
|
.st1{fill:#FFFFFF;}
|
||||||
|
</style>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 27 KiB |
|
@ -156,12 +156,14 @@ class Message extends StatelessWidget {
|
||||||
color: selected
|
color: selected
|
||||||
? Theme.of(context).primaryColor.withAlpha(100)
|
? Theme.of(context).primaryColor.withAlpha(100)
|
||||||
: Theme.of(context).primaryColor.withAlpha(0),
|
: Theme.of(context).primaryColor.withAlpha(0),
|
||||||
padding: EdgeInsets.only(
|
child: Padding(
|
||||||
left: 8.0, right: 8.0, bottom: sameSender ? 4.0 : 8.0),
|
padding: EdgeInsets.only(
|
||||||
child: Row(
|
left: 8.0, right: 8.0, bottom: sameSender ? 4.0 : 8.0),
|
||||||
crossAxisAlignment: CrossAxisAlignment.end,
|
child: Row(
|
||||||
mainAxisAlignment: rowMainAxisAlignment,
|
crossAxisAlignment: CrossAxisAlignment.end,
|
||||||
children: rowChildren,
|
mainAxisAlignment: rowMainAxisAlignment,
|
||||||
|
children: rowChildren,
|
||||||
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|
|
@ -48,6 +48,7 @@ class App extends StatelessWidget {
|
||||||
textTheme: TextTheme(
|
textTheme: TextTheme(
|
||||||
title: TextStyle(
|
title: TextStyle(
|
||||||
color: Colors.black,
|
color: Colors.black,
|
||||||
|
fontSize: 20,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
iconTheme: IconThemeData(color: Colors.black),
|
iconTheme: IconThemeData(color: Colors.black),
|
||||||
|
|
|
@ -17,6 +17,7 @@ import 'package:fluffychat/views/chat_encryption_settings.dart';
|
||||||
import 'package:flutter/foundation.dart';
|
import 'package:flutter/foundation.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter/services.dart';
|
import 'package:flutter/services.dart';
|
||||||
|
import 'package:flutter_svg/flutter_svg.dart';
|
||||||
import 'package:image_picker/image_picker.dart';
|
import 'package:image_picker/image_picker.dart';
|
||||||
import 'package:toast/toast.dart';
|
import 'package:toast/toast.dart';
|
||||||
import 'package:pedantic/pedantic.dart';
|
import 'package:pedantic/pedantic.dart';
|
||||||
|
@ -75,6 +76,16 @@ class _ChatState extends State<_Chat> {
|
||||||
|
|
||||||
bool get selectMode => selectedEvents.isNotEmpty;
|
bool get selectMode => selectedEvents.isNotEmpty;
|
||||||
|
|
||||||
|
bool _loadingHistory = false;
|
||||||
|
|
||||||
|
final int _loadHistoryCount = 100;
|
||||||
|
|
||||||
|
void requestHistory() async {
|
||||||
|
setState(() => this._loadingHistory = true);
|
||||||
|
await timeline.requestHistory(historyCount: _loadHistoryCount);
|
||||||
|
setState(() => this._loadingHistory = false);
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
_scrollController.addListener(() async {
|
_scrollController.addListener(() async {
|
||||||
|
@ -83,7 +94,7 @@ class _ChatState extends State<_Chat> {
|
||||||
timeline.events.isNotEmpty &&
|
timeline.events.isNotEmpty &&
|
||||||
timeline.events[timeline.events.length - 1].type !=
|
timeline.events[timeline.events.length - 1].type !=
|
||||||
EventTypes.RoomCreate) {
|
EventTypes.RoomCreate) {
|
||||||
await timeline.requestHistory(historyCount: 100);
|
requestHistory();
|
||||||
}
|
}
|
||||||
if (_scrollController.position.pixels > 0 &&
|
if (_scrollController.position.pixels > 0 &&
|
||||||
showScrollDownButton == false) {
|
showScrollDownButton == false) {
|
||||||
|
@ -132,6 +143,9 @@ class _ChatState extends State<_Chat> {
|
||||||
if (timeline.events.isNotEmpty) {
|
if (timeline.events.isNotEmpty) {
|
||||||
unawaited(room.sendReadReceipt(timeline.events.first.eventId));
|
unawaited(room.sendReadReceipt(timeline.events.first.eventId));
|
||||||
}
|
}
|
||||||
|
if (timeline.events.length < _loadHistoryCount) {
|
||||||
|
this.requestHistory();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
updateView();
|
updateView();
|
||||||
return true;
|
return true;
|
||||||
|
@ -330,13 +344,14 @@ class _ChatState extends State<_Chat> {
|
||||||
? Container()
|
? Container()
|
||||||
: Icon(Icons.edit,
|
: Icon(Icons.edit,
|
||||||
color: Theme.of(context).primaryColor,
|
color: Theme.of(context).primaryColor,
|
||||||
size: 10),
|
size: 13),
|
||||||
SizedBox(width: 4),
|
SizedBox(width: 4),
|
||||||
Text(
|
Text(
|
||||||
typingText,
|
typingText,
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
color: Theme.of(context).primaryColor,
|
color: Theme.of(context).primaryColor,
|
||||||
fontStyle: FontStyle.italic,
|
fontStyle: FontStyle.italic,
|
||||||
|
fontSize: 16,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
|
@ -372,282 +387,325 @@ class _ChatState extends State<_Chat> {
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
: null,
|
: null,
|
||||||
body: SafeArea(
|
body: Stack(
|
||||||
child: Column(
|
children: <Widget>[
|
||||||
children: <Widget>[
|
if (!kIsWeb)
|
||||||
Expanded(
|
SvgPicture.asset(
|
||||||
child: FutureBuilder<bool>(
|
"assets/chat.svg",
|
||||||
future: getTimeline(),
|
height: double.infinity,
|
||||||
builder: (BuildContext context, snapshot) {
|
color: Theme.of(context).primaryColor.withOpacity(0.2),
|
||||||
if (!snapshot.hasData) {
|
|
||||||
return Center(
|
|
||||||
child: CircularProgressIndicator(),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (room.notificationCount != null &&
|
|
||||||
room.notificationCount > 0 &&
|
|
||||||
timeline != null &&
|
|
||||||
timeline.events.isNotEmpty) {
|
|
||||||
room.sendReadReceipt(timeline.events.first.eventId);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (timeline.events.isEmpty) return Container();
|
|
||||||
|
|
||||||
return ListView.builder(
|
|
||||||
reverse: true,
|
|
||||||
itemCount: timeline.events.length + 1,
|
|
||||||
controller: _scrollController,
|
|
||||||
itemBuilder: (BuildContext context, int i) {
|
|
||||||
return i == 0
|
|
||||||
? AnimatedContainer(
|
|
||||||
height: seenByText.isEmpty ? 0 : 24,
|
|
||||||
duration: seenByText.isEmpty
|
|
||||||
? Duration(milliseconds: 0)
|
|
||||||
: Duration(milliseconds: 500),
|
|
||||||
alignment: timeline.events.first.senderId ==
|
|
||||||
client.userID
|
|
||||||
? Alignment.topRight
|
|
||||||
: Alignment.topLeft,
|
|
||||||
child: Text(
|
|
||||||
seenByText,
|
|
||||||
maxLines: 1,
|
|
||||||
overflow: TextOverflow.ellipsis,
|
|
||||||
style: TextStyle(
|
|
||||||
color: Theme.of(context).primaryColor,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
padding: EdgeInsets.only(
|
|
||||||
left: 8,
|
|
||||||
right: 8,
|
|
||||||
bottom: 8,
|
|
||||||
),
|
|
||||||
)
|
|
||||||
: Message(timeline.events[i - 1],
|
|
||||||
onSelect: (Event event) => event.redacted
|
|
||||||
? null
|
|
||||||
: selectedEvents.contains(event)
|
|
||||||
? setState(
|
|
||||||
() => selectedEvents.remove(event))
|
|
||||||
: setState(
|
|
||||||
() => selectedEvents.add(event)),
|
|
||||||
longPressSelect: selectedEvents.isEmpty,
|
|
||||||
selected: selectedEvents
|
|
||||||
.contains(timeline.events[i - 1]),
|
|
||||||
timeline: timeline,
|
|
||||||
nextEvent:
|
|
||||||
i >= 2 ? timeline.events[i - 2] : null);
|
|
||||||
});
|
|
||||||
},
|
|
||||||
),
|
|
||||||
),
|
),
|
||||||
AnimatedContainer(
|
SafeArea(
|
||||||
duration: Duration(milliseconds: 300),
|
child: Column(
|
||||||
height: replyEvent != null ? 56 : 0,
|
children: <Widget>[
|
||||||
child: Material(
|
Material(
|
||||||
color: Theme.of(context).secondaryHeaderColor,
|
elevation: 1,
|
||||||
child: Row(
|
color: Theme.of(context).scaffoldBackgroundColor,
|
||||||
children: <Widget>[
|
child: AnimatedContainer(
|
||||||
IconButton(
|
duration: Duration(milliseconds: 300),
|
||||||
icon: Icon(Icons.close),
|
height: _loadingHistory ? 40 : 0,
|
||||||
onPressed: () => setState(() => replyEvent = null),
|
child: Center(
|
||||||
|
child: Row(
|
||||||
|
mainAxisSize: MainAxisSize.min,
|
||||||
|
children: <Widget>[
|
||||||
|
Container(
|
||||||
|
height: 20,
|
||||||
|
width: 20,
|
||||||
|
child: CircularProgressIndicator(strokeWidth: 2),
|
||||||
|
),
|
||||||
|
SizedBox(width: 8),
|
||||||
|
Text(I18n.of(context).loadingPleaseWait),
|
||||||
|
],
|
||||||
|
),
|
||||||
),
|
),
|
||||||
Expanded(
|
),
|
||||||
child: ReplyContent(replyEvent),
|
|
||||||
),
|
|
||||||
],
|
|
||||||
),
|
),
|
||||||
),
|
Expanded(
|
||||||
),
|
child: FutureBuilder<bool>(
|
||||||
room.canSendDefaultMessages && room.membership == Membership.join
|
future: getTimeline(),
|
||||||
? Container(
|
builder: (BuildContext context, snapshot) {
|
||||||
decoration: BoxDecoration(
|
if (!snapshot.hasData) {
|
||||||
color: Theme.of(context).backgroundColor,
|
return Center(
|
||||||
boxShadow: [
|
child: CircularProgressIndicator(),
|
||||||
BoxShadow(
|
);
|
||||||
color: Colors.grey.withOpacity(0.2),
|
}
|
||||||
spreadRadius: 1,
|
|
||||||
blurRadius: 2,
|
if (room.notificationCount != null &&
|
||||||
offset: Offset(0, -1), // changes position of shadow
|
room.notificationCount > 0 &&
|
||||||
|
timeline != null &&
|
||||||
|
timeline.events.isNotEmpty) {
|
||||||
|
room.sendReadReceipt(timeline.events.first.eventId);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (timeline.events.isEmpty) return Container();
|
||||||
|
|
||||||
|
return ListView.builder(
|
||||||
|
reverse: true,
|
||||||
|
itemCount: timeline.events.length + 1,
|
||||||
|
controller: _scrollController,
|
||||||
|
itemBuilder: (BuildContext context, int i) {
|
||||||
|
return i == 0
|
||||||
|
? AnimatedContainer(
|
||||||
|
height: seenByText.isEmpty ? 0 : 24,
|
||||||
|
duration: seenByText.isEmpty
|
||||||
|
? Duration(milliseconds: 0)
|
||||||
|
: Duration(milliseconds: 500),
|
||||||
|
alignment: timeline.events.first.senderId ==
|
||||||
|
client.userID
|
||||||
|
? Alignment.topRight
|
||||||
|
: Alignment.topLeft,
|
||||||
|
child: Text(
|
||||||
|
seenByText,
|
||||||
|
maxLines: 1,
|
||||||
|
overflow: TextOverflow.ellipsis,
|
||||||
|
style: TextStyle(
|
||||||
|
color: Theme.of(context).primaryColor,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
padding: EdgeInsets.only(
|
||||||
|
left: 8,
|
||||||
|
right: 8,
|
||||||
|
bottom: 8,
|
||||||
|
),
|
||||||
|
)
|
||||||
|
: Message(timeline.events[i - 1],
|
||||||
|
onSelect: (Event event) => event.redacted
|
||||||
|
? null
|
||||||
|
: selectedEvents.contains(event)
|
||||||
|
? setState(() =>
|
||||||
|
selectedEvents.remove(event))
|
||||||
|
: setState(() =>
|
||||||
|
selectedEvents.add(event)),
|
||||||
|
longPressSelect: selectedEvents.isEmpty,
|
||||||
|
selected: selectedEvents
|
||||||
|
.contains(timeline.events[i - 1]),
|
||||||
|
timeline: timeline,
|
||||||
|
nextEvent:
|
||||||
|
i >= 2 ? timeline.events[i - 2] : null);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
AnimatedContainer(
|
||||||
|
duration: Duration(milliseconds: 300),
|
||||||
|
height: replyEvent != null ? 56 : 0,
|
||||||
|
child: Material(
|
||||||
|
color: Theme.of(context).secondaryHeaderColor,
|
||||||
|
child: Row(
|
||||||
|
children: <Widget>[
|
||||||
|
IconButton(
|
||||||
|
icon: Icon(Icons.close),
|
||||||
|
onPressed: () => setState(() => replyEvent = null),
|
||||||
|
),
|
||||||
|
Expanded(
|
||||||
|
child: ReplyContent(replyEvent),
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
child: Row(
|
),
|
||||||
crossAxisAlignment: CrossAxisAlignment.center,
|
),
|
||||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
room.canSendDefaultMessages &&
|
||||||
children: selectMode
|
room.membership == Membership.join
|
||||||
? <Widget>[
|
? Container(
|
||||||
Container(
|
decoration: BoxDecoration(
|
||||||
height: 56,
|
color: Theme.of(context).backgroundColor,
|
||||||
child: FlatButton(
|
boxShadow: [
|
||||||
onPressed: () => forwardEventsAction(context),
|
BoxShadow(
|
||||||
child: Row(
|
color: Colors.grey.withOpacity(0.2),
|
||||||
children: <Widget>[
|
spreadRadius: 1,
|
||||||
Icon(Icons.keyboard_arrow_left),
|
blurRadius: 2,
|
||||||
Text(I18n.of(context).forward),
|
offset:
|
||||||
],
|
Offset(0, -1), // changes position of shadow
|
||||||
),
|
),
|
||||||
),
|
],
|
||||||
),
|
),
|
||||||
selectedEvents.length == 1
|
child: Row(
|
||||||
? selectedEvents.first.status > 0
|
crossAxisAlignment: CrossAxisAlignment.center,
|
||||||
? Container(
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||||
height: 56,
|
children: selectMode
|
||||||
child: FlatButton(
|
? <Widget>[
|
||||||
onPressed: () => replyAction(),
|
Container(
|
||||||
child: Row(
|
height: 56,
|
||||||
children: <Widget>[
|
child: FlatButton(
|
||||||
Text(I18n.of(context).reply),
|
onPressed: () =>
|
||||||
Icon(
|
forwardEventsAction(context),
|
||||||
Icons.keyboard_arrow_right),
|
child: Row(
|
||||||
],
|
children: <Widget>[
|
||||||
),
|
Icon(Icons.keyboard_arrow_left),
|
||||||
),
|
Text(I18n.of(context).forward),
|
||||||
)
|
],
|
||||||
: Container(
|
),
|
||||||
height: 56,
|
|
||||||
child: FlatButton(
|
|
||||||
onPressed: () => sendAgainAction(),
|
|
||||||
child: Row(
|
|
||||||
children: <Widget>[
|
|
||||||
Text(I18n.of(context)
|
|
||||||
.tryToSendAgain),
|
|
||||||
SizedBox(width: 4),
|
|
||||||
Icon(Icons.send, size: 16),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
),
|
|
||||||
)
|
|
||||||
: Container(),
|
|
||||||
]
|
|
||||||
: <Widget>[
|
|
||||||
kIsWeb
|
|
||||||
? Container()
|
|
||||||
: PopupMenuButton<String>(
|
|
||||||
icon: Icon(Icons.add),
|
|
||||||
onSelected: (String choice) async {
|
|
||||||
if (choice == "file") {
|
|
||||||
sendFileAction(context);
|
|
||||||
} else if (choice == "image") {
|
|
||||||
sendImageAction(context);
|
|
||||||
}
|
|
||||||
if (choice == "camera") {
|
|
||||||
openCameraAction(context);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
itemBuilder: (BuildContext context) =>
|
|
||||||
<PopupMenuEntry<String>>[
|
|
||||||
PopupMenuItem<String>(
|
|
||||||
value: "file",
|
|
||||||
child: ListTile(
|
|
||||||
leading: CircleAvatar(
|
|
||||||
backgroundColor: Colors.green,
|
|
||||||
foregroundColor: Colors.white,
|
|
||||||
child: Icon(Icons.attachment),
|
|
||||||
),
|
|
||||||
title:
|
|
||||||
Text(I18n.of(context).sendFile),
|
|
||||||
contentPadding: EdgeInsets.all(0),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
PopupMenuItem<String>(
|
|
||||||
value: "image",
|
|
||||||
child: ListTile(
|
|
||||||
leading: CircleAvatar(
|
|
||||||
backgroundColor: Colors.blue,
|
|
||||||
foregroundColor: Colors.white,
|
|
||||||
child: Icon(Icons.image),
|
|
||||||
),
|
|
||||||
title: Text(
|
|
||||||
I18n.of(context).sendImage),
|
|
||||||
contentPadding: EdgeInsets.all(0),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
PopupMenuItem<String>(
|
|
||||||
value: "camera",
|
|
||||||
child: ListTile(
|
|
||||||
leading: CircleAvatar(
|
|
||||||
backgroundColor: Colors.purple,
|
|
||||||
foregroundColor: Colors.white,
|
|
||||||
child: Icon(Icons.camera),
|
|
||||||
),
|
|
||||||
title: Text(
|
|
||||||
I18n.of(context).openCamera),
|
|
||||||
contentPadding: EdgeInsets.all(0),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
],
|
|
||||||
),
|
),
|
||||||
SizedBox(width: 8),
|
),
|
||||||
Expanded(
|
selectedEvents.length == 1
|
||||||
child: Padding(
|
? selectedEvents.first.status > 0
|
||||||
padding:
|
? Container(
|
||||||
const EdgeInsets.symmetric(vertical: 4.0),
|
height: 56,
|
||||||
child: TextField(
|
child: FlatButton(
|
||||||
minLines: 1,
|
onPressed: () => replyAction(),
|
||||||
maxLines: kIsWeb ? 1 : 8,
|
child: Row(
|
||||||
keyboardType: kIsWeb
|
children: <Widget>[
|
||||||
? TextInputType.text
|
Text(
|
||||||
: TextInputType.multiline,
|
I18n.of(context).reply),
|
||||||
onSubmitted: (String text) {
|
Icon(Icons
|
||||||
send();
|
.keyboard_arrow_right),
|
||||||
FocusScope.of(context)
|
],
|
||||||
.requestFocus(inputFocus);
|
|
||||||
},
|
|
||||||
focusNode: inputFocus,
|
|
||||||
controller: sendController,
|
|
||||||
decoration: InputDecoration(
|
|
||||||
hintText: I18n.of(context).writeAMessage,
|
|
||||||
border: InputBorder.none,
|
|
||||||
suffixIcon: sendController.text.isEmpty
|
|
||||||
? InkWell(
|
|
||||||
child: Icon(room.encrypted
|
|
||||||
? Icons.lock
|
|
||||||
: Icons.lock_open),
|
|
||||||
onTap: () =>
|
|
||||||
Navigator.of(context).push(
|
|
||||||
AppRoute.defaultRoute(
|
|
||||||
context,
|
|
||||||
ChatEncryptionSettingsView(
|
|
||||||
widget.id),
|
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
: null,
|
: Container(
|
||||||
|
height: 56,
|
||||||
|
child: FlatButton(
|
||||||
|
onPressed: () =>
|
||||||
|
sendAgainAction(),
|
||||||
|
child: Row(
|
||||||
|
children: <Widget>[
|
||||||
|
Text(I18n.of(context)
|
||||||
|
.tryToSendAgain),
|
||||||
|
SizedBox(width: 4),
|
||||||
|
Icon(Icons.send, size: 16),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
: Container(),
|
||||||
|
]
|
||||||
|
: <Widget>[
|
||||||
|
kIsWeb
|
||||||
|
? Container()
|
||||||
|
: PopupMenuButton<String>(
|
||||||
|
icon: Icon(Icons.add),
|
||||||
|
onSelected: (String choice) async {
|
||||||
|
if (choice == "file") {
|
||||||
|
sendFileAction(context);
|
||||||
|
} else if (choice == "image") {
|
||||||
|
sendImageAction(context);
|
||||||
|
}
|
||||||
|
if (choice == "camera") {
|
||||||
|
openCameraAction(context);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
itemBuilder: (BuildContext context) =>
|
||||||
|
<PopupMenuEntry<String>>[
|
||||||
|
PopupMenuItem<String>(
|
||||||
|
value: "file",
|
||||||
|
child: ListTile(
|
||||||
|
leading: CircleAvatar(
|
||||||
|
backgroundColor: Colors.green,
|
||||||
|
foregroundColor: Colors.white,
|
||||||
|
child: Icon(Icons.attachment),
|
||||||
|
),
|
||||||
|
title: Text(
|
||||||
|
I18n.of(context).sendFile),
|
||||||
|
contentPadding:
|
||||||
|
EdgeInsets.all(0),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
PopupMenuItem<String>(
|
||||||
|
value: "image",
|
||||||
|
child: ListTile(
|
||||||
|
leading: CircleAvatar(
|
||||||
|
backgroundColor: Colors.blue,
|
||||||
|
foregroundColor: Colors.white,
|
||||||
|
child: Icon(Icons.image),
|
||||||
|
),
|
||||||
|
title: Text(
|
||||||
|
I18n.of(context).sendImage),
|
||||||
|
contentPadding:
|
||||||
|
EdgeInsets.all(0),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
PopupMenuItem<String>(
|
||||||
|
value: "camera",
|
||||||
|
child: ListTile(
|
||||||
|
leading: CircleAvatar(
|
||||||
|
backgroundColor:
|
||||||
|
Colors.purple,
|
||||||
|
foregroundColor: Colors.white,
|
||||||
|
child: Icon(Icons.camera),
|
||||||
|
),
|
||||||
|
title: Text(I18n.of(context)
|
||||||
|
.openCamera),
|
||||||
|
contentPadding:
|
||||||
|
EdgeInsets.all(0),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
Expanded(
|
||||||
|
child: Padding(
|
||||||
|
padding: const EdgeInsets.symmetric(
|
||||||
|
vertical: 4.0),
|
||||||
|
child: TextField(
|
||||||
|
minLines: 1,
|
||||||
|
maxLines: kIsWeb ? 1 : 8,
|
||||||
|
keyboardType: kIsWeb
|
||||||
|
? TextInputType.text
|
||||||
|
: TextInputType.multiline,
|
||||||
|
onSubmitted: (String text) {
|
||||||
|
send();
|
||||||
|
FocusScope.of(context)
|
||||||
|
.requestFocus(inputFocus);
|
||||||
|
},
|
||||||
|
focusNode: inputFocus,
|
||||||
|
controller: sendController,
|
||||||
|
decoration: InputDecoration(
|
||||||
|
hintText:
|
||||||
|
I18n.of(context).writeAMessage,
|
||||||
|
border: InputBorder.none,
|
||||||
|
prefixIcon:
|
||||||
|
sendController.text.isEmpty
|
||||||
|
? InkWell(
|
||||||
|
child: Icon(room.encrypted
|
||||||
|
? Icons.lock
|
||||||
|
: Icons.lock_open),
|
||||||
|
onTap: () =>
|
||||||
|
Navigator.of(context)
|
||||||
|
.push(
|
||||||
|
AppRoute.defaultRoute(
|
||||||
|
context,
|
||||||
|
ChatEncryptionSettingsView(
|
||||||
|
widget.id),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
: null,
|
||||||
|
),
|
||||||
|
onChanged: (String text) {
|
||||||
|
this.typingCoolDown?.cancel();
|
||||||
|
this.typingCoolDown =
|
||||||
|
Timer(Duration(seconds: 2), () {
|
||||||
|
this.typingCoolDown = null;
|
||||||
|
this.currentlyTyping = false;
|
||||||
|
room.sendTypingInfo(false);
|
||||||
|
});
|
||||||
|
this.typingTimeout ??=
|
||||||
|
Timer(Duration(seconds: 30), () {
|
||||||
|
this.typingTimeout = null;
|
||||||
|
this.currentlyTyping = false;
|
||||||
|
});
|
||||||
|
if (!this.currentlyTyping) {
|
||||||
|
this.currentlyTyping = true;
|
||||||
|
room.sendTypingInfo(true,
|
||||||
|
timeout: Duration(seconds: 30)
|
||||||
|
.inMilliseconds);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
),
|
||||||
),
|
),
|
||||||
onChanged: (String text) {
|
|
||||||
this.typingCoolDown?.cancel();
|
|
||||||
this.typingCoolDown =
|
|
||||||
Timer(Duration(seconds: 2), () {
|
|
||||||
this.typingCoolDown = null;
|
|
||||||
this.currentlyTyping = false;
|
|
||||||
room.sendTypingInfo(false);
|
|
||||||
});
|
|
||||||
this.typingTimeout ??=
|
|
||||||
Timer(Duration(seconds: 30), () {
|
|
||||||
this.typingTimeout = null;
|
|
||||||
this.currentlyTyping = false;
|
|
||||||
});
|
|
||||||
if (!this.currentlyTyping) {
|
|
||||||
this.currentlyTyping = true;
|
|
||||||
room.sendTypingInfo(true,
|
|
||||||
timeout: Duration(seconds: 30)
|
|
||||||
.inMilliseconds);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
),
|
),
|
||||||
),
|
IconButton(
|
||||||
),
|
icon: Icon(Icons.send),
|
||||||
IconButton(
|
onPressed: () => send(),
|
||||||
icon: Icon(Icons.send),
|
),
|
||||||
onPressed: () => send(),
|
],
|
||||||
),
|
),
|
||||||
],
|
)
|
||||||
),
|
: Container(),
|
||||||
)
|
],
|
||||||
: Container(),
|
),
|
||||||
],
|
),
|
||||||
),
|
],
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -104,7 +104,6 @@ class _NewPrivateChatState extends State<_NewPrivateChat> {
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
final String defaultDomain = Matrix.of(context).client.userID.domain;
|
|
||||||
return Scaffold(
|
return Scaffold(
|
||||||
appBar: AppBar(
|
appBar: AppBar(
|
||||||
title: Text(I18n.of(context).newPrivateChat),
|
title: Text(I18n.of(context).newPrivateChat),
|
||||||
|
@ -163,8 +162,7 @@ class _NewPrivateChatState extends State<_NewPrivateChat> {
|
||||||
)
|
)
|
||||||
: Icon(Icons.account_circle),
|
: Icon(Icons.account_circle),
|
||||||
prefixText: "@",
|
prefixText: "@",
|
||||||
hintText:
|
hintText: "${I18n.of(context).username.toLowerCase()}",
|
||||||
"${I18n.of(context).username.toLowerCase()}:$defaultDomain",
|
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
@ -190,7 +188,7 @@ class _NewPrivateChatState extends State<_NewPrivateChat> {
|
||||||
),
|
),
|
||||||
title: Text(
|
title: Text(
|
||||||
foundProfile["display_name"] ??
|
foundProfile["display_name"] ??
|
||||||
foundProfile["user_id"].localpart,
|
(foundProfile["user_id"] as String).localpart,
|
||||||
style: TextStyle(),
|
style: TextStyle(),
|
||||||
maxLines: 1,
|
maxLines: 1,
|
||||||
),
|
),
|
||||||
|
|
25
pubspec.lock
25
pubspec.lock
|
@ -117,8 +117,8 @@ packages:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
path: "."
|
path: "."
|
||||||
ref: e2fde3fa924cb9a1bdccf5dd6b63aad8d820d20a
|
ref: "0f68b60f16db924b10fa8954623e67de6252b35f"
|
||||||
resolved-ref: e2fde3fa924cb9a1bdccf5dd6b63aad8d820d20a
|
resolved-ref: "0f68b60f16db924b10fa8954623e67de6252b35f"
|
||||||
url: "https://gitlab.com/famedly/famedlysdk.git"
|
url: "https://gitlab.com/famedly/famedlysdk.git"
|
||||||
source: git
|
source: git
|
||||||
version: "0.0.1"
|
version: "0.0.1"
|
||||||
|
@ -181,6 +181,13 @@ packages:
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.2.5"
|
version: "1.2.5"
|
||||||
|
flutter_svg:
|
||||||
|
dependency: "direct main"
|
||||||
|
description:
|
||||||
|
name: flutter_svg
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "0.17.1"
|
||||||
flutter_test:
|
flutter_test:
|
||||||
dependency: "direct dev"
|
dependency: "direct dev"
|
||||||
description: flutter
|
description: flutter
|
||||||
|
@ -317,6 +324,20 @@ packages:
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.6.4"
|
version: "1.6.4"
|
||||||
|
path_drawing:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: path_drawing
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "0.4.1"
|
||||||
|
path_parsing:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: path_parsing
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "0.1.4"
|
||||||
path_provider:
|
path_provider:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
|
|
|
@ -11,7 +11,7 @@ description: Chat with your friends.
|
||||||
# In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion.
|
# In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion.
|
||||||
# Read more about iOS versioning at
|
# Read more about iOS versioning at
|
||||||
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
|
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
|
||||||
version: 0.7.2+22
|
version: 0.7.3+23
|
||||||
|
|
||||||
environment:
|
environment:
|
||||||
sdk: ">=2.6.0 <3.0.0"
|
sdk: ">=2.6.0 <3.0.0"
|
||||||
|
@ -27,7 +27,7 @@ dependencies:
|
||||||
famedlysdk:
|
famedlysdk:
|
||||||
git:
|
git:
|
||||||
url: https://gitlab.com/famedly/famedlysdk.git
|
url: https://gitlab.com/famedly/famedlysdk.git
|
||||||
ref: e2fde3fa924cb9a1bdccf5dd6b63aad8d820d20a
|
ref: 0f68b60f16db924b10fa8954623e67de6252b35f
|
||||||
|
|
||||||
localstorage: ^3.0.1+4
|
localstorage: ^3.0.1+4
|
||||||
bubble: ^1.1.9+1
|
bubble: ^1.1.9+1
|
||||||
|
@ -49,6 +49,7 @@ dependencies:
|
||||||
http: ^0.12.0+4
|
http: ^0.12.0+4
|
||||||
universal_html: ^1.1.12
|
universal_html: ^1.1.12
|
||||||
uni_links: ^0.2.0
|
uni_links: ^0.2.0
|
||||||
|
flutter_svg: ^0.17.1
|
||||||
|
|
||||||
intl: ^0.16.0
|
intl: ^0.16.0
|
||||||
intl_translation: ^0.17.9
|
intl_translation: ^0.17.9
|
||||||
|
@ -84,6 +85,7 @@ flutter:
|
||||||
- assets/logo.png
|
- assets/logo.png
|
||||||
- assets/private_chat_wallpaper.png
|
- assets/private_chat_wallpaper.png
|
||||||
- assets/new_group_wallpaper.png
|
- assets/new_group_wallpaper.png
|
||||||
|
- assets/chat.svg
|
||||||
# - images/a_dot_ham.jpeg
|
# - images/a_dot_ham.jpeg
|
||||||
|
|
||||||
# An image asset can refer to one or more resolution-specific "variants", see
|
# An image asset can refer to one or more resolution-specific "variants", see
|
||||||
|
|
Loading…
Reference in a new issue