diff --git a/example/lib/advanced_options_page.dart b/example/lib/advanced_options_page.dart index 7555f286..2da11406 100644 --- a/example/lib/advanced_options_page.dart +++ b/example/lib/advanced_options_page.dart @@ -1,13 +1,16 @@ import 'dart:io'; +import 'package:example/routes/app_routes.dart'; +import 'package:example/routes/routes.dart'; import 'package:example/stream_version.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; import 'package:flutter_secure_storage/flutter_secure_storage.dart'; import 'package:stream_chat_flutter/stream_chat_flutter.dart'; +import 'package:streaming_shared_preferences/streaming_shared_preferences.dart'; import 'choose_user_page.dart'; -import 'main.dart'; import 'notifications_service.dart'; class AdvancedOptionsPage extends StatefulWidget { @@ -312,17 +315,57 @@ class _AdvancedOptionsPageState extends State { context, MaterialPageRoute( builder: (context) { - return MaterialApp( - theme: ThemeData.light(), - darkTheme: ThemeData.dark(), - themeMode: ThemeMode.system, - builder: (context, widget) { - return StreamChat( - child: widget, - client: client, + return FutureBuilder( + future: StreamingSharedPreferences.instance, + builder: (context, snapshot) { + if (!snapshot.hasData) { + return SizedBox(); + } + return PreferenceBuilder( + preference: snapshot.data.getInt( + 'theme', + defaultValue: 0, + ), + builder: (context, snapshot) => MaterialApp( + builder: (context, child) { + return StreamChat( + client: client, + child: Builder( + builder: (context) => + AnnotatedRegion< + SystemUiOverlayStyle>( + child: child, + value: SystemUiOverlayStyle( + systemNavigationBarColor: + StreamChatTheme.of(context) + .colorTheme + .white, + systemNavigationBarIconBrightness: + Theme.of(context) + .brightness == + Brightness.dark + ? Brightness.light + : Brightness.dark, + ), + ), + ), + ); + }, + debugShowCheckedModeBanner: false, + theme: ThemeData.light(), + darkTheme: ThemeData.dark(), + themeMode: { + -1: ThemeMode.dark, + 0: ThemeMode.system, + 1: ThemeMode.light, + }[snapshot], + onGenerateRoute: AppRoutes.generateRoute, + initialRoute: client.state.user == null + ? Routes.CHOOSE_USER + : Routes.HOME, + ), ); }, - home: ChannelListPage(), ); }, ), diff --git a/example/lib/main.dart b/example/lib/main.dart index 25282335..8cc511fc 100644 --- a/example/lib/main.dart +++ b/example/lib/main.dart @@ -10,6 +10,7 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_secure_storage/flutter_secure_storage.dart'; import 'package:stream_chat_flutter/stream_chat_flutter.dart'; +import 'package:streaming_shared_preferences/streaming_shared_preferences.dart'; import 'notifications_service.dart'; import 'routes/app_routes.dart'; @@ -52,32 +53,50 @@ class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { - return MaterialApp( - builder: (context, child) { - return StreamChat( - client: client, - child: Builder( - builder: (context) => AnnotatedRegion( - child: child, - value: SystemUiOverlayStyle( - systemNavigationBarColor: - StreamChatTheme.of(context).colorTheme.white, - systemNavigationBarIconBrightness: - Theme.of(context).brightness == Brightness.dark - ? Brightness.light - : Brightness.dark, - ), - ), + return FutureBuilder( + future: StreamingSharedPreferences.instance, + builder: (context, snapshot) { + if (!snapshot.hasData) { + return SizedBox(); + } + return PreferenceBuilder( + preference: snapshot.data.getInt( + 'theme', + defaultValue: 0, + ), + builder: (context, snapshot) => MaterialApp( + builder: (context, child) { + return StreamChat( + client: client, + child: Builder( + builder: (context) => AnnotatedRegion( + child: child, + value: SystemUiOverlayStyle( + systemNavigationBarColor: + StreamChatTheme.of(context).colorTheme.white, + systemNavigationBarIconBrightness: + Theme.of(context).brightness == Brightness.dark + ? Brightness.light + : Brightness.dark, + ), + ), + ), + ); + }, + debugShowCheckedModeBanner: false, + theme: ThemeData.light(), + darkTheme: ThemeData.dark(), + themeMode: { + -1: ThemeMode.dark, + 0: ThemeMode.system, + 1: ThemeMode.light, + }[snapshot], + onGenerateRoute: AppRoutes.generateRoute, + initialRoute: + client.state.user == null ? Routes.CHOOSE_USER : Routes.HOME, ), ); }, - debugShowCheckedModeBanner: false, - theme: ThemeData.light(), - darkTheme: ThemeData.dark(), - themeMode: ThemeMode.system, - onGenerateRoute: AppRoutes.generateRoute, - initialRoute: - client.state.user == null ? Routes.CHOOSE_USER : Routes.HOME, ); } } @@ -269,6 +288,21 @@ class _HomePageState extends State { fontSize: 14.5, ), ), + trailing: IconButton( + icon: StreamSvgIcon.Icon_moon( + size: 24, + ), + color: StreamChatTheme.of(context).colorTheme.grey, + onPressed: () async { + final sp = await StreamingSharedPreferences.instance; + sp.setInt( + 'theme', + Theme.of(context).brightness == Brightness.dark + ? 1 + : -1, + ); + }, + ), ), ), ), diff --git a/example/pubspec.yaml b/example/pubspec.yaml index 539166ec..16bc8108 100644 --- a/example/pubspec.yaml +++ b/example/pubspec.yaml @@ -16,6 +16,7 @@ dependencies: flutter_secure_storage: ^3.3.5 yaml: ^2.2.1 uuid: ^2.2.2 + streaming_shared_preferences: ^1.0.2 dev_dependencies: flutter_test: diff --git a/lib/src/image_footer.dart b/lib/src/image_footer.dart index 7ee9a128..e43eb3fb 100644 --- a/lib/src/image_footer.dart +++ b/lib/src/image_footer.dart @@ -116,7 +116,7 @@ class _ImageFooterState extends State { mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ IconButton( - icon: StreamSvgIcon.icon_SHARE( + icon: StreamSvgIcon.Icon_SHARE( size: 24.0, color: StreamChatTheme.of(context).colorTheme.black, ), diff --git a/lib/src/stream_svg_icon.dart b/lib/src/stream_svg_icon.dart index 3e8cfae2..fcef384f 100644 --- a/lib/src/stream_svg_icon.dart +++ b/lib/src/stream_svg_icon.dart @@ -470,7 +470,19 @@ class StreamSvgIcon extends StatelessWidget { ); } - factory StreamSvgIcon.icon_SHARE({ + factory StreamSvgIcon.Icon_moon({ + double size, + Color color, + }) { + return StreamSvgIcon( + assetName: 'icon_moon.svg', + color: color, + width: size, + height: size, + ); + } + + factory StreamSvgIcon.Icon_SHARE({ double size, Color color, }) { diff --git a/lib/svgs/icon_moon.svg b/lib/svgs/icon_moon.svg new file mode 100644 index 00000000..ebc3279c --- /dev/null +++ b/lib/svgs/icon_moon.svg @@ -0,0 +1,3 @@ + + +