Change AppBar colors to be consistent across the app

This commit is contained in:
Nutcake 2023-06-24 13:34:25 +02:00
parent 37a2aebce5
commit d855d7dda3
9 changed files with 70 additions and 94 deletions

View file

@ -18,6 +18,7 @@ import 'package:contacts_plus_plus/widgets/update_notifier.dart';
import 'package:dynamic_color/dynamic_color.dart'; import 'package:dynamic_color/dynamic_color.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_downloader/flutter_downloader.dart'; import 'package:flutter_downloader/flutter_downloader.dart';
import 'package:flutter_phoenix/flutter_phoenix.dart'; import 'package:flutter_phoenix/flutter_phoenix.dart';
import 'package:hive_flutter/hive_flutter.dart'; import 'package:hive_flutter/hive_flutter.dart';

View file

@ -51,7 +51,6 @@ class _FriendsListAppBarState extends State<FriendsListAppBar> with AutomaticKee
value: Provider.of<MessagingClient>(context, listen: false), value: Provider.of<MessagingClient>(context, listen: false),
child: AppBar( child: AppBar(
title: const Text("Contacts++"), title: const Text("Contacts++"),
backgroundColor: Theme.of(context).colorScheme.surfaceVariant,
actions: [ actions: [
FutureBuilder( FutureBuilder(
future: _userStatusFuture, future: _userStatusFuture,
@ -199,13 +198,6 @@ class _FriendsListAppBarState extends State<FriendsListAppBar> with AutomaticKee
), ),
) )
], ],
bottom: PreferredSize(
preferredSize: const Size.fromHeight(1),
child: Container(
height: 1,
color: Colors.black,
),
),
), ),
); );
} }

View file

