From d713202698c90d5b26bf7e2cb383f1abb15223a2 Mon Sep 17 00:00:00 2001 From: shubhamsharma-localytics <162666981+ssharma-Localytics@users.noreply.github.com> Date: Thu, 20 Aug 2026 19:54:55 +0530 Subject: [PATCH] CXMM-10356 TestJira2Pr: Add dark mode to sample test app --- lib/main.dart | 56 +++++++++++++++++++++++++++++++++++++++---- test/widget_test.dart | 30 +++++++++++++++++++++++ 2 files changed, 81 insertions(+), 5 deletions(-) diff --git a/lib/main.dart b/lib/main.dart index d076495..4aa6000 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -19,21 +19,54 @@ void main() { /// /// Configure both keys in a local, gitignored `.env` file at the project /// root (see `.env.example`). -class LocalyticsSampleApp extends StatelessWidget { +ThemeData _appTheme(Brightness brightness) { + return ThemeData( + useMaterial3: true, + colorSchemeSeed: Colors.indigo, + brightness: brightness, + ); +} + +class LocalyticsSampleApp extends StatefulWidget { const LocalyticsSampleApp({super.key}); + @override + State createState() => _LocalyticsSampleAppState(); +} + +class _LocalyticsSampleAppState extends State { + ThemeMode _themeMode = ThemeMode.light; + + void _toggleThemeMode() { + setState(() { + _themeMode = + _themeMode == ThemeMode.light ? ThemeMode.dark : ThemeMode.light; + }); + } + @override Widget build(BuildContext context) { return MaterialApp( title: 'Localytics Flutter Sample', - theme: ThemeData(useMaterial3: true, colorSchemeSeed: Colors.indigo), - home: const _HomePage(), + theme: _appTheme(Brightness.light), + darkTheme: _appTheme(Brightness.dark), + themeMode: _themeMode, + home: _HomePage( + isDarkMode: _themeMode == ThemeMode.dark, + onToggleThemeMode: _toggleThemeMode, + ), ); } } class _HomePage extends StatefulWidget { - const _HomePage(); + const _HomePage({ + required this.isDarkMode, + required this.onToggleThemeMode, + }); + + final bool isDarkMode; + final VoidCallback onToggleThemeMode; @override State<_HomePage> createState() => _HomePageState(); @@ -125,7 +158,20 @@ class _HomePageState extends State<_HomePage> { Widget build(BuildContext context) { final theme = Theme.of(context); return Scaffold( - appBar: AppBar(title: const Text('Localytics Flutter Sample')), + appBar: AppBar( + title: const Text('Localytics Flutter Sample'), + actions: [ + IconButton( + tooltip: widget.isDarkMode + ? 'Switch to light mode' + : 'Switch to dark mode', + onPressed: widget.onToggleThemeMode, + icon: Icon( + widget.isDarkMode ? Icons.light_mode : Icons.dark_mode, + ), + ), + ], + ), body: ListView( padding: const EdgeInsets.all(16), children: [ diff --git a/test/widget_test.dart b/test/widget_test.dart index 05891a4..fc9e5c6 100644 --- a/test/widget_test.dart +++ b/test/widget_test.dart @@ -10,6 +10,7 @@ import 'dart:ui'; +import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:localytics_flutter_tester/main.dart'; @@ -27,6 +28,7 @@ void main() { expect(find.text('Localytics Flutter Sample'), findsOneWidget); expect(find.text('Diagnostics'), findsOneWidget); + expect(find.byTooltip('Switch to dark mode'), findsOneWidget); for (final String section in [ 'Privacy', @@ -45,4 +47,32 @@ void main() { ); } }); + + testWidgets('theme toggle switches between light and dark mode', + (WidgetTester tester) async { + await tester.pumpWidget(const LocalyticsSampleApp()); + await tester.pumpAndSettle(); + + final Finder darkModeButton = find.byTooltip('Switch to dark mode'); + expect(darkModeButton, findsOneWidget); + + final MaterialApp materialAppBefore = + tester.widget(find.byType(MaterialApp)); + expect(materialAppBefore.themeMode, ThemeMode.light); + + await tester.tap(darkModeButton); + await tester.pumpAndSettle(); + + final MaterialApp materialAppAfter = + tester.widget(find.byType(MaterialApp)); + expect(materialAppAfter.themeMode, ThemeMode.dark); + expect(find.byTooltip('Switch to light mode'), findsOneWidget); + + await tester.tap(find.byTooltip('Switch to light mode')); + await tester.pumpAndSettle(); + + final MaterialApp materialAppRestored = + tester.widget(find.byType(MaterialApp)); + expect(materialAppRestored.themeMode, ThemeMode.light); + }); }