diff --git a/packages/wyatt_ui_kit/example/lib/rich_text_builders/rich_text_builders.dart b/packages/wyatt_ui_kit/example/lib/rich_text_builders/rich_text_builders.dart index 662a2b91..8d5316e4 100644 --- a/packages/wyatt_ui_kit/example/lib/rich_text_builders/rich_text_builders.dart +++ b/packages/wyatt_ui_kit/example/lib/rich_text_builders/rich_text_builders.dart @@ -16,11 +16,8 @@ import 'package:flutter/material.dart'; import 'package:gap/gap.dart'; -import 'package:google_fonts/google_fonts.dart'; -import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; import 'package:wyatt_ui_kit/wyatt_ui_kit.dart'; import 'package:wyatt_ui_kit_example/demo_page.dart'; -import 'package:wyatt_ui_kit_example/theme/constants.dart'; class RichTextBuilders extends DemoPage { const RichTextBuilders({super.key}); @@ -40,29 +37,25 @@ class RichTextBuilders extends DemoPage { ), ), const Gap(20), - RichTextBuilder( - defaultStyle: GoogleFonts.montserrat( - fontSize: 18, - fontWeight: FontWeight.w500, - height: 1.8, - ), - styles: { - 'gradient-blue': GradientTextStyle.from( - GoogleFonts.montserrat( - fontSize: 20, - fontWeight: FontWeight.w600, - color: Constants.blue1, - height: 1.8, - ), - const MultiColor(Constants.blueGradient), - ) - }, - text: ''' + const Padding( + padding: EdgeInsets.all(8), + child: RichTextBuilder( + text: ''' Innovation, Expertise et Accompagnement... Notre agence de développement Wyatt Studio met tout en oeuvre pour vous aider à concrétiser vos idées de solutions informatiques et mobiles. Vous aussi, comme beaucoup d’autres agences ou startups, faites nous confiance pour la réalisation de votre projet dès maintenant ! -''', + ''', + ), + ), + const Gap(20), + const Padding( + padding: EdgeInsets.all(8), + child: RichTextBuilder( + text: ''' +Je peux être bleu, ou même rouge en dégradé. À vrai dire je peux être un peu n'importe quelle couleur. + ''', + ), ), const Gap(20), ], diff --git a/packages/wyatt_ui_kit/example/lib/theme/rich_text_builder_theme.dart b/packages/wyatt_ui_kit/example/lib/theme/rich_text_builder_theme.dart new file mode 100644 index 00000000..2088f0fe --- /dev/null +++ b/packages/wyatt_ui_kit/example/lib/theme/rich_text_builder_theme.dart @@ -0,0 +1,120 @@ +// Copyright (C) 2023 WYATT GROUP +// Please see the AUTHORS file for details. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +import 'package:flutter/material.dart'; +import 'package:google_fonts/google_fonts.dart'; +import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; +import 'package:wyatt_ui_kit/wyatt_ui_kit.dart'; +import 'package:wyatt_ui_kit_example/theme/constants.dart'; + +final Map _styles = { + 'gradient-blue': GradientTextStyle.from( + GoogleFonts.montserrat( + fontSize: 20, + fontWeight: FontWeight.w600, + color: Constants.blue1, + height: 1.8, + ), + const MultiColor(Constants.blueGradient), + ), + 'gradient-red': GradientTextStyle.from( + GoogleFonts.montserrat( + fontSize: 20, + fontWeight: FontWeight.w600, + color: Constants.red1, + height: 1.8, + ), + const MultiColor(Constants.redGradient), + ), + 'gradient-green': GradientTextStyle.from( + GoogleFonts.montserrat( + fontSize: 20, + fontWeight: FontWeight.w600, + color: Constants.green1, + height: 1.8, + ), + const MultiColor(Constants.greenGradient), + ), + 'blue': GoogleFonts.montserrat( + fontSize: 20, + fontWeight: FontWeight.w600, + color: Constants.blue1, + height: 1.8, + ), + 'red': GoogleFonts.montserrat( + fontSize: 20, + fontWeight: FontWeight.w600, + color: Constants.red1, + height: 1.8, + ), + 'green': GoogleFonts.montserrat( + fontSize: 20, + fontWeight: FontWeight.w600, + color: Constants.green1, + height: 1.8, + ), +}; + +class RichTextBuilderTheme extends RichTextBuilderThemeExtension { + const RichTextBuilderTheme({ + super.defaultStyle, + super.styles, + }); + + factory RichTextBuilderTheme.light() => RichTextBuilderTheme( + defaultStyle: GoogleFonts.montserrat( + fontSize: 18, + fontWeight: FontWeight.w500, + color: Constants.grey3, + height: 1.8, + ), + styles: _styles, + ); + + factory RichTextBuilderTheme.dark() => RichTextBuilderTheme( + defaultStyle: GoogleFonts.montserrat( + fontSize: 18, + fontWeight: FontWeight.w500, + color: Constants.white, + height: 1.8, + ), + styles: _styles, + ); + + @override + ThemeExtension copyWith({ + TextStyle? defaultStyle, + Map? styles, + }) => + RichTextBuilderTheme( + defaultStyle: defaultStyle ?? this.defaultStyle, + styles: styles ?? this.styles, + ); + + @override + ThemeExtension lerp( + covariant ThemeExtension? other, + double t, + ) { + if (other is! RichTextBuilderTheme) { + return this; + } + return RichTextBuilderTheme( + defaultStyle: TextStyle.lerp(defaultStyle, other.defaultStyle, t), + styles: styles, + ); + } +} diff --git a/packages/wyatt_ui_kit/example/lib/theme/themes.dart b/packages/wyatt_ui_kit/example/lib/theme/themes.dart index 684270f8..63ecea53 100644 --- a/packages/wyatt_ui_kit/example/lib/theme/themes.dart +++ b/packages/wyatt_ui_kit/example/lib/theme/themes.dart @@ -21,6 +21,7 @@ import 'package:wyatt_ui_kit_example/theme/card_theme.dart'; import 'package:wyatt_ui_kit_example/theme/file_selection_button_theme.dart'; import 'package:wyatt_ui_kit_example/theme/flat_button_theme.dart'; import 'package:wyatt_ui_kit_example/theme/loader_theme.dart'; +import 'package:wyatt_ui_kit_example/theme/rich_text_builder_theme.dart'; import 'package:wyatt_ui_kit_example/theme/simple_icon_button_theme.dart'; import 'package:wyatt_ui_kit_example/theme/symbol_button_theme.dart'; @@ -87,6 +88,8 @@ abstract class Themes { FileSelectionButtonTheme.light(), // Loader LoaderTheme.light(), + // Rich Text + RichTextBuilderTheme.light(), ], ); @@ -102,6 +105,9 @@ abstract class Themes { color: const Color(0xFFFFFFFF), ), ), + drawerTheme: const DrawerThemeData( + backgroundColor: Color(0xFF383C40), + ), scaffoldBackgroundColor: const Color(0xFF383C40), extensions: >[ // Cards @@ -113,6 +119,8 @@ abstract class Themes { FileSelectionButtonTheme.dark(), // Loader LoaderTheme.dark(), + // Rich Text + RichTextBuilderTheme.dark(), ], ); } diff --git a/packages/wyatt_ui_kit/lib/src/components/rich_text_builder/rich_text_builder.dart b/packages/wyatt_ui_kit/lib/src/components/rich_text_builder/rich_text_builder.dart index 8bf2017b..745d3462 100644 --- a/packages/wyatt_ui_kit/lib/src/components/rich_text_builder/rich_text_builder.dart +++ b/packages/wyatt_ui_kit/lib/src/components/rich_text_builder/rich_text_builder.dart @@ -50,6 +50,7 @@ class RichTextBuilder extends RichTextBuilderComponent }) => RichTextBuilderStyle( defaultStyle: themeExtension.defaultStyle, + styles: themeExtension.styles, ), customStyleFn: (context, {extra}) => RichTextBuilderStyle( defaultStyle: defaultStyle, @@ -73,7 +74,6 @@ class RichTextBuilder extends RichTextBuilderComponent null, ), ); - final customParser = parser ?? RichTextParser( nodeBuilder: (content, style) { @@ -83,6 +83,9 @@ class RichTextBuilder extends RichTextBuilderComponent content, style: style, softWrap: true, + textHeightBehavior: const TextHeightBehavior( + applyHeightToLastDescent: false, + ), ), style: style, ); @@ -94,8 +97,12 @@ class RichTextBuilder extends RichTextBuilderComponent }, ); - return RichText( - text: root.toInlineSpan(customParser), + return SelectionArea( + child: Text.rich( + TextSpan(children: [root.toInlineSpan(customParser)]), + textHeightBehavior: + const TextHeightBehavior(applyHeightToLastDescent: false), + ), ); } } diff --git a/packages/wyatt_ui_kit/lib/src/components/rich_text_builder/rich_text_builder_theme_resolver.dart b/packages/wyatt_ui_kit/lib/src/components/rich_text_builder/rich_text_builder_theme_resolver.dart index 3ccf0112..f619d0a0 100644 --- a/packages/wyatt_ui_kit/lib/src/components/rich_text_builder/rich_text_builder_theme_resolver.dart +++ b/packages/wyatt_ui_kit/lib/src/components/rich_text_builder/rich_text_builder_theme_resolver.dart @@ -16,7 +16,6 @@ import 'package:flutter/material.dart'; import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; -import 'package:wyatt_ui_kit/src/domain/rich_text_builder_theme_extension.dart'; import 'package:wyatt_ui_kit/wyatt_ui_kit.dart'; class RichTextBuilderThemeResolver extends ThemeResolver. export './button_theme_extension/button_theme_extension.dart'; +export './card_theme_extension.dart'; export './loader_theme_extension.dart'; -export 'card_theme_extension.dart'; +export './rich_text_builder_theme_extension.dart';