@ -52,6 +52,7 @@ class _HomeState extends State<Home> {
color: Theme.of(context).colorScheme.background, color: Theme.of(context).colorScheme.background,
), ),
child: BottomNavigationBar( child: BottomNavigationBar(
backgroundColor: Theme.of(context).colorScheme.surface,
type: BottomNavigationBarType.fixed, type: BottomNavigationBarType.fixed,
unselectedItemColor: Theme.of(context).colorScheme.onBackground, unselectedItemColor: Theme.of(context).colorScheme.onBackground,
selectedItemColor: Theme.of(context).colorScheme.primary, selectedItemColor: Theme.of(context).colorScheme.primary,

View file

@ -52,7 +52,7 @@ class _MessagesListState extends State<MessagesList> with SingleTickerProviderSt
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final appBarColor = Theme.of(context).colorScheme.surfaceVariant; final appBarColor = Theme.of(context).colorScheme.surface;
return Consumer<MessagingClient>(builder: (context, mClient, _) { return Consumer<MessagingClient>(builder: (context, mClient, _) {
final friend = mClient.selectedFriend ?? Friend.empty(); final friend = mClient.selectedFriend ?? Friend.empty();
final cache = mClient.getUserMessageCache(friend.id); final cache = mClient.getUserMessageCache(friend.id);
@ -79,15 +79,6 @@ class _MessagesListState extends State<MessagesList> with SingleTickerProviderSt
), ),
], ],
), ),
bottom: sessions.isNotEmpty && _sessionListOpen
? null
: PreferredSize(
preferredSize: const Size.fromHeight(1),
child: Container(
height: 1,
color: Colors.black,
),
),
actions: [ actions: [
if (sessions.isNotEmpty) if (sessions.isNotEmpty)
AnimatedRotation( AnimatedRotation(
@ -107,9 +98,6 @@ class _MessagesListState extends State<MessagesList> with SingleTickerProviderSt
) )
], ],
scrolledUnderElevation: 0.0, scrolledUnderElevation: 0.0,
backgroundColor: appBarColor,
surfaceTintColor: Colors.transparent,
shadowColor: Colors.transparent,
), ),
body: Column( body: Column(
children: [ children: [
@ -122,11 +110,11 @@ class _MessagesListState extends State<MessagesList> with SingleTickerProviderSt
? null ? null
: Container( : Container(
constraints: const BoxConstraints(maxHeight: 64), constraints: const BoxConstraints(maxHeight: 64),
decoration: BoxDecoration( decoration: const BoxDecoration(
color: appBarColor, border: Border(
border: const Border( bottom: BorderSide(width: 1, color: Colors.black),
bottom: BorderSide(width: 1, color: Colors.black), ),
)), ),
child: Stack( child: Stack(
children: [ children: [
ListView.builder( ListView.builder(

View file

@ -35,57 +35,73 @@ class SessionPopup extends StatelessWidget {
FormattedText(session.formattedName, style: Theme.of(context).textTheme.titleMedium), FormattedText(session.formattedName, style: Theme.of(context).textTheme.titleMedium),
session.formattedDescription.isEmpty session.formattedDescription.isEmpty
? const Text("No description") ? const Text("No description")
: FormattedText(session.formattedDescription, style: Theme.of(context).textTheme.labelMedium), : FormattedText(session.formattedDescription,
Text("Tags: ${session.tags.isEmpty ? "None" : session.tags.join(", ")}", style: Theme.of(context).textTheme.labelMedium),
Text(
"Tags: ${session.tags.isEmpty ? "None" : session.tags.join(", ")}",
style: Theme.of(context).textTheme.labelMedium, style: Theme.of(context).textTheme.labelMedium,
softWrap: true, softWrap: true,
), ),
Text("Access: ${session.accessLevel.toReadableString()}", style: Theme.of(context).textTheme.labelMedium), Text("Access: ${session.accessLevel.toReadableString()}",
style: Theme.of(context).textTheme.labelMedium),
Text("Users: ${session.sessionUsers.length}", style: Theme.of(context).textTheme.labelMedium), Text("Users: ${session.sessionUsers.length}", style: Theme.of(context).textTheme.labelMedium),
Text("Maximum users: ${session.maxUsers}", style: Theme.of(context).textTheme.labelMedium), Text("Maximum users: ${session.maxUsers}", style: Theme.of(context).textTheme.labelMedium),
Text("Headless: ${session.headlessHost ? "Yes" : "No"}", style: Theme.of(context).textTheme.labelMedium), Text("Headless: ${session.headlessHost ? "Yes" : "No"}",
style: Theme.of(context).textTheme.labelMedium),
], ],
), ),
), ),
if (session.sessionUsers.isNotEmpty) Expanded( if (session.sessionUsers.isNotEmpty)
child: Scrollbar( Expanded(
trackVisibility: true, child: Scrollbar(
controller: userListScrollController, trackVisibility: true,
thumbVisibility: true,
child: ListView.builder(
controller: userListScrollController, controller: userListScrollController,
shrinkWrap: true, thumbVisibility: true,
itemCount: session.sessionUsers.length, child: ListView.builder(
itemBuilder: (context, index) { controller: userListScrollController,
final user = session.sessionUsers[index]; shrinkWrap: true,
return ListTile( itemCount: session.sessionUsers.length,
dense: true, itemBuilder: (context, index) {
title: Text(user.username, textAlign: TextAlign.end,), final user = session.sessionUsers[index];
subtitle: Text(user.isPresent ? "Active" : "Inactive", textAlign: TextAlign.end,), return ListTile(
); dense: true,
}, title: Text(
user.username,
textAlign: TextAlign.end,
),
subtitle: Text(
user.isPresent ? "Active" : "Inactive",
textAlign: TextAlign.end,
),
);
},
),
),
)
else
const Expanded(
child: Center(
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
Icon(Icons.person_remove_alt_1_rounded),
Padding(
padding: EdgeInsets.all(16.0),
child: Text(
"No one is currently playing.",
textAlign: TextAlign.center,
),
)
],
),
), ),
), ),
) else const Expanded(
child: Center(
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
Icon(Icons.person_remove_alt_1_rounded),
Padding(
padding: EdgeInsets.all(16.0),
child: Text("No one is currently playing.", textAlign: TextAlign.center,),
)
],
),
),
),
], ],
), ),
), ),
Expanded( Expanded(
child: Center( child: Center(
child: CachedNetworkImage( child: CachedNetworkImage(
imageUrl: thumbnailUri, imageUrl: thumbnailUri,
placeholder: (context, url) { placeholder: (context, url) {
return const CircularProgressIndicator(); return const CircularProgressIndicator();
@ -114,11 +130,15 @@ class SessionPopup extends StatelessWidget {
class SessionTile extends StatelessWidget { class SessionTile extends StatelessWidget {
const SessionTile({required this.session, super.key}); const SessionTile({required this.session, super.key});
final Session session; final Session session;
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return TextButton( return TextButton(
style: TextButton.styleFrom(
foregroundColor: Theme.of(context).colorScheme.onSurface,
),
onPressed: () { onPressed: () {
Navigator.of(context).push(MaterialPageRoute(builder: (context) => SessionView(session: session))); Navigator.of(context).push(MaterialPageRoute(builder: (context) => SessionView(session: session)));
}, },
@ -133,7 +153,10 @@ class SessionTile extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
FormattedText(session.formattedName), FormattedText(session.formattedName),
Text("${session.sessionUsers.length.toString().padLeft(2, "0")}/${session.maxUsers.toString().padLeft(2, "0")} active users") Text(
"${session.sessionUsers.length.toString().padLeft(2, "0")}/${session.maxUsers.toString().padLeft(2, "0")} active users",
style: Theme.of(context).textTheme.labelMedium?.copyWith(color: Theme.of(context).colorScheme.onSurface.withOpacity(.6)),
)
], ],
), ),
) )
@ -141,4 +164,4 @@ class SessionTile extends StatelessWidget {
), ),
); );
} }
} }

View file

@ -15,14 +15,6 @@ class _SessionListAppBarState extends State<SessionListAppBar> {
Widget build(BuildContext context) { Widget build(BuildContext context) {
return AppBar( return AppBar(
title: const Text("Sessions"), title: const Text("Sessions"),
backgroundColor: Theme.of(context).colorScheme.surfaceVariant,
bottom: PreferredSize(
preferredSize: const Size.fromHeight(1),
child: Container(
height: 1,
color: Colors.black,
),
),
actions: [ actions: [
Padding( Padding(
padding: const EdgeInsets.only(right: 4.0), padding: const EdgeInsets.only(right: 4.0),

View file

@ -48,20 +48,7 @@ class _SessionViewState extends State<SessionView> {
maxLines: 1, maxLines: 1,
style: Theme.of(context).textTheme.titleLarge, style: Theme.of(context).textTheme.titleLarge,
), ),
bottom: PreferredSize( scrolledUnderElevation: 0,
preferredSize: const Size.fromHeight(1),
child: Row(
children: [
Expanded(
child: Container(
width: double.infinity,
height: 1,
color: Colors.black,
),
),
],
),
),
), ),
body: RefreshIndicator( body: RefreshIndicator(
onRefresh: () async { onRefresh: () async {

View file

@ -6,15 +6,7 @@ class SettingsAppBar extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return AppBar( return AppBar(
backgroundColor: Theme.of(context).colorScheme.surfaceVariant,
title: const Text("Settings"), title: const Text("Settings"),
bottom: PreferredSize(
preferredSize: const Size.fromHeight(1),
child: Container(
height: 1,
color: Colors.black,
),
),
); );
} }

View file

@ -16,7 +16,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev
# 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
# In Windows, build-name is used as the major, minor, and patch parts # In Windows, build-name is used as the major, minor, and patch parts
# of the product and file versions while build-number is used as the build suffix. # of the product and file versions while build-number is used as the build suffix.
version: 1.3.2+1 version: 1.4.1+1
environment: environment:
sdk: '>=3.0.1' sdk: '>=3.0.1'