From a522a8c09ceace6e348f0341cd10c5a31ddcd7c2 Mon Sep 17 00:00:00 2001 From: poppingmoon <63451158+poppingmoon@users.noreply.github.com> Date: Tue, 28 Jan 2025 07:42:12 +0900 Subject: [PATCH] feat: use material symbols (#531) * feat: use material symbols * feat: use off icons --- lib/gen/assets.gen.dart | 99 +++------------------ lib/view/page/settings/mute_block_page.dart | 3 +- lib/view/widget/emoji_sheet.dart | 5 +- lib/view/widget/note_detailed_widget.dart | 3 +- lib/view/widget/note_header.dart | 3 +- lib/view/widget/note_sheet.dart | 46 +++++----- lib/view/widget/post_form.dart | 3 +- lib/view/widget/renote_header.dart | 3 +- lib/view/widget/renote_sheet.dart | 4 +- lib/view/widget/role_preview.dart | 17 +++- lib/view/widget/user_sheet.dart | 3 +- pubspec.lock | 17 ++++ pubspec.yaml | 27 +++--- 13 files changed, 96 insertions(+), 137 deletions(-) diff --git a/lib/gen/assets.gen.dart b/lib/gen/assets.gen.dart index e2883b67..11eca509 100644 --- a/lib/gen/assets.gen.dart +++ b/lib/gen/assets.gen.dart @@ -68,171 +68,101 @@ class $AssetsMisskeyGen { class $AssetsFontsBIZUDGothicGen { const $AssetsFontsBIZUDGothicGen(); - /// File path: assets/fonts/BIZ_UDGothic/BIZUDGothic-Bold.ttf - String get bIZUDGothicBold => - 'assets/fonts/BIZ_UDGothic/BIZUDGothic-Bold.ttf'; - - /// File path: assets/fonts/BIZ_UDGothic/BIZUDGothic-Regular.ttf - String get bIZUDGothicRegular => - 'assets/fonts/BIZ_UDGothic/BIZUDGothic-Regular.ttf'; - /// File path: assets/fonts/BIZ_UDGothic/OFL.txt String get ofl => 'assets/fonts/BIZ_UDGothic/OFL.txt'; /// List of all assets - List get values => [bIZUDGothicBold, bIZUDGothicRegular, ofl]; + List get values => [ofl]; } class $AssetsFontsBIZUDMinchoGen { const $AssetsFontsBIZUDMinchoGen(); - /// File path: assets/fonts/BIZ_UDMincho/BIZUDMincho-Bold.ttf - String get bIZUDMinchoBold => - 'assets/fonts/BIZ_UDMincho/BIZUDMincho-Bold.ttf'; - - /// File path: assets/fonts/BIZ_UDMincho/BIZUDMincho-Regular.ttf - String get bIZUDMinchoRegular => - 'assets/fonts/BIZ_UDMincho/BIZUDMincho-Regular.ttf'; - /// File path: assets/fonts/BIZ_UDMincho/OFL.txt String get ofl => 'assets/fonts/BIZ_UDMincho/OFL.txt'; /// List of all assets - List get values => [bIZUDMinchoBold, bIZUDMinchoRegular, ofl]; + List get values => [ofl]; } class $AssetsFontsMplus1Gen { const $AssetsFontsMplus1Gen(); - /// File path: assets/fonts/Mplus1/Mplus1-Bold.otf - String get mplus1Bold => 'assets/fonts/Mplus1/Mplus1-Bold.otf'; - - /// File path: assets/fonts/Mplus1/Mplus1-Regular.otf - String get mplus1Regular => 'assets/fonts/Mplus1/Mplus1-Regular.otf'; - /// File path: assets/fonts/Mplus1/OFL.txt String get ofl => 'assets/fonts/Mplus1/OFL.txt'; /// List of all assets - List get values => [mplus1Bold, mplus1Regular, ofl]; + List get values => [ofl]; } class $AssetsFontsMplus2Gen { const $AssetsFontsMplus2Gen(); - /// File path: assets/fonts/Mplus2/Mplus2-Bold.otf - String get mplus2Bold => 'assets/fonts/Mplus2/Mplus2-Bold.otf'; - - /// File path: assets/fonts/Mplus2/Mplus2-Regular.otf - String get mplus2Regular => 'assets/fonts/Mplus2/Mplus2-Regular.otf'; - /// File path: assets/fonts/Mplus2/OFL.txt String get ofl => 'assets/fonts/Mplus2/OFL.txt'; /// List of all assets - List get values => [mplus2Bold, mplus2Regular, ofl]; + List get values => [ofl]; } class $AssetsFontsNotoSansJPGen { const $AssetsFontsNotoSansJPGen(); - /// File path: assets/fonts/Noto_Sans_JP/NotoSansJP-Bold.ttf - String get notoSansJPBold => 'assets/fonts/Noto_Sans_JP/NotoSansJP-Bold.ttf'; - - /// File path: assets/fonts/Noto_Sans_JP/NotoSansJP-Regular.ttf - String get notoSansJPRegular => - 'assets/fonts/Noto_Sans_JP/NotoSansJP-Regular.ttf'; - /// File path: assets/fonts/Noto_Sans_JP/OFL.txt String get ofl => 'assets/fonts/Noto_Sans_JP/OFL.txt'; /// List of all assets - List get values => [notoSansJPBold, notoSansJPRegular, ofl]; + List get values => [ofl]; } class $AssetsFontsNotoSansKRGen { const $AssetsFontsNotoSansKRGen(); - /// File path: assets/fonts/Noto_Sans_KR/NotoSansKR-Bold.ttf - String get notoSansKRBold => 'assets/fonts/Noto_Sans_KR/NotoSansKR-Bold.ttf'; - - /// File path: assets/fonts/Noto_Sans_KR/NotoSansKR-Regular.ttf - String get notoSansKRRegular => - 'assets/fonts/Noto_Sans_KR/NotoSansKR-Regular.ttf'; - /// File path: assets/fonts/Noto_Sans_KR/OFL.txt String get ofl => 'assets/fonts/Noto_Sans_KR/OFL.txt'; /// List of all assets - List get values => [notoSansKRBold, notoSansKRRegular, ofl]; + List get values => [ofl]; } class $AssetsFontsNotoSansSCGen { const $AssetsFontsNotoSansSCGen(); - /// File path: assets/fonts/Noto_Sans_SC/NotoSansSC-Bold.ttf - String get notoSansSCBold => 'assets/fonts/Noto_Sans_SC/NotoSansSC-Bold.ttf'; - - /// File path: assets/fonts/Noto_Sans_SC/NotoSansSC-Regular.ttf - String get notoSansSCRegular => - 'assets/fonts/Noto_Sans_SC/NotoSansSC-Regular.ttf'; - /// File path: assets/fonts/Noto_Sans_SC/OFL.txt String get ofl => 'assets/fonts/Noto_Sans_SC/OFL.txt'; /// List of all assets - List get values => [notoSansSCBold, notoSansSCRegular, ofl]; + List get values => [ofl]; } class $AssetsFontsNotoSansTCGen { const $AssetsFontsNotoSansTCGen(); - /// File path: assets/fonts/Noto_Sans_TC/NotoSansTC-Bold.ttf - String get notoSansTCBold => 'assets/fonts/Noto_Sans_TC/NotoSansTC-Bold.ttf'; - - /// File path: assets/fonts/Noto_Sans_TC/NotoSansTC-Regular.ttf - String get notoSansTCRegular => - 'assets/fonts/Noto_Sans_TC/NotoSansTC-Regular.ttf'; - /// File path: assets/fonts/Noto_Sans_TC/OFL.txt String get ofl => 'assets/fonts/Noto_Sans_TC/OFL.txt'; /// List of all assets - List get values => [notoSansTCBold, notoSansTCRegular, ofl]; + List get values => [ofl]; } class $AssetsFontsNotoSerifJPGen { const $AssetsFontsNotoSerifJPGen(); - /// File path: assets/fonts/Noto_Serif_JP/NotoSerifJP-Bold.otf - String get notoSerifJPBold => - 'assets/fonts/Noto_Serif_JP/NotoSerifJP-Bold.otf'; - - /// File path: assets/fonts/Noto_Serif_JP/NotoSerifJP-Regular.otf - String get notoSerifJPRegular => - 'assets/fonts/Noto_Serif_JP/NotoSerifJP-Regular.otf'; - /// File path: assets/fonts/Noto_Serif_JP/OFL.txt String get ofl => 'assets/fonts/Noto_Serif_JP/OFL.txt'; /// List of all assets - List get values => [notoSerifJPBold, notoSerifJPRegular, ofl]; + List get values => [ofl]; } class $AssetsFontsNunitoGen { const $AssetsFontsNunitoGen(); - /// File path: assets/fonts/Nunito/Nunito-Bold.ttf - String get nunitoBold => 'assets/fonts/Nunito/Nunito-Bold.ttf'; - - /// File path: assets/fonts/Nunito/Nunito-Regular.ttf - String get nunitoRegular => 'assets/fonts/Nunito/Nunito-Regular.ttf'; - /// File path: assets/fonts/Nunito/OFL.txt String get ofl => 'assets/fonts/Nunito/OFL.txt'; /// List of all assets - List get values => [nunitoBold, nunitoRegular, ofl]; + List get values => [ofl]; } class $AssetsFontsPretendardGen { @@ -241,15 +171,8 @@ class $AssetsFontsPretendardGen { /// File path: assets/fonts/Pretendard/LICENSE.txt String get license => 'assets/fonts/Pretendard/LICENSE.txt'; - /// File path: assets/fonts/Pretendard/Pretendard-Bold.otf - String get pretendardBold => 'assets/fonts/Pretendard/Pretendard-Bold.otf'; - - /// File path: assets/fonts/Pretendard/Pretendard-Regular.otf - String get pretendardRegular => - 'assets/fonts/Pretendard/Pretendard-Regular.otf'; - /// List of all assets - List get values => [license, pretendardBold, pretendardRegular]; + List get values => [license]; } class $AssetsMisskeyPackagesGen { diff --git a/lib/view/page/settings/mute_block_page.dart b/lib/view/page/settings/mute_block_page.dart index 7329ed2d..85f71c65 100644 --- a/lib/view/page/settings/mute_block_page.dart +++ b/lib/view/page/settings/mute_block_page.dart @@ -2,6 +2,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_hooks/flutter_hooks.dart'; import 'package:go_router/go_router.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; +import 'package:material_off_icons/material_off_icons.dart'; import '../../../constant/shortcuts.dart'; import '../../../i18n/strings.g.dart'; @@ -32,7 +33,7 @@ class MuteBlockPage extends StatelessWidget { _MutedEmojisEditor(account: account), _InstanceMuteEditor(account: account), ListTile( - leading: const Icon(Icons.repeat_rounded), + leading: const Icon(OffIcons.repeat_rounded), title: Text('${t.misskey.mutedUsers} (${t.misskey.renote})'), trailing: const Icon(Icons.navigate_next), onTap: () => context diff --git a/lib/view/widget/emoji_sheet.dart b/lib/view/widget/emoji_sheet.dart index a8a08ac8..2700cf6a 100644 --- a/lib/view/widget/emoji_sheet.dart +++ b/lib/view/widget/emoji_sheet.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; +import 'package:material_symbols_icons/symbols.dart'; import 'package:misskey_dart/misskey_dart.dart'; import '../../i18n/strings.g.dart'; @@ -139,7 +140,7 @@ class EmojiSheet extends ConsumerWidget { if (!account.isGuest && host == null) ...[ if (!isPinnedForReaction) ListTile( - leading: const Icon(Icons.push_pin), + leading: const Icon(Symbols.keep, fill: 1.0), title: Text('${t.aria.pinToEmojiPicker} (${t.misskey.reaction})'), onTap: () { ref @@ -153,7 +154,7 @@ class EmojiSheet extends ConsumerWidget { ), if (!isPinned) ListTile( - leading: const Icon(Icons.push_pin_outlined), + leading: const Icon(Symbols.keep_off, fill: 1.0), title: Text('${t.aria.pinToEmojiPicker} (${t.misskey.general})'), onTap: () { ref diff --git a/lib/view/widget/note_detailed_widget.dart b/lib/view/widget/note_detailed_widget.dart index 453c9345..43be15a6 100644 --- a/lib/view/widget/note_detailed_widget.dart +++ b/lib/view/widget/note_detailed_widget.dart @@ -3,6 +3,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_hooks/flutter_hooks.dart'; import 'package:go_router/go_router.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; +import 'package:material_off_icons/material_off_icons.dart'; import 'package:misskey_dart/misskey_dart.dart' hide Clip; import '../../extension/note_extension.dart'; @@ -309,7 +310,7 @@ class NoteDetailedWidget extends HookConsumerWidget { Tooltip( message: t.misskey.visibility_ .disableFederation, - child: const Icon(Icons.rocket_outlined), + child: const Icon(OffIcons.rocket), ), ], ), diff --git a/lib/view/widget/note_header.dart b/lib/view/widget/note_header.dart index 9e88fc2b..938f15dc 100644 --- a/lib/view/widget/note_header.dart +++ b/lib/view/widget/note_header.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; +import 'package:material_off_icons/material_off_icons.dart'; import 'package:misskey_dart/misskey_dart.dart'; import '../../extension/text_style_extension.dart'; @@ -135,7 +136,7 @@ class NoteHeader extends HookConsumerWidget { if (note.localOnly) Tooltip( message: t.misskey.visibility_.disableFederation, - child: const Icon(Icons.rocket_outlined), + child: const Icon(OffIcons.rocket), ), if (note.channel != null) Tooltip( diff --git a/lib/view/widget/note_sheet.dart b/lib/view/widget/note_sheet.dart index 22ad4d59..b4cf3496 100644 --- a/lib/view/widget/note_sheet.dart +++ b/lib/view/widget/note_sheet.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; +import 'package:material_symbols_icons/symbols.dart'; import 'package:misskey_dart/misskey_dart.dart' hide Clip; import 'package:share_plus/share_plus.dart'; @@ -371,31 +372,28 @@ class NoteSheet extends ConsumerWidget { if (!account.isGuest) ...[ if (appearNote.user.host == null && appearNote.user.username == account.username) - ListTile( - leading: const Icon(Icons.push_pin), - title: Text( - i?.pinnedNoteIds?.contains(appearNote.id) ?? false - ? t.misskey.unpin - : t.misskey.pin, + if (i?.pinnedNoteIds?.contains(appearNote.id) ?? false) + ListTile( + leading: const Icon(Symbols.keep_off, fill: 1.0), + title: Text(t.misskey.unpin), + onTap: () => futureWithDialog( + context, + ref + .read(iNotifierProvider(account).notifier) + .unpin(appearNote.id), + ), + ) + else + ListTile( + leading: const Icon(Symbols.keep, fill: 1.0), + title: Text(t.misskey.pin), + onTap: () => futureWithDialog( + context, + ref + .read(iNotifierProvider(account).notifier) + .pin(appearNote.id), + ), ), - onTap: () async { - if (i?.pinnedNoteIds?.contains(appearNote.id) ?? false) { - await futureWithDialog( - context, - ref - .read(iNotifierProvider(account).notifier) - .unpin(appearNote.id), - ); - } else { - await futureWithDialog( - context, - ref - .read(iNotifierProvider(account).notifier) - .pin(appearNote.id), - ); - } - }, - ), ListTile( leading: const Icon(Icons.attach_file), title: Text(t.misskey.clip), diff --git a/lib/view/widget/post_form.dart b/lib/view/widget/post_form.dart index e6637b80..99e8c61d 100644 --- a/lib/view/widget/post_form.dart +++ b/lib/view/widget/post_form.dart @@ -9,6 +9,7 @@ import 'package:flutter_hooks/flutter_hooks.dart'; // import 'package:flutter_inset_shadow/flutter_inset_shadow.dart'; import 'package:go_router/go_router.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; +import 'package:material_off_icons/material_off_icons.dart'; import 'package:mfm_parser/mfm_parser.dart'; import 'package:misskey_dart/misskey_dart.dart' hide Clip; @@ -533,7 +534,7 @@ class PostForm extends HookConsumerWidget { .withValues(alpha: 0.5) : null, icon: request.localOnly ?? false - ? const Icon(Icons.rocket_outlined) + ? const Icon(OffIcons.rocket_outlined) : const Icon(Icons.rocket), ), PopupMenuButton( diff --git a/lib/view/widget/renote_header.dart b/lib/view/widget/renote_header.dart index a2673f70..f96fa41e 100644 --- a/lib/view/widget/renote_header.dart +++ b/lib/view/widget/renote_header.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; +import 'package:material_off_icons/material_off_icons.dart'; import 'package:misskey_dart/misskey_dart.dart'; import '../../extension/text_style_extension.dart'; @@ -109,7 +110,7 @@ class RenoteHeader extends HookConsumerWidget { if (note.localOnly) Tooltip( message: t.misskey.visibility_.disableFederation, - child: const Icon(Icons.rocket_outlined), + child: const Icon(OffIcons.rocket), ), if (note.channel != null) Tooltip( diff --git a/lib/view/widget/renote_sheet.dart b/lib/view/widget/renote_sheet.dart index 7265bf8b..f90d8b2d 100644 --- a/lib/view/widget/renote_sheet.dart +++ b/lib/view/widget/renote_sheet.dart @@ -2,6 +2,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_hooks/flutter_hooks.dart'; import 'package:go_router/go_router.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; +import 'package:material_off_icons/material_off_icons.dart'; import 'package:misskey_dart/misskey_dart.dart'; import '../../i18n/strings.g.dart'; @@ -169,8 +170,7 @@ class RenoteSheet extends HookConsumerWidget { ), ), SwitchListTile( - secondary: - Icon(localOnly.value ? Icons.rocket_outlined : Icons.rocket), + secondary: Icon(localOnly.value ? OffIcons.rocket : Icons.rocket), title: Text(t.misskey.localOnly), value: localOnly.value, onChanged: !note.localOnly diff --git a/lib/view/widget/role_preview.dart b/lib/view/widget/role_preview.dart index dcbacaaf..ff519d90 100644 --- a/lib/view/widget/role_preview.dart +++ b/lib/view/widget/role_preview.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; +import 'package:material_symbols_icons/symbols.dart'; import 'package:misskey_dart/misskey_dart.dart'; import '../../i18n/strings.g.dart'; @@ -35,16 +36,24 @@ class RolePreview extends ConsumerWidget { width: 28.0, height: 28.0, ), - RolesListResponse(isAdministrator: true) => - Icon(Icons.shield, color: Theme.of(context).colorScheme.primary), - RolesListResponse(isModerator: true) => - Icon(Icons.shield, color: Theme.of(context).colorScheme.primary), + RolesListResponse(isAdministrator: true) => Icon( + Symbols.crown, + color: Theme.of(context).colorScheme.primary, + size: 28.0, + fill: 1.0, + ), + RolesListResponse(isModerator: true) => Icon( + Icons.shield, + color: Theme.of(context).colorScheme.primary, + size: 28.0, + ), _ => Icon( Icons.person, color: Theme.of(context) .colorScheme .onSurface .withValues(alpha: 0.7), + size: 28.0, ) }, title: Text(role.name), diff --git a/lib/view/widget/user_sheet.dart b/lib/view/widget/user_sheet.dart index f30d244a..c39e61f0 100644 --- a/lib/view/widget/user_sheet.dart +++ b/lib/view/widget/user_sheet.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; +import 'package:material_off_icons/material_off_icons.dart'; import 'package:misskey_dart/misskey_dart.dart' hide Clip; import '../../extension/user_extension.dart'; @@ -342,7 +343,7 @@ class UserSheet extends ConsumerWidget { ) else ListTile( - leading: const Icon(Icons.repeat_on_rounded), + leading: const Icon(OffIcons.repeat_rounded), title: Text(t.misskey.renoteMute), onTap: () => futureWithDialog( context, diff --git a/pubspec.lock b/pubspec.lock index f6d2eaa9..63cf2cb6 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -1238,6 +1238,23 @@ packages: url: "https://pub.dev" source: hosted version: "0.11.1" + material_off_icons: + dependency: "direct main" + description: + path: "." + ref: d2ba3655f1104ed628cf9ecd88f603d71b92d90a + resolved-ref: d2ba3655f1104ed628cf9ecd88f603d71b92d90a + url: "https://github.com/poppingmoon/material_off_icons" + source: git + version: "0.1.0" + material_symbols_icons: + dependency: "direct main" + description: + name: material_symbols_icons + sha256: "89aac72d25dd49303f71b3b1e70f8374791846729365b25bebc2a2531e5b86cd" + url: "https://pub.dev" + source: hosted + version: "4.2801.1" matrix2d: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index dd7c04bb..b4705960 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -75,6 +75,11 @@ dependencies: json_annotation: ^4.9.0 just_audio: ^0.9.43 kana_kit: ^2.1.1 + material_off_icons: + git: + url: https://github.com/poppingmoon/material_off_icons + ref: d2ba3655f1104ed628cf9ecd88f603d71b92d90a + material_symbols_icons: ^4.2801.1 mfm_parser: git: url: https://github.com/poppingmoon/dart_mfm_parser @@ -151,17 +156,17 @@ flutter: uses-material-design: true assets: - assets/ - - assets/fonts/BIZ_UDGothic/ - - assets/fonts/BIZ_UDMincho/ - - assets/fonts/Mplus1/ - - assets/fonts/Mplus2/ - - assets/fonts/Noto_Sans_JP/ - - assets/fonts/Noto_Sans_KR/ - - assets/fonts/Noto_Sans_SC/ - - assets/fonts/Noto_Sans_TC/ - - assets/fonts/Noto_Serif_JP/ - - assets/fonts/Nunito/ - - assets/fonts/Pretendard/ + - assets/fonts/BIZ_UDGothic/OFL.txt + - assets/fonts/BIZ_UDMincho/OFL.txt + - assets/fonts/Mplus1/OFL.txt + - assets/fonts/Mplus2/OFL.txt + - assets/fonts/Noto_Sans_JP/OFL.txt + - assets/fonts/Noto_Sans_KR/OFL.txt + - assets/fonts/Noto_Sans_SC/OFL.txt + - assets/fonts/Noto_Sans_TC/OFL.txt + - assets/fonts/Noto_Serif_JP/OFL.txt + - assets/fonts/Nunito/OFL.txt + - assets/fonts/Pretendard/LICENSE.txt - assets/misskey/COPYING - assets/misskey/LICENSE - assets/misskey/packages/frontend/assets/