From 06dde44c80e4507175eb5702dfb9fa93c9baae9b Mon Sep 17 00:00:00 2001 From: Abhishek Shroff Date: Thu, 1 May 2025 14:18:22 +0530 Subject: [PATCH] [client] Add logo in drawer header --- client/assets/images/logo.png | Bin 0 -> 3296 bytes client/lib/ui/app/nav_list.dart | 225 ++++++++++++++++++-------------- client/pubspec.yaml | 5 +- 3 files changed, 133 insertions(+), 97 deletions(-) create mode 100644 client/assets/images/logo.png diff --git a/client/assets/images/logo.png b/client/assets/images/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..3ee7ff45772e93b2978f33eef4351e503fe5a9cf GIT binary patch literal 3296 zcmb7Hc{J4B|G%FZ#=cD1BHQptj~J7E-^RW#gE00e`%Xxc=MmXSkC22KGP0xy8KY=C z9)%FeGWillq%4u`JN@Iz3271_w~9r?QBfB*oD~v09@u~ zSO-R={OYU-#^^8|!omnlfd82|`> z0`QYDMOX$PRuKTYHvpP<01%A0+hMQGD6mDCU5ExiLF!kB5+3Ts0l;Z)jx}&fm|B|& z&OePig`oXd{V*dvU|f5jO|8)bD|=2sAPVi|>wAv%%T|#Sn~V+zGT$;Tz(DcAnE3LJ zwDbwz!g3^*m#Ai7(1XfkceT@3Oo0CAWuHLln^Aa;{<6AubjR3t(mFAqb7}C)m5K`U ziuJE|*W!suKcfKZzqKkNYFl;iSX#-5AY~OV5tq4i|5NI0NO!41TH%CqxDiBVr&*1P zW|ZsmKjEgV5iKhhG>9CR3{j|w#jJIR$Wgg~0Y+uO^sgO0t<|F&58hJ%rxC&Y_qWW% z)%*S!@aiOT&w#uj7S_RQ!3}SU?!0N{)i5L)$Vd_JreLbMMZ7 zfO<}&a{rEMBV@rT)N?UpI2*Euvv!(`W;6QCQCk>EXv*hmy|cb-muRu>pf3a8wdj>O zi@Z=IM-)f<@0V@6=LC6gYv?x$zJT{x0rbRhh!-{T^HR8(yG~qn+V-_x&&C53UkezE z^0@X_c5H{$gpE|-RRHc!$jx#0S*s``SsUKmKF?CtP;PPq65=yV0`-q7|MtwiKZgHu zI=CaQP8_aSOJi;%1ql+a3zwGDGL-&_S##2xUGFTVJ0j{sUndj<>+=1C`1w8 z-FLK@)H9GMd>(u(Ddtjk85oRYs)5useOsDQPx@ol;zs)bogMI8kF(nta918v0O2JK zX@yk4*)xP7IYs8IXv$vUq(nG{gQk};r;5%YyoFL!g$Os4pci2s0>7|0+2wicCaVCq z!{9j>08FM0e3oy6xdwD_|AK}i8r^QGGL{9^tKd2M@}LaL5MmV!0SB`a>{3U^tQ;k@>eBA3X^DelZ&#NcLZXT~%Ktw~z#B^YBYgac0uKAkJkB8-I) zUpUJ>1oa1Tf(tp21PKHDRS<;w*C2mf2s{yn>pS~_|5U7CQCu$U8`Ye03}x^rJwtgX zymInO;6EbPdDky<>cbZ-Rxq$VRwgRjf)GfD?@AN8><&d9@J8NyGRYbSMO3adV{#y~ z{)d)tLqta3N3vtzA|lQcjO=Gd%9xi_0Gziod1S^G`!>y6lVDppQt`#FDwsPq?4A2LU=Fi}ez(&l>rwg}zMlG(2V zbp1L6GI`*<2IQg=iBvDCd*yme8`=aaRBzv>3BqrB>zk6pObHr5Hz4e(8wUfcJ@S?q zYzwaL%S1W_Hkx4FyyN?=X}4=W$IA2kt6}@Qc;M6&mFBAm3NS!x1aDD;y}Ji&>ZAF~ z_?Oe^JaWRiO6bn)O%CN#2=6lvC_Erej3_g0$l zY5v`t+wyJln#T=7+^c8JIVrpy`^0A&s4S3N`c={&+M-Tviz2&6+z}fQSgn zd2=M>{L-qDbc`F_c8uYqa7SHTiA3#+1tocGNjgQCFe-Dz)tV_qpp{>gP&-Q%AEzsh zwXox%_#=Vd^!c_?$0#bBe*l-YDv5q2EhK;Ug-?q>d|V8AWx>${;|E%+DQ9aJgBpEX zzcS~^;9VGGoVpyXtM()HVtCoHV`m z{C=R7-+a6f-G1vd%MZBg$SSk(sGm~lHxb&k1xx#4C+|rz`6jxzocK`nR)avl0&=H%uA5;9b7GlSXkKS$s(yW{21?bPj0_8(AC?uEmI!LuHZ^J zX^CbMHy-=Jch)oGVwrp{R6C_K9~Capky@Hp9&PM`Rm5YHK@!i=rVLK!;}D`dhjbEl zmp9U$d8_1k>&F2hLS5~dT$O7-m$KFqkR?1l8VO&u{i^HYetK@~Cv-}B)99iPM=^2@@u`a>l+7BjY4oENnqUa&O=9yZ4eeXI_t3 z2oabT801o4dqk34?m4!_HXGoEHo9oGk>R7)txUFz+F7omX`2Jyz_%EEk^4lC!;9mA z?<8S*Ns4NM`c9~VMGfzv1_Eb1nC|&F3(7E$pZjo@YJL$Lp);#Ba&;oOl0IgrnsBZl zCohuteuMmu%cr(Ey$Oc_n0~?0q?`ZpV4AfBY?enif1&Jqv60 z4Rc9ui+ZYw@c#4r!$CHbETrzAah$?dX|whQVJrRYDii=y*Q9@Em;T9XOY#BqUovzn z>TVcl!E9w`p)c3oIt3!fIf3y{b zI&oj~Q=Aj2t;_LK^=&PhntrHFYX4=Sli>9{fj^76W5zB`m$c_W~*?rn)$ zw1(bcJOzve1ge!jzE0ZeEYkwF-3rcCN6yA|C!Vri)O ze2rGFcJ@^Kks5Bh>I(j!wi3~*&%NPr9=A@X(-gD~X({oSJUB@k1u6!eSFcp*lnK2i!6mqD9hkxRo(o=9dbe|Vw z^{r*Gc;4+|!*Xss6V;FgixQ~nuDK*DXV2ChJEOL*AwO!P2)3_Wz;#zsdOb$UU5D7Q z!!qM+>fB(#jx`q^AygM1W7755M?KgnwsdZM$XzV%I#fG^ja+CbSbxZNft2}(EcoJ5 zN4_(~>$*wtIJ?fwj{)tKoD4`vM{HP8d%OZ!kHMSC`2aUBV}8B5BjNFiU94y|*AV3P zakK8uV$$Lwk>fIsQ$IM-y;7~Z%4HvaxN0pp%D5%(9qehvC+N=@#GH=7R73D#VO8+l z(FiYO=x&Snlb#s`$%f+d`!_|+w5)y+Egf44is#;LzHf3$@I?vOT#ato$iNvW>; zRF_IE*JVg;s90K%!j0`(7@YkB=Qx*JPhySr?_`(H5BRwl3<~gT6x6=d!J5f~{J0>Ub!oC^)`9?YO~mXv>a1ru;Ib(bhYSEzV43W*;p@D$8kAm zmzbnmWEUH2NJ_!t0(); - return SingleChildScrollView( + // final color = Theme.of(context).colorScheme.onSurface; + return SafeArea( child: Column( - crossAxisAlignment: CrossAxisAlignment.start, children: [ - if (showFab) - Padding( - padding: const EdgeInsets.all(16), - child: PopupMenuButton( - tooltip: 'Create', - position: PopupMenuPosition.under, - itemBuilder: (context) => [ - for (final action in getCreateActions(context)) - if (action == null) - const PopupMenuItem(enabled: false, height: 16, child: Divider()) - else - PopupMenuItem( - child: Text(action.descripiton), onTap: () => Actions.maybeInvoke(context, action.intent)), - ], - child: FloatingActionButton.extended( - icon: const Icon(Icons.add), - label: const Text('New'), - elevation: 0, - enableFeedback: false, - onPressed: null), - ), - ), - ListTile( - leading: const Icon(Icons.home), - title: const Text('Home'), - onTap: () => Actions.maybeInvoke(context, NavIntent(target: ExplorerPageHome(context.read()))), - ), - ListTile( - leading: const Icon(Icons.history), - title: const Text('Recents'), - onTap: () => context.read().go(ExplorerPageRecents()), - ), - ListTile( - leading: const Icon(Icons.people_outlined), - title: const Text('Shared With Me'), - onTap: () => context.read().go(ExplorerPageShared()), - ), - StreamBuilder>( - stream: account.db.selectBookmarks().watch(), - initialData: const [], - builder: (context, snapshot) { - return Theme( - data: Theme.of(context).copyWith(dividerColor: Colors.transparent), - child: ExpansionTile( - title: Text('Bookmarks'), - leading: Icon(Icons.bookmark), - initiallyExpanded: true, - children: (snapshot.data ?? const []) - .map((b) => ListTile( - title: Text(b.name), - leading: Icon(null), - onTap: () async { - if (b.dir) { - Actions.maybeInvoke( - context, NavIntent(target: ExplorerPageFolder(folderId: b.resourceId))); - return; - } - final resource = await account.db.getResource(b.resourceId); - if (!context.mounted) return; - if (resource == null) { - final nav = Navigator.of(context); - showProgressDialog(context, title: 'Downloading ${b.name}'); - final success = await account.resourceRepository - .requestResource(b.resourceId) - .then((result) => result is ApiSuccessResponse); - nav.pop(); - if (!success) { - if (context.mounted) { - showAlertDialog(context, title: 'Unable to get file info'); - } - return; - } - } - if (resource != null && context.mounted) { - Actions.maybeInvoke(context, OpenResourceIntent(resource)); - } - }, - )) - .toList(growable: false), + Padding( + padding: const EdgeInsets.symmetric(horizontal: 12.0), + child: Row( + mainAxisSize: MainAxisSize.min, + children: [ + const Padding( + padding: EdgeInsets.only(right: 6.0), + child: Image( + image: AssetImage('assets/images/logo.png'), + height: 36, + width: 36, + fit: BoxFit.contain, + ), ), - ); - }, - ), - ListTile( - leading: const Icon(Icons.delete), - title: const Text('Trash'), - onTap: () => context.read().go(ExplorerPageTrash()), + Text('PHYLUM', style: Theme.of(context).textTheme.headlineSmall + // style: TextStyle( + // color: color, + // ), + ), + ], + ), ), const Divider(), - if (!kIsWeb) const DownloadButton(), - const ServerStatusButton(), - ListTile( - leading: const Icon(Icons.settings), - title: const Text('Settings'), - onTap: () { - context.read().logOut(); - }, + Expanded( + child: SingleChildScrollView( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + if (showFab) + Padding( + padding: const EdgeInsets.all(16), + child: PopupMenuButton( + tooltip: 'Create', + position: PopupMenuPosition.under, + itemBuilder: (context) => [ + for (final action in getCreateActions(context)) + if (action == null) + const PopupMenuItem(enabled: false, height: 16, child: Divider()) + else + PopupMenuItem( + child: Text(action.descripiton), + onTap: () => Actions.maybeInvoke(context, action.intent)), + ], + child: FloatingActionButton.extended( + icon: const Icon(Icons.add), + label: const Text('New'), + elevation: 0, + enableFeedback: false, + onPressed: null), + ), + ), + ListTile( + leading: const Icon(Icons.home), + title: const Text('Home'), + onTap: () => Actions.maybeInvoke(context, NavIntent(target: ExplorerPageHome(context.read()))), + ), + ListTile( + leading: const Icon(Icons.history), + title: const Text('Recents'), + onTap: () => context.read().go(ExplorerPageRecents()), + ), + ListTile( + leading: const Icon(Icons.people_outlined), + title: const Text('Shared With Me'), + onTap: () => context.read().go(ExplorerPageShared()), + ), + StreamBuilder>( + stream: account.db.selectBookmarks().watch(), + initialData: const [], + builder: (context, snapshot) { + return Theme( + data: Theme.of(context).copyWith(dividerColor: Colors.transparent), + child: ExpansionTile( + title: Text('Bookmarks'), + leading: Icon(Icons.bookmark), + initiallyExpanded: true, + children: (snapshot.data ?? const []) + .map((b) => ListTile( + title: Text(b.name), + leading: Icon(null), + onTap: () async { + if (b.dir) { + Actions.maybeInvoke( + context, NavIntent(target: ExplorerPageFolder(folderId: b.resourceId))); + return; + } + final resource = await account.db.getResource(b.resourceId); + if (!context.mounted) return; + if (resource == null) { + final nav = Navigator.of(context); + showProgressDialog(context, title: 'Downloading ${b.name}'); + final success = await account.resourceRepository + .requestResource(b.resourceId) + .then((result) => result is ApiSuccessResponse); + nav.pop(); + if (!success) { + if (context.mounted) { + showAlertDialog(context, title: 'Unable to get file info'); + } + return; + } + } + if (resource != null && context.mounted) { + Actions.maybeInvoke(context, OpenResourceIntent(resource)); + } + }, + )) + .toList(growable: false), + ), + ); + }, + ), + ListTile( + leading: const Icon(Icons.delete), + title: const Text('Trash'), + onTap: () => context.read().go(ExplorerPageTrash()), + ), + const Divider(), + if (!kIsWeb) const DownloadButton(), + const ServerStatusButton(), + ListTile( + leading: const Icon(Icons.settings), + title: const Text('Settings'), + onTap: () { + context.read().logOut(); + }, + ), + ], + ), + ), ), ], ), diff --git a/client/pubspec.yaml b/client/pubspec.yaml index d43213b6..aa303992 100644 --- a/client/pubspec.yaml +++ b/client/pubspec.yaml @@ -49,4 +49,7 @@ dev_dependencies: build_runner: ^2.4.12 flutter: - uses-material-design: true \ No newline at end of file + uses-material-design: true + + assets: + - assets/images/logo.png \ No newline at end of file