diff --git a/lib/main.dart b/lib/main.dart index a3efee0b..6ba7f93e 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,9 +1,11 @@ import 'package:flutter/material.dart'; +import 'package:magic_epaper_app/provider/getitlocator.dart'; import 'package:magic_epaper_app/provider/image_loader.dart'; import 'package:provider/provider.dart'; import 'package:magic_epaper_app/view/display_selection_screen.dart'; void main() { + setupLocator(); runApp(MultiProvider(providers: [ ChangeNotifierProvider(create: (context) => ImageLoader()), ], child: const MyApp())); diff --git a/lib/pro_image_editor/features/bottom_bar.dart b/lib/pro_image_editor/features/bottom_bar.dart index b89d09d0..bd035d28 100644 --- a/lib/pro_image_editor/features/bottom_bar.dart +++ b/lib/pro_image_editor/features/bottom_bar.dart @@ -33,7 +33,6 @@ class BottomBarCustom extends StatefulWidget { required this.configs, required this.strokeWidth, required this.onSetLineWidth, - required this.initColor, required this.onColorChanged, this.iconStrokeWidthThin = ProImageEditorIcons.penSize1, this.iconStrokeWidthMedium = ProImageEditorIcons.penSize2, @@ -62,7 +61,7 @@ class BottomBarCustom extends StatefulWidget { /// /// This color sets the initial paint color, providing a starting point /// for color customization. - final Color initColor; + final Color initColor = Colors.black; /// Callback function for handling color changes. /// @@ -136,7 +135,6 @@ class _BottomBarCustomState extends State { ? Expanded( child: ColorPickerCustom( onColorChanged: widget.onColorChanged, - initColor: widget.initColor, ), ) : _buildLineWidths(), diff --git a/lib/pro_image_editor/features/color_picker.dart b/lib/pro_image_editor/features/color_picker.dart index 5caa9f01..f29aa906 100644 --- a/lib/pro_image_editor/features/color_picker.dart +++ b/lib/pro_image_editor/features/color_picker.dart @@ -1,5 +1,7 @@ // Flutter imports: import 'package:flutter/material.dart'; +import 'package:magic_epaper_app/provider/color_palette_provider.dart'; +import 'package:magic_epaper_app/provider/getitlocator.dart'; /// A stateful widget that provides a color picker inspired by WhatsApp. /// @@ -23,7 +25,6 @@ class ColorPickerCustom extends StatefulWidget { const ColorPickerCustom({ super.key, required this.onColorChanged, - required this.initColor, }); /// Callback for handling color changes. @@ -36,7 +37,6 @@ class ColorPickerCustom extends StatefulWidget { /// /// This color sets the initial value of the picker, providing a starting /// point for color selection. - final Color initColor; @override State createState() => _ColorPickerCustomState(); @@ -44,18 +44,7 @@ class ColorPickerCustom extends StatefulWidget { class _ColorPickerCustomState extends State { Color _selectedColor = Colors.black; - - final List _colors = [ - Colors.white, - Colors.black, - Colors.red, - ]; - - @override - void initState() { - super.initState(); - _selectedColor = widget.initColor; - } + final List _colors = getIt().colors; @override Widget build(BuildContext context) { @@ -67,10 +56,8 @@ class _ColorPickerCustomState extends State { itemBuilder: (context, index) { Color color = _colors[index]; bool selected = _selectedColor == color; - double size = !selected ? 20 : 24; double borderWidth = !selected ? 2.5 : 4; - return Center( child: GestureDetector( onTap: () { diff --git a/lib/pro_image_editor/features/movable_background_image.dart b/lib/pro_image_editor/features/movable_background_image.dart index 6e37795c..e350e3a9 100644 --- a/lib/pro_image_editor/features/movable_background_image.dart +++ b/lib/pro_image_editor/features/movable_background_image.dart @@ -439,6 +439,7 @@ class _MovableBackgroundImageExampleState bodyItems: _buildPaintEditorBody, ), style: const PaintEditorStyle( + initialColor: Colors.black, uiOverlayStyle: SystemUiOverlayStyle( statusBarColor: Colors.black, ), @@ -586,7 +587,6 @@ List _buildPaintEditorBody( builder: (_) => BottomBarCustom( configs: paintEditor.configs, strokeWidth: paintEditor.paintCtrl.strokeWidth, - initColor: paintEditor.paintCtrl.color, onColorChanged: (color) { paintEditor.paintCtrl.setColor(color); paintEditor.uiPickerStream.add(null); diff --git a/lib/pro_image_editor/features/text_bottom_bar.dart b/lib/pro_image_editor/features/text_bottom_bar.dart index 9ceae6d1..c10151ad 100644 --- a/lib/pro_image_editor/features/text_bottom_bar.dart +++ b/lib/pro_image_editor/features/text_bottom_bar.dart @@ -124,7 +124,6 @@ class _TextBottomBarState extends State { ? Expanded( child: ColorPickerCustom( onColorChanged: widget.onColorChanged, - initColor: widget.initColor, ), ) : Expanded( diff --git a/lib/provider/color_palette_provider.dart b/lib/provider/color_palette_provider.dart new file mode 100644 index 00000000..f19642f9 --- /dev/null +++ b/lib/provider/color_palette_provider.dart @@ -0,0 +1,12 @@ +import 'package:flutter/material.dart'; + +class ColorPaletteProvider extends ChangeNotifier { + List _colors = []; + + List get colors => _colors; + + void updateColors(List newColors) { + _colors = newColors; + notifyListeners(); + } +} diff --git a/lib/provider/getitlocator.dart b/lib/provider/getitlocator.dart new file mode 100644 index 00000000..1daea68f --- /dev/null +++ b/lib/provider/getitlocator.dart @@ -0,0 +1,9 @@ +import 'package:get_it/get_it.dart'; +import 'package:magic_epaper_app/provider/color_palette_provider.dart'; + +final GetIt getIt = GetIt.instance; + +void setupLocator() { + getIt.registerLazySingleton( + () => ColorPaletteProvider()); +} diff --git a/lib/view/display_selection_screen.dart b/lib/view/display_selection_screen.dart index 69967abc..d8bc6885 100644 --- a/lib/view/display_selection_screen.dart +++ b/lib/view/display_selection_screen.dart @@ -1,9 +1,12 @@ import 'package:flutter/material.dart'; import 'package:magic_epaper_app/constants.dart'; +import 'package:magic_epaper_app/provider/getitlocator.dart'; import 'package:magic_epaper_app/util/epd/epd.dart'; import 'package:magic_epaper_app/util/epd/gdey037z03.dart'; import 'package:magic_epaper_app/util/epd/gdey037z03bw.dart'; import 'package:magic_epaper_app/view/image_editor.dart'; +import 'package:provider/provider.dart'; +import 'package:magic_epaper_app/provider/color_palette_provider.dart'; import 'package:magic_epaper_app/view/widget/display_card.dart'; class DisplaySelectionScreen extends StatefulWidget { @@ -19,60 +22,65 @@ class _DisplaySelectionScreenState extends State { @override Widget build(BuildContext context) { - return Scaffold( - backgroundColor: Colors.white, - appBar: AppBar( - backgroundColor: colorAccent, - elevation: 0, - title: const Padding( - padding: EdgeInsets.fromLTRB(5, 16, 16, 5), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text('Magic ePaper', - style: TextStyle( - fontSize: 24, - fontWeight: FontWeight.bold, - color: Colors.white, - )), - SizedBox(height: 8), - Text('Select your ePaper display type', - style: TextStyle( - fontSize: 16, - color: Colors.white, - )), - ], - ), - ), - toolbarHeight: 85, - ), - body: SafeArea( - child: Padding( - padding: const EdgeInsets.fromLTRB(10.0, 14, 16.0, 16.0), - child: Column( - children: [ - Expanded( - child: GridView.builder( - gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount( - crossAxisCount: 2, - childAspectRatio: 0.6, - mainAxisSpacing: 8, - crossAxisSpacing: 8, - ), - itemCount: displays.length, - itemBuilder: (context, index) => DisplayCard( - display: displays[index], - isSelected: selectedIndex == index, - onTap: () => setState(() => selectedIndex = index), - ), + return ChangeNotifierProvider( + create: (_) => getIt(), + builder: (context, child) { + return Scaffold( + backgroundColor: Colors.white, + appBar: AppBar( + backgroundColor: colorAccent, + elevation: 0, + title: const Padding( + padding: EdgeInsets.fromLTRB(5, 16, 16, 5), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text('Magic ePaper', + style: TextStyle( + fontSize: 24, + fontWeight: FontWeight.bold, + color: Colors.white, + )), + SizedBox(height: 8), + Text('Select your ePaper display type', + style: TextStyle( + fontSize: 16, + color: Colors.white, + )), + ], ), ), - _buildContinueButton(context), - ], - ), - ), - ), - ); + toolbarHeight: 85, + ), + body: SafeArea( + child: Padding( + padding: const EdgeInsets.fromLTRB(10.0, 14, 16.0, 16.0), + child: Column( + children: [ + Expanded( + child: GridView.builder( + gridDelegate: + const SliverGridDelegateWithFixedCrossAxisCount( + crossAxisCount: 2, + childAspectRatio: 0.6, + mainAxisSpacing: 8, + crossAxisSpacing: 8, + ), + itemCount: displays.length, + itemBuilder: (context, index) => DisplayCard( + display: displays[index], + isSelected: selectedIndex == index, + onTap: () => setState(() => selectedIndex = index), + ), + ), + ), + _buildContinueButton(context), + ], + ), + ), + ), + ); + }); } Widget _buildContinueButton(BuildContext context) { @@ -83,6 +91,10 @@ class _DisplaySelectionScreenState extends State { child: ElevatedButton( onPressed: isEnabled ? () { + context.read().updateColors( + displays[selectedIndex].colors, + ); + Navigator.push( context, MaterialPageRoute( diff --git a/pubspec.yaml b/pubspec.yaml index ecea07a4..88cd7b24 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -41,6 +41,7 @@ dependencies: mime: ^2.0.0 intl: ^0.19.0 path_provider: ^2.0.15 + get_it: ^8.0.3 dev_dependencies: flutter_test: