diff --git a/lib/bootstrapper.dart b/lib/bootstrapper.dart index ab4a5c7..5e29d6f 100644 --- a/lib/bootstrapper.dart +++ b/lib/bootstrapper.dart @@ -17,6 +17,7 @@ import 'package:solian/providers/relation.dart'; import 'package:solian/providers/theme_switcher.dart'; import 'package:solian/providers/websocket.dart'; import 'package:solian/services.dart'; +import 'package:solian/widgets/root_container.dart'; import 'package:solian/widgets/sized_container.dart'; import 'package:flutter_app_update/flutter_app_update.dart'; import 'package:version/version.dart'; @@ -255,8 +256,7 @@ class _BootstrapperShellState extends State { Widget build(BuildContext context) { if (_isBusy || _isErrored) { return GestureDetector( - child: Material( - color: Theme.of(context).colorScheme.surface, + child: RootContainer( child: Column( mainAxisSize: MainAxisSize.max, mainAxisAlignment: MainAxisAlignment.spaceAround, diff --git a/lib/screens/about.dart b/lib/screens/about.dart index 4d8775a..482e619 100644 --- a/lib/screens/about.dart +++ b/lib/screens/about.dart @@ -4,6 +4,7 @@ import 'package:get/get.dart'; import 'package:intl/intl.dart'; import 'package:package_info_plus/package_info_plus.dart'; import 'package:shared_preferences/shared_preferences.dart'; +import 'package:solian/widgets/root_container.dart'; import 'package:solian/widgets/sized_container.dart'; import 'package:url_launcher/url_launcher_string.dart'; @@ -15,8 +16,7 @@ class AboutScreen extends StatelessWidget { const denseButtonStyle = ButtonStyle(visualDensity: VisualDensity(vertical: -4)); - return Material( - color: Theme.of(context).colorScheme.surface, + return RootContainer( child: SizedBox( width: double.infinity, child: Column( diff --git a/lib/screens/account.dart b/lib/screens/account.dart index 676b60b..85ab21c 100644 --- a/lib/screens/account.dart +++ b/lib/screens/account.dart @@ -7,6 +7,7 @@ import 'package:solian/providers/account_status.dart'; import 'package:solian/providers/relation.dart'; import 'package:solian/router.dart'; import 'package:solian/widgets/account/account_heading.dart'; +import 'package:solian/widgets/root_container.dart'; import 'package:solian/widgets/sized_container.dart'; import 'package:badges/badges.dart' as badges; @@ -49,8 +50,7 @@ class _AccountScreenState extends State { final AuthProvider auth = Get.find(); - return Material( - color: Theme.of(context).colorScheme.surface, + return RootContainer( child: SafeArea( child: Obx(() { if (auth.isAuthorized.isFalse) { diff --git a/lib/screens/account/friend.dart b/lib/screens/account/friend.dart index d878aa3..113d33f 100644 --- a/lib/screens/account/friend.dart +++ b/lib/screens/account/friend.dart @@ -6,6 +6,7 @@ import 'package:solian/models/relations.dart'; import 'package:solian/providers/relation.dart'; import 'package:solian/theme.dart'; import 'package:solian/widgets/account/relative_list.dart'; +import 'package:solian/widgets/root_container.dart'; class FriendScreen extends StatefulWidget { const FriendScreen({super.key}); @@ -117,8 +118,7 @@ class _FriendScreenState extends State @override Widget build(BuildContext context) { - return Material( - color: Theme.of(context).colorScheme.surface, + return RootContainer( child: Scaffold( appBar: AppBar( centerTitle: false, diff --git a/lib/screens/account/preferences/notifications.dart b/lib/screens/account/preferences/notifications.dart index 911ebca..e71d8ba 100644 --- a/lib/screens/account/preferences/notifications.dart +++ b/lib/screens/account/preferences/notifications.dart @@ -6,6 +6,7 @@ import 'package:google_fonts/google_fonts.dart'; import 'package:solian/exceptions/request.dart'; import 'package:solian/exts.dart'; import 'package:solian/providers/auth.dart'; +import 'package:solian/widgets/root_container.dart'; class NotificationPreferencesScreen extends StatefulWidget { const NotificationPreferencesScreen({super.key}); @@ -74,8 +75,7 @@ class _NotificationPreferencesScreenState @override Widget build(BuildContext context) { - return Material( - color: Theme.of(context).colorScheme.surface, + return RootContainer( child: Column( children: [ if (_isBusy) const LinearProgressIndicator().animate().scaleX(), diff --git a/lib/screens/account/profile_edit.dart b/lib/screens/account/profile_edit.dart index 0f14056..2c7f57f 100644 --- a/lib/screens/account/profile_edit.dart +++ b/lib/screens/account/profile_edit.dart @@ -12,6 +12,7 @@ import 'package:solian/providers/auth.dart'; import 'package:solian/providers/content/attachment.dart'; import 'package:solian/services.dart'; import 'package:solian/widgets/account/account_avatar.dart'; +import 'package:solian/widgets/root_container.dart'; class PersonalizeScreen extends StatefulWidget { const PersonalizeScreen({super.key}); @@ -186,8 +187,7 @@ class _PersonalizeScreenState extends State { Widget build(BuildContext context) { const double padding = 32; - return Material( - color: Theme.of(context).colorScheme.surface, + return RootContainer( child: ListView( children: [ if (_isBusy) const LinearProgressIndicator().animate().scaleX(), diff --git a/lib/screens/account/profile_page.dart b/lib/screens/account/profile_page.dart index a10c1d5..f4b7c14 100644 --- a/lib/screens/account/profile_page.dart +++ b/lib/screens/account/profile_page.dart @@ -28,6 +28,7 @@ import 'package:solian/widgets/daily_sign/history_chart.dart'; import 'package:solian/widgets/posts/post_list.dart'; import 'package:solian/widgets/posts/post_warped_list.dart'; import 'package:solian/widgets/reports/abuse_report.dart'; +import 'package:solian/widgets/root_container.dart'; import 'package:solian/widgets/sized_container.dart'; class AccountProfilePage extends StatefulWidget { @@ -233,8 +234,7 @@ class _AccountProfilePageState extends State { return const Center(child: CircularProgressIndicator()); } - return Material( - color: Theme.of(context).colorScheme.surface, + return RootContainer( child: DefaultTabController( length: 3, child: NestedScrollView( diff --git a/lib/screens/auth/signin.dart b/lib/screens/auth/signin.dart index 6f5ca82..1d15373 100644 --- a/lib/screens/auth/signin.dart +++ b/lib/screens/auth/signin.dart @@ -11,6 +11,7 @@ import 'package:solian/providers/content/realm.dart'; import 'package:solian/providers/relation.dart'; import 'package:solian/providers/websocket.dart'; import 'package:solian/services.dart'; +import 'package:solian/widgets/root_container.dart'; import 'package:solian/widgets/sized_container.dart'; import 'package:url_launcher/url_launcher_string.dart'; @@ -216,8 +217,7 @@ class _SignInScreenState extends State { @override Widget build(BuildContext context) { - return Material( - color: Theme.of(context).colorScheme.surface, + return RootContainer( child: CenteredContainer( maxWidth: 360, child: PageTransitionSwitcher( diff --git a/lib/screens/auth/signup.dart b/lib/screens/auth/signup.dart index 961a2f1..afc3bc6 100644 --- a/lib/screens/auth/signup.dart +++ b/lib/screens/auth/signup.dart @@ -3,6 +3,7 @@ import 'package:gap/gap.dart'; import 'package:get/get.dart'; import 'package:solian/exts.dart'; import 'package:solian/services.dart'; +import 'package:solian/widgets/root_container.dart'; import 'package:solian/widgets/sized_container.dart'; import 'package:url_launcher/url_launcher_string.dart'; @@ -65,8 +66,7 @@ class _SignUpScreenState extends State { @override Widget build(BuildContext context) { - return Material( - color: Theme.of(context).colorScheme.surface, + return RootContainer( child: CenteredContainer( maxWidth: 360, child: ListView( diff --git a/lib/screens/channel/call/call.dart b/lib/screens/channel/call/call.dart index 7bf6963..bbb5330 100644 --- a/lib/screens/channel/call/call.dart +++ b/lib/screens/channel/call/call.dart @@ -11,6 +11,7 @@ import 'package:solian/widgets/app_bar_leading.dart'; import 'package:solian/widgets/chat/call/call_controls.dart'; import 'package:solian/widgets/chat/call/call_participant.dart'; import 'package:livekit_client/livekit_client.dart' as livekit; +import 'package:solian/widgets/root_container.dart'; class CallScreen extends StatefulWidget { final bool hideAppBar; @@ -197,8 +198,7 @@ class _CallScreenState extends State with TickerProviderStateMixin { Widget build(BuildContext context) { final ChatCallProvider ctrl = Get.find(); - return Material( - color: Theme.of(context).colorScheme.surface, + return RootContainer( child: Scaffold( appBar: widget.hideAppBar ? null diff --git a/lib/screens/channel/channel_organize.dart b/lib/screens/channel/channel_organize.dart index 0ecf9d9..f7ce3a1 100644 --- a/lib/screens/channel/channel_organize.dart +++ b/lib/screens/channel/channel_organize.dart @@ -9,6 +9,7 @@ import 'package:solian/providers/content/channel.dart'; import 'package:solian/router.dart'; import 'package:solian/theme.dart'; import 'package:solian/widgets/app_bar_title.dart'; +import 'package:solian/widgets/root_container.dart'; import 'package:uuid/uuid.dart'; class ChannelOrganizeArguments { @@ -114,8 +115,7 @@ class _ChannelOrganizeScreenState extends State { ), ]; - return Material( - color: Theme.of(context).colorScheme.surface, + return RootContainer( child: Scaffold( appBar: AppBar( title: AppBarTitle('channelOrganizing'.tr), diff --git a/lib/screens/chat.dart b/lib/screens/chat.dart index e798aa5..35907c7 100644 --- a/lib/screens/chat.dart +++ b/lib/screens/chat.dart @@ -19,6 +19,7 @@ import 'package:solian/widgets/app_bar_title.dart'; import 'package:solian/widgets/channel/channel_list.dart'; import 'package:solian/widgets/chat/call/chat_call_indicator.dart'; import 'package:solian/widgets/current_state_action.dart'; +import 'package:solian/widgets/root_container.dart'; import 'package:solian/widgets/sidebar/empty_placeholder.dart'; class ChatScreen extends StatelessWidget { @@ -26,9 +27,8 @@ class ChatScreen extends StatelessWidget { @override Widget build(BuildContext context) { - return Material( - color: Theme.of(context).colorScheme.surface, - child: const ChatList(), + return const RootContainer( + child: ChatList(), ); } } @@ -40,8 +40,7 @@ class ChatListShell extends StatelessWidget { @override Widget build(BuildContext context) { - return Material( - color: Theme.of(context).colorScheme.surface, + return RootContainer( child: Row( children: [ const SizedBox( diff --git a/lib/screens/explore.dart b/lib/screens/explore.dart index 535e8fd..657c455 100644 --- a/lib/screens/explore.dart +++ b/lib/screens/explore.dart @@ -15,6 +15,7 @@ import 'package:solian/widgets/app_bar_leading.dart'; import 'package:solian/widgets/navigation/realm_switcher.dart'; import 'package:solian/widgets/posts/post_shuffle_swiper.dart'; import 'package:solian/widgets/posts/post_warped_list.dart'; +import 'package:solian/widgets/root_container.dart'; class ExploreScreen extends StatefulWidget { const ExploreScreen({super.key}); @@ -56,8 +57,7 @@ class _ExploreScreenState extends State Widget build(BuildContext context) { final AuthProvider auth = Get.find(); - return Material( - color: Theme.of(context).colorScheme.surface, + return RootContainer( child: Scaffold( floatingActionButton: FloatingActionButton( child: const Icon(Icons.add), diff --git a/lib/screens/feed/draft_box.dart b/lib/screens/feed/draft_box.dart index 762655f..4c6a21a 100644 --- a/lib/screens/feed/draft_box.dart +++ b/lib/screens/feed/draft_box.dart @@ -9,6 +9,7 @@ import 'package:solian/widgets/app_bar_leading.dart'; import 'package:solian/widgets/app_bar_title.dart'; import 'package:solian/widgets/posts/post_action.dart'; import 'package:solian/widgets/posts/post_owned_list.dart'; +import 'package:solian/widgets/root_container.dart'; class DraftBoxScreen extends StatefulWidget { const DraftBoxScreen({super.key}); @@ -54,8 +55,7 @@ class _DraftBoxScreenState extends State { @override Widget build(BuildContext context) { - return Material( - color: Theme.of(context).colorScheme.surface, + return RootContainer( child: Scaffold( appBar: AppBar( leading: AppBarLeadingButton.adaptive(context), diff --git a/lib/screens/posts/post_detail.dart b/lib/screens/posts/post_detail.dart index 6477c24..42eaf02 100644 --- a/lib/screens/posts/post_detail.dart +++ b/lib/screens/posts/post_detail.dart @@ -6,6 +6,7 @@ import 'package:solian/providers/content/posts.dart'; import 'package:solian/providers/last_read.dart'; import 'package:solian/widgets/posts/post_item.dart'; import 'package:solian/widgets/posts/post_replies.dart'; +import 'package:solian/widgets/root_container.dart'; class PostDetailScreen extends StatefulWidget { final String id; @@ -47,8 +48,7 @@ class _PostDetailScreenState extends State { @override Widget build(BuildContext context) { - return Material( - color: Theme.of(context).colorScheme.surface, + return RootContainer( child: FutureBuilder( future: getDetail(), builder: (context, snapshot) { diff --git a/lib/screens/posts/post_editor.dart b/lib/screens/posts/post_editor.dart index b0cd784..67256a7 100644 --- a/lib/screens/posts/post_editor.dart +++ b/lib/screens/posts/post_editor.dart @@ -19,6 +19,7 @@ import 'package:solian/widgets/app_bar_title.dart'; import 'package:solian/widgets/markdown_text_content.dart'; import 'package:solian/widgets/posts/post_item.dart'; import 'package:badges/badges.dart' as badges; +import 'package:solian/widgets/root_container.dart'; class PostPublishArguments { final Post? edit; @@ -151,8 +152,7 @@ class _PostPublishScreenState extends State { ) ]; - return Material( - color: Theme.of(context).colorScheme.surface, + return RootContainer( child: Scaffold( appBar: AppBar( leading: AppBarLeadingButton.adaptive(context), diff --git a/lib/screens/realms.dart b/lib/screens/realms.dart index ab5d5eb..76c94ce 100644 --- a/lib/screens/realms.dart +++ b/lib/screens/realms.dart @@ -15,6 +15,7 @@ import 'package:solian/widgets/app_bar_leading.dart'; import 'package:solian/widgets/app_bar_title.dart'; import 'package:solian/widgets/auto_cache_image.dart'; import 'package:solian/widgets/current_state_action.dart'; +import 'package:solian/widgets/root_container.dart'; import 'package:solian/widgets/sized_container.dart'; class RealmListScreen extends StatefulWidget { @@ -58,8 +59,7 @@ class _RealmListScreenState extends State { Widget build(BuildContext context) { final AuthProvider auth = Get.find(); - return Material( - color: Theme.of(context).colorScheme.surface, + return RootContainer( child: Scaffold( appBar: AppBar( leading: AppBarLeadingButton.adaptive(context), diff --git a/lib/screens/realms/realm_organize.dart b/lib/screens/realms/realm_organize.dart index 7d78969..132b9ec 100644 --- a/lib/screens/realms/realm_organize.dart +++ b/lib/screens/realms/realm_organize.dart @@ -13,6 +13,7 @@ import 'package:solian/router.dart'; import 'package:solian/theme.dart'; import 'package:solian/widgets/app_bar_leading.dart'; import 'package:solian/widgets/app_bar_title.dart'; +import 'package:solian/widgets/root_container.dart'; import 'package:uuid/uuid.dart'; class RealmOrganizeArguments { @@ -189,8 +190,7 @@ class _RealmOrganizeScreenState extends State { @override Widget build(BuildContext context) { - return Material( - color: Theme.of(context).colorScheme.surface, + return RootContainer( child: Scaffold( appBar: AppBar( leading: AppBarLeadingButton.adaptive(context), diff --git a/lib/screens/realms/realm_view.dart b/lib/screens/realms/realm_view.dart index f18ad93..d67ba14 100644 --- a/lib/screens/realms/realm_view.dart +++ b/lib/screens/realms/realm_view.dart @@ -16,6 +16,7 @@ import 'package:solian/theme.dart'; import 'package:solian/widgets/app_bar_leading.dart'; import 'package:solian/widgets/channel/channel_list.dart'; import 'package:solian/widgets/posts/post_list.dart'; +import 'package:solian/widgets/root_container.dart'; class RealmViewScreen extends StatefulWidget { final String alias; @@ -86,8 +87,7 @@ class _RealmViewScreenState extends State { @override Widget build(BuildContext context) { - return Material( - color: Theme.of(context).colorScheme.surface, + return RootContainer( child: DefaultTabController( length: 2, child: NestedScrollView( diff --git a/lib/screens/settings.dart b/lib/screens/settings.dart index a74161c..76d50a7 100644 --- a/lib/screens/settings.dart +++ b/lib/screens/settings.dart @@ -12,6 +12,7 @@ import 'package:solian/providers/theme_switcher.dart'; import 'package:solian/router.dart'; import 'package:solian/theme.dart'; import 'package:solian/widgets/reports/abuse_report.dart'; +import 'package:solian/widgets/root_container.dart'; class SettingScreen extends StatefulWidget { const SettingScreen({super.key}); @@ -75,8 +76,7 @@ class _SettingScreenState extends State { @override Widget build(BuildContext context) { - return Material( - color: Theme.of(context).colorScheme.surface, + return RootContainer( child: ListView( children: [ _buildCaptionHeader('themeColor'.tr), diff --git a/lib/widgets/root_container.dart b/lib/widgets/root_container.dart new file mode 100644 index 0000000..3a6ae80 --- /dev/null +++ b/lib/widgets/root_container.dart @@ -0,0 +1,15 @@ +import 'package:flutter/material.dart'; + +class RootContainer extends StatelessWidget { + final Widget? child; + + const RootContainer({super.key, this.child}); + + @override + Widget build(BuildContext context) { + return Material( + color: Theme.of(context).colorScheme.surface, + child: child, + ); + } +} diff --git a/lib/widgets/sidebar/empty_placeholder.dart b/lib/widgets/sidebar/empty_placeholder.dart index 39fd98b..b6a7aad 100644 --- a/lib/widgets/sidebar/empty_placeholder.dart +++ b/lib/widgets/sidebar/empty_placeholder.dart @@ -1,12 +1,12 @@ import 'package:flutter/material.dart'; +import 'package:solian/widgets/root_container.dart'; class EmptyPagePlaceholder extends StatelessWidget { const EmptyPagePlaceholder({super.key}); @override Widget build(BuildContext context) { - return Material( - color: Theme.of(context).colorScheme.surface, + return RootContainer( child: Center( child: ClipRRect( borderRadius: const BorderRadius.all(Radius.circular(12)),