From 0f259414fb6d6ceedcd3136333bb323b47b5e8ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elias=20M=C3=BCller?= Date: Fri, 26 May 2023 23:16:10 +0200 Subject: [PATCH] Added darkmode for chat view --- assets/background/chatDark.png | Bin 0 -> 45984 bytes lib/data/appTheme.dart | 4 + lib/main.dart | 60 +-------- lib/screen/pages/more/debug/ThemeColors.dart | 128 +++++++++++++++++++ lib/screen/pages/more/overhang.dart | 6 +- lib/screen/pages/talk/chatBubble.dart | 37 ++++-- lib/screen/pages/talk/chatTextfield.dart | 6 +- lib/screen/pages/talk/chatView.dart | 7 +- lib/theming/darkAppTheme.dart | 39 ++++++ lib/theming/lightAppTheme.dart | 39 ++++++ 10 files changed, 248 insertions(+), 78 deletions(-) create mode 100644 assets/background/chatDark.png create mode 100644 lib/screen/pages/more/debug/ThemeColors.dart create mode 100644 lib/theming/darkAppTheme.dart create mode 100644 lib/theming/lightAppTheme.dart diff --git a/assets/background/chatDark.png b/assets/background/chatDark.png new file mode 100644 index 0000000000000000000000000000000000000000..d51c578743aa6a5c79f9080582fcc585b2169373 GIT binary patch literal 45984 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

5O0KQ8# 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 m2g5_XGWP+t-#7uAf4#W6lk1{yZ-}HT4J~W literal 0 HcmV?d00001 diff --git a/lib/data/appTheme.dart b/lib/data/appTheme.dart index fe601ca..559449f 100644 --- a/lib/data/appTheme.dart +++ b/lib/data/appTheme.dart @@ -22,6 +22,10 @@ class AppTheme extends ChangeNotifier { } } + + static bool isDarkMode(BuildContext context) { + return Theme.of(context).brightness == Brightness.dark; + } } class ThemeModeDisplay { diff --git a/lib/main.dart b/lib/main.dart index d8181a0..d3472f2 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -6,6 +6,8 @@ import 'package:jiffy/jiffy.dart'; import 'package:marianum_mobile/data/appTheme.dart'; import 'package:marianum_mobile/data/timetable/timetableProps.dart'; import 'package:marianum_mobile/screen/login/login.dart'; +import 'package:marianum_mobile/theming/darkAppTheme.dart'; +import 'package:marianum_mobile/theming/lightAppTheme.dart'; import 'package:marianum_mobile/widget/errorView.dart'; import 'package:provider/provider.dart'; import 'package:shared_preferences/shared_preferences.dart'; @@ -50,7 +52,6 @@ class Main extends StatefulWidget { } class _MainState extends State

{ - static const Color marianumRed = Color.fromARGB(255, 153, 51, 51); final Future _storage = SharedPreferences.getInstance(); @@ -92,61 +93,8 @@ class _MainState extends State
{ title: 'Marianum Fulda', themeMode: value.getMode, - theme: ThemeData( - brightness: Brightness.light, - primaryColor: marianumRed, - colorScheme: const ColorScheme( - brightness: Brightness.light, - surface: Colors.white, - onSurface: Colors.black, - onSecondary: Colors.white, - onPrimary: Colors.white, - onError: marianumRed, - onBackground: Colors.black, - error: marianumRed, - background: Colors.white, - secondary: Colors.grey, - primary: marianumRed, - ), - hintColor: marianumRed, - inputDecorationTheme: const InputDecorationTheme( - border: UnderlineInputBorder(borderSide: BorderSide(color: marianumRed)), - ), - appBarTheme: const AppBarTheme( - backgroundColor: marianumRed, - ), - progressIndicatorTheme: const ProgressIndicatorThemeData( - color: marianumRed, - ), - ), - - darkTheme: ThemeData( - brightness: Brightness.dark, - primaryColor: marianumRed, - colorScheme: const ColorScheme( - brightness: Brightness.dark, - surface: Colors.white, - onSurface: Colors.white, - onSecondary: Colors.black, - onPrimary: Colors.black, - onError: marianumRed, - onBackground: Colors.black, - error: marianumRed, - background: Colors.black, - secondary: Colors.grey, - primary: marianumRed, - ), - hintColor: marianumRed, - inputDecorationTheme: const InputDecorationTheme( - border: UnderlineInputBorder(borderSide: BorderSide(color: marianumRed)), - ), - appBarTheme: const AppBarTheme( - backgroundColor: marianumRed, - ), - progressIndicatorTheme: const ProgressIndicatorThemeData( - color: marianumRed, - ), - ), + theme: LightAppTheme.theme, + darkTheme: DarkAppTheme.theme, home: FutureBuilder( diff --git a/lib/screen/pages/more/debug/ThemeColors.dart b/lib/screen/pages/more/debug/ThemeColors.dart new file mode 100644 index 0000000..9dd56be --- /dev/null +++ b/lib/screen/pages/more/debug/ThemeColors.dart @@ -0,0 +1,128 @@ +import 'package:flutter/material.dart'; + +class ColorPreviewWidget extends StatelessWidget { + @override + Widget build(BuildContext context) { + final themeData = Theme.of(context); + + return ListView( + children: [ + ListTile( + leading: Icon(Icons.color_lens_outlined), + title: Text('Farbtest'), + onTap: () { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => ColorPreviewPage(), + ), + ); + }, + ), + ], + ); + } +} + +class ColorPreviewPage extends StatelessWidget { + @override + Widget build(BuildContext context) { + final themeData = Theme.of(context); + final colorScheme = themeData.colorScheme; + + return Scaffold( + appBar: AppBar( + title: Text('Farbtest'), + ), + body: ListView( + children: [ + for (var entry in [ + 'Primary', + 'Primary Variant', + 'Secondary', + 'Secondary Variant', + 'Background', + 'Surface', + 'Error', + 'On Primary', + 'On Secondary', + 'On Background', + 'On Surface', + 'On Error', + ]) + ColorItem(name: entry, color: _getColor(colorScheme, entry)), + ], + ), + ); + } + + Color _getColor(ColorScheme colorScheme, String name) { + switch (name) { + case 'Primary': + return colorScheme.primary; + case 'Primary Variant': + return colorScheme.primaryVariant; + case 'Secondary': + return colorScheme.secondary; + case 'Secondary Variant': + return colorScheme.secondaryVariant; + case 'Background': + return colorScheme.background; + case 'Surface': + return colorScheme.surface; + case 'Error': + return colorScheme.error; + case 'On Primary': + return colorScheme.onPrimary; + case 'On Secondary': + return colorScheme.onSecondary; + case 'On Background': + return colorScheme.onBackground; + case 'On Surface': + return colorScheme.onSurface; + case 'On Error': + return colorScheme.onError; + default: + return Colors.transparent; + } + } +} + +class ColorItem extends StatelessWidget { + final String name; + final Color color; + + const ColorItem({Key? key, required this.name, required this.color}) + : super(key: key); + + @override + Widget build(BuildContext context) { + final themeData = Theme.of(context); + + return Container( + padding: EdgeInsets.all(16.0), + color: color, + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + name, + style: TextStyle( + color: themeData.brightness == Brightness.light + ? Colors.black + : Colors.white, + ), + ), + Text( + '#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}', + style: TextStyle( + color: themeData.brightness == Brightness.light + ? Colors.black + : Colors.white, + ), + ), + ], + ), + ); + } +} diff --git a/lib/screen/pages/more/overhang.dart b/lib/screen/pages/more/overhang.dart index cf6f846..9652d9c 100644 --- a/lib/screen/pages/more/overhang.dart +++ b/lib/screen/pages/more/overhang.dart @@ -5,6 +5,7 @@ import 'package:marianum_mobile/screen/settings/settings.dart'; import 'package:persistent_bottom_nav_bar/persistent_tab_view.dart'; import '../../../widget/ListItem.dart'; +import 'debug/ThemeColors.dart'; import 'message/message.dart'; class Overhang extends StatelessWidget { @@ -20,11 +21,12 @@ class Overhang extends StatelessWidget { ], ), body: ListView( - children: const [ + children: [ ListItemNavigator(icon: Icons.newspaper, text: "Marianum Message", target: Message()), ListItemNavigator(icon: Icons.room, text: "Raumplan", target: Roomplan()), ListItemNavigator(icon: Icons.calendar_month, text: "Schulferien", target: Roomplan()), - ListItemNavigator(icon: Icons.calculate, text: "Notendurschnitts rechner", target: Roomplan()) + ListItemNavigator(icon: Icons.calculate, text: "Notendurschnitts rechner", target: Roomplan()), + ListItemNavigator(icon: Icons.color_lens_outlined, text: "Farbtest", target: ColorPreviewPage()) ], ), ); diff --git a/lib/screen/pages/talk/chatBubble.dart b/lib/screen/pages/talk/chatBubble.dart index 231e45d..ba94475 100644 --- a/lib/screen/pages/talk/chatBubble.dart +++ b/lib/screen/pages/talk/chatBubble.dart @@ -5,6 +5,7 @@ import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:jiffy/jiffy.dart'; +import 'package:marianum_mobile/data/appTheme.dart'; import '../../../api/marianumcloud/talk/chat/getChatResponse.dart'; import '../../../api/marianumcloud/talk/room/getRoomResponse.dart'; @@ -30,18 +31,26 @@ class ChatBubble extends StatefulWidget { } class _ChatBubbleState extends State { - static const styleSystem = BubbleStyle( - color: Color(0xffd4eaf4), - borderWidth: 1, - elevation: 2, - margin: BubbleEdges.only(bottom: 20, top: 10), - alignment: Alignment.center, - ); + // late BubbleStyle styleSystem; + // late BubbleStyle Function(bool) styleRemote; + // late BubbleStyle Function(bool) styleSelf; - static BubbleStyle getStyleOther(bool seamless) { + + BubbleStyle getSystemStyle() { + return BubbleStyle( + color: AppTheme.isDarkMode(context) ? Color(0xff182229) : Colors.white, + borderWidth: 1, + elevation: 2, + margin: const BubbleEdges.only(bottom: 20, top: 10), + alignment: Alignment.center, + ); + } + + BubbleStyle getRemoteStyle(bool seamless) { + var color = AppTheme.isDarkMode(context) ? Color(0xff202c33) : Colors.white; return BubbleStyle( nip: BubbleNip.leftTop, - color: seamless ? Colors.transparent : Colors.white, + color: seamless ? Colors.transparent : color, borderWidth: seamless ? 0 : 1, elevation: seamless ? 0 : 1, margin: const BubbleEdges.only(bottom: 10, left: 10, right: 50), @@ -49,10 +58,10 @@ class _ChatBubbleState extends State { ); } - static BubbleStyle getStyleSelf(bool seamless) { + BubbleStyle getSelfStyle(bool seamless) { return BubbleStyle( nip: BubbleNip.rightBottom, - color: seamless ? Colors.transparent : const Color(0xffd9fdd3), + color: seamless ? Colors.transparent : Color(0xff005c4b), borderWidth: seamless ? 0 : 1, elevation: seamless ? 0 : 1, margin: const BubbleEdges.only(bottom: 10, right: 10, left: 50), @@ -76,12 +85,12 @@ class _ChatBubbleState extends State { BubbleStyle getStyle() { if(widget.bubbleData.messageType == GetRoomResponseObjectMessageType.comment) { if(widget.isSender) { - return getStyleSelf(message.containsFile); + return getSelfStyle(message.containsFile); } else { - return getStyleOther(message.containsFile); + return getRemoteStyle(message.containsFile); } } else { - return styleSystem; + return getSystemStyle(); } } diff --git a/lib/screen/pages/talk/chatTextfield.dart b/lib/screen/pages/talk/chatTextfield.dart index 80820d1..29f7d36 100644 --- a/lib/screen/pages/talk/chatTextfield.dart +++ b/lib/screen/pages/talk/chatTextfield.dart @@ -56,7 +56,7 @@ class _ChatTextfieldState extends State { padding: const EdgeInsets.only(left: 10, bottom: 10, top: 10), height: 60, width: double.infinity, - color: Colors.white, + color: Theme.of(context).colorScheme.secondary, child: Row( children: [ GestureDetector( @@ -108,9 +108,9 @@ class _ChatTextfieldState extends State { controller: _textBoxController, readOnly: sending, maxLines: 10, - decoration: const InputDecoration( + decoration: InputDecoration( hintText: "Nachricht schreiben...", - hintStyle: TextStyle(color: Colors.black54), + hintStyle: TextStyle(color: Theme.of(context).colorScheme.onSecondary), border: InputBorder.none ), ), diff --git a/lib/screen/pages/talk/chatView.dart b/lib/screen/pages/talk/chatView.dart index 89066b7..7886ad7 100644 --- a/lib/screen/pages/talk/chatView.dart +++ b/lib/screen/pages/talk/chatView.dart @@ -4,6 +4,7 @@ import 'package:jiffy/jiffy.dart'; import 'package:loader_overlay/loader_overlay.dart'; import 'package:marianum_mobile/api/marianumcloud/talk/chat/getChatResponse.dart'; import 'package:marianum_mobile/api/marianumcloud/talk/room/getRoomResponse.dart'; +import 'package:marianum_mobile/data/appTheme.dart'; import 'package:marianum_mobile/data/chatList/chatProps.dart'; import 'package:marianum_mobile/screen/pages/talk/chatBubble.dart'; import 'package:marianum_mobile/screen/pages/talk/chatTextfield.dart'; @@ -84,13 +85,13 @@ class _ChatViewState extends State { ), ), body: Container( - decoration: const BoxDecoration( + decoration: BoxDecoration( image: DecorationImage( - image: AssetImage("assets/background/chat.png"), + image: AppTheme.isDarkMode(context) ? const AssetImage("assets/background/chatDark.png") : const AssetImage("assets/background/chat.png"), scale: 1.5, opacity: 0.5, repeat: ImageRepeat.repeat, - colorFilter: ColorFilter.linearToSrgbGamma() + colorFilter: const ColorFilter.linearToSrgbGamma() ) ), child: LoaderOverlay( diff --git a/lib/theming/darkAppTheme.dart b/lib/theming/darkAppTheme.dart new file mode 100644 index 0000000..0191f20 --- /dev/null +++ b/lib/theming/darkAppTheme.dart @@ -0,0 +1,39 @@ +import 'package:flutter/material.dart'; + +class DarkAppTheme { + static const Color marianumRed = Color.fromARGB(255, 153, 51, 51); + + static final theme = ThemeData( + brightness: Brightness.dark, + primaryColor: marianumRed, + hintColor: marianumRed, + colorScheme: const ColorScheme( + brightness: Brightness.dark, + + surface: Colors.black, + onSurface: Colors.white, + + primary: Colors.black, + onPrimary: Colors.white, + + secondary: Colors.grey, + onSecondary: Colors.white, + + background: Colors.black26, + onBackground: Colors.white, + + error: marianumRed, + onError: marianumRed, + ), + inputDecorationTheme: const InputDecorationTheme( + border: UnderlineInputBorder(borderSide: BorderSide(color: marianumRed)), + ), + appBarTheme: const AppBarTheme( + backgroundColor: marianumRed, + ), + progressIndicatorTheme: const ProgressIndicatorThemeData( + color: marianumRed, + ), + + ); +} \ No newline at end of file diff --git a/lib/theming/lightAppTheme.dart b/lib/theming/lightAppTheme.dart new file mode 100644 index 0000000..18831b6 --- /dev/null +++ b/lib/theming/lightAppTheme.dart @@ -0,0 +1,39 @@ +import 'package:flutter/material.dart'; + +class LightAppTheme { + static const Color marianumRed = Color.fromARGB(255, 153, 51, 51); + + static final theme = ThemeData( + brightness: Brightness.light, + primaryColor: marianumRed, + + colorScheme: const ColorScheme( + brightness: Brightness.light, + + surface: Colors.white, + onSurface: Colors.black, + + secondary: Colors.grey, + onSecondary: Colors.white, + + primary: marianumRed, + onPrimary: Colors.white, + + background: Colors.white, + onBackground: Colors.black, + + error: marianumRed, + onError: marianumRed, + ), + inputDecorationTheme: const InputDecorationTheme( + border: UnderlineInputBorder(borderSide: BorderSide(color: marianumRed)), + ), + appBarTheme: const AppBarTheme( + backgroundColor: marianumRed, + ), + progressIndicatorTheme: const ProgressIndicatorThemeData( + color: marianumRed, + ), + + ); +} \ No newline at end of file