Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found
Select Git revision
  • 51-fix-distribute-seeds
  • master
  • 42-add-rule-game-ends-if-player-has-no-more-seeds
  • 43-add-rule-game-ends-if-board-contains-3-or-less-seeds
  • 45-pick-and-earn-seeds-one-by-one
  • 38-add-button-to-give-tip-for-human-player
  • 40-improve-get-move-weight-function
  • 34-allow-more-seeds-in-holes
  • 14-improve-app-metadata
  • Release_0.0.10_10
  • Release_0.0.11_11
  • Release_0.0.1_1
  • Release_0.0.2_2
  • Release_0.0.3_3
  • Release_0.0.4_4
  • Release_0.0.5_5
  • Release_0.0.6_6
  • Release_0.0.7_7
  • Release_0.0.8_8
  • Release_0.0.9_9
  • Release_0.1.0_12
  • Release_0.1.1_13
  • Release_0.2.0_14
  • Release_0.2.1_15
  • Release_0.3.0_16
  • Release_0.3.1_17
  • Release_0.3.2_18
  • Release_0.4.0_19
  • Release_0.5.0_20
  • Release_0.6.0_21
  • Release_0.7.0_22
  • Release_0.7.1_23
  • Release_0.7.2_24
  • Release_0.8.0_25
  • Release_0.8.10_35
  • Release_0.8.11_36
  • Release_0.8.12_37
  • Release_0.8.13_38
  • Release_0.8.14_39
  • Release_0.8.15_40
  • Release_0.8.1_26
  • Release_0.8.2_27
  • Release_0.8.3_28
  • Release_0.8.4_29
  • Release_0.8.5_30
  • Release_0.8.6_31
  • Release_0.8.7_32
  • Release_0.8.8_33
  • Release_0.8.9_34
49 results

Target

Select target project
  • android / org.benoitharrault.awale
1 result
Select Git revision
  • 51-fix-distribute-seeds
  • master
  • 42-add-rule-game-ends-if-player-has-no-more-seeds
  • 43-add-rule-game-ends-if-board-contains-3-or-less-seeds
  • 45-pick-and-earn-seeds-one-by-one
  • 38-add-button-to-give-tip-for-human-player
  • 40-improve-get-move-weight-function
  • 34-allow-more-seeds-in-holes
  • 14-improve-app-metadata
  • Release_0.0.10_10
  • Release_0.0.11_11
  • Release_0.0.1_1
  • Release_0.0.2_2
  • Release_0.0.3_3
  • Release_0.0.4_4
  • Release_0.0.5_5
  • Release_0.0.6_6
  • Release_0.0.7_7
  • Release_0.0.8_8
  • Release_0.0.9_9
  • Release_0.1.0_12
  • Release_0.1.1_13
  • Release_0.2.0_14
  • Release_0.2.1_15
  • Release_0.3.0_16
  • Release_0.3.1_17
  • Release_0.3.2_18
  • Release_0.4.0_19
  • Release_0.5.0_20
  • Release_0.6.0_21
  • Release_0.7.0_22
  • Release_0.7.1_23
  • Release_0.7.2_24
  • Release_0.8.0_25
  • Release_0.8.10_35
  • Release_0.8.11_36
  • Release_0.8.12_37
  • Release_0.8.13_38
  • Release_0.8.14_39
  • Release_0.8.15_40
  • Release_0.8.1_26
  • Release_0.8.2_27
  • Release_0.8.3_28
  • Release_0.8.4_29
  • Release_0.8.5_30
  • Release_0.8.6_31
  • Release_0.8.7_32
  • Release_0.8.8_33
  • Release_0.8.9_34
49 results
Show changes
50 files
+ 87
633
Compare changes
  • Side-by-side
  • Inline

Files

+3 −0
Original line number Original line Diff line number Diff line
@@ -11,5 +11,8 @@ insert_final_newline = true
[*.json]
[*.json]
indent_size = 2
indent_size = 2


[*.yaml]
indent_size = 2

[*.md]
[*.md]
trim_trailing_whitespace = false
trim_trailing_whitespace = false
+1 −0
Original line number Original line Diff line number Diff line
@@ -8,6 +8,7 @@
.buildlog/
.buildlog/
.history
.history
.svn/
.svn/
migrate_working_dir/


# IntelliJ related
# IntelliJ related
*.iml
*.iml
Original line number Original line Diff line number Diff line
import 'package:awale/utils/tools.dart';
import 'package:flutter_custom_toolbox/flutter_toolbox.dart';


class DefaultGameSettings {
class DefaultGameSettings {
  // available game parameters codes
  // available game parameters codes
Original line number Original line Diff line number Diff line
import 'package:awale/utils/tools.dart';
import 'package:flutter_custom_toolbox/flutter_toolbox.dart';


class DefaultGlobalSettings {
class DefaultGlobalSettings {
  // available global parameters codes
  // available global parameters codes
Original line number Original line Diff line number Diff line
import 'package:flutter/material.dart';
import 'package:flutter/material.dart';
import 'package:unicons/unicons.dart';
import 'package:flutter_custom_toolbox/flutter_toolbox.dart';


import 'package:awale/ui/screens/page_about.dart';
import 'package:awale/ui/screens/page_about.dart';
import 'package:awale/ui/screens/page_game.dart';
import 'package:awale/ui/screens/page_game.dart';

lib/config/theme.dart

deleted100644 → 0
+0 −190
Original line number Original line Diff line number Diff line
import 'package:flutter/material.dart';

/// Colors from Tailwind CSS (v3.0) - June 2022
///
/// https://tailwindcss.com/docs/customizing-colors

const int _primaryColor = 0xFF6366F1;
const MaterialColor primarySwatch = MaterialColor(_primaryColor, <int, Color>{
  50: Color(0xFFEEF2FF), // indigo-50
  100: Color(0xFFE0E7FF), // indigo-100
  200: Color(0xFFC7D2FE), // indigo-200
  300: Color(0xFFA5B4FC), // indigo-300
  400: Color(0xFF818CF8), // indigo-400
  500: Color(_primaryColor), // indigo-500
  600: Color(0xFF4F46E5), // indigo-600
  700: Color(0xFF4338CA), // indigo-700
  800: Color(0xFF3730A3), // indigo-800
  900: Color(0xFF312E81), // indigo-900
});

const int _textColor = 0xFF64748B;
const MaterialColor textSwatch = MaterialColor(_textColor, <int, Color>{
  50: Color(0xFFF8FAFC), // slate-50
  100: Color(0xFFF1F5F9), // slate-100
  200: Color(0xFFE2E8F0), // slate-200
  300: Color(0xFFCBD5E1), // slate-300
  400: Color(0xFF94A3B8), // slate-400
  500: Color(_textColor), // slate-500
  600: Color(0xFF475569), // slate-600
  700: Color(0xFF334155), // slate-700
  800: Color(0xFF1E293B), // slate-800
  900: Color(0xFF0F172A), // slate-900
});

const Color errorColor = Color(0xFFDC2626); // red-600

final ColorScheme lightColorScheme = ColorScheme.light(
  primary: primarySwatch.shade500,
  secondary: primarySwatch.shade500,
  onSecondary: Colors.white,
  error: errorColor,
  onSurface: textSwatch.shade500,
  surface: textSwatch.shade50,
  surfaceContainerHighest: Colors.white,
  shadow: textSwatch.shade900.withOpacity(.1),
);

final ColorScheme darkColorScheme = ColorScheme.dark(
  primary: primarySwatch.shade500,
  secondary: primarySwatch.shade500,
  onSecondary: Colors.white,
  error: errorColor,
  onSurface: textSwatch.shade300,
  surface: const Color(0xFF262630),
  surfaceContainerHighest: const Color(0xFF282832),
  shadow: textSwatch.shade900.withOpacity(.2),
);

final ThemeData lightTheme = ThemeData(
  colorScheme: lightColorScheme,
  fontFamily: 'Nunito',
  textTheme: TextTheme(
    displayLarge: TextStyle(
      color: textSwatch.shade700,
      fontFamily: 'Nunito',
    ),
    displayMedium: TextStyle(
      color: textSwatch.shade600,
      fontFamily: 'Nunito',
    ),
    displaySmall: TextStyle(
      color: textSwatch.shade500,
      fontFamily: 'Nunito',
    ),
    headlineLarge: TextStyle(
      color: textSwatch.shade700,
      fontFamily: 'Nunito',
    ),
    headlineMedium: TextStyle(
      color: textSwatch.shade600,
      fontFamily: 'Nunito',
    ),
    headlineSmall: TextStyle(
      color: textSwatch.shade500,
      fontFamily: 'Nunito',
    ),
    titleLarge: TextStyle(
      color: textSwatch.shade700,
      fontFamily: 'Nunito',
    ),
    titleMedium: TextStyle(
      color: textSwatch.shade600,
      fontFamily: 'Nunito',
    ),
    titleSmall: TextStyle(
      color: textSwatch.shade500,
      fontFamily: 'Nunito',
    ),
    bodyLarge: TextStyle(
      color: textSwatch.shade700,
      fontFamily: 'Nunito',
    ),
    bodyMedium: TextStyle(
      color: textSwatch.shade600,
      fontFamily: 'Nunito',
    ),
    bodySmall: TextStyle(
      color: textSwatch.shade500,
      fontFamily: 'Nunito',
    ),
    labelLarge: TextStyle(
      color: textSwatch.shade700,
      fontFamily: 'Nunito',
    ),
    labelMedium: TextStyle(
      color: textSwatch.shade600,
      fontFamily: 'Nunito',
    ),
    labelSmall: TextStyle(
      color: textSwatch.shade500,
      fontFamily: 'Nunito',
    ),
  ),
);

final ThemeData darkTheme = lightTheme.copyWith(
  colorScheme: darkColorScheme,
  textTheme: TextTheme(
    displayLarge: TextStyle(
      color: textSwatch.shade200,
      fontFamily: 'Nunito',
    ),
    displayMedium: TextStyle(
      color: textSwatch.shade300,
      fontFamily: 'Nunito',
    ),
    displaySmall: TextStyle(
      color: textSwatch.shade400,
      fontFamily: 'Nunito',
    ),
    headlineLarge: TextStyle(
      color: textSwatch.shade200,
      fontFamily: 'Nunito',
    ),
    headlineMedium: TextStyle(
      color: textSwatch.shade300,
      fontFamily: 'Nunito',
    ),
    headlineSmall: TextStyle(
      color: textSwatch.shade400,
      fontFamily: 'Nunito',
    ),
    titleLarge: TextStyle(
      color: textSwatch.shade200,
      fontFamily: 'Nunito',
    ),
    titleMedium: TextStyle(
      color: textSwatch.shade300,
      fontFamily: 'Nunito',
    ),
    titleSmall: TextStyle(
      color: textSwatch.shade400,
      fontFamily: 'Nunito',
    ),
    bodyLarge: TextStyle(
      color: textSwatch.shade200,
      fontFamily: 'Nunito',
    ),
    bodyMedium: TextStyle(
      color: textSwatch.shade300,
      fontFamily: 'Nunito',
    ),
    bodySmall: TextStyle(
      color: textSwatch.shade400,
      fontFamily: 'Nunito',
    ),
    labelLarge: TextStyle(
      color: textSwatch.shade200,
      fontFamily: 'Nunito',
    ),
    labelMedium: TextStyle(
      color: textSwatch.shade300,
      fontFamily: 'Nunito',
    ),
    labelSmall: TextStyle(
      color: textSwatch.shade400,
      fontFamily: 'Nunito',
    ),
  ),
);
Original line number Original line Diff line number Diff line
import 'dart:async';
import 'dart:async';


import 'package:equatable/equatable.dart';
import 'package:flutter/material.dart';
import 'package:flutter/material.dart';
import 'package:hydrated_bloc/hydrated_bloc.dart';
import 'package:flutter_custom_toolbox/flutter_toolbox.dart';


import 'package:awale/models/game/game.dart';
import 'package:awale/models/game/game.dart';
import 'package:awale/models/settings/settings_game.dart';
import 'package:awale/models/settings/settings_game.dart';
import 'package:awale/models/settings/settings_global.dart';
import 'package:awale/models/settings/settings_global.dart';
import 'package:awale/robot/robot_player.dart';
import 'package:awale/robot/robot_player.dart';
import 'package:awale/utils/tools.dart';


part 'game_state.dart';
part 'game_state.dart';


Original line number Original line Diff line number Diff line
import 'package:hydrated_bloc/hydrated_bloc.dart';
import 'package:flutter_custom_toolbox/flutter_toolbox.dart';


import 'package:awale/config/menu.dart';
import 'package:awale/config/menu.dart';


Original line number Original line Diff line number Diff line
import 'package:equatable/equatable.dart';
import 'package:flutter/material.dart';
import 'package:flutter/material.dart';
import 'package:hydrated_bloc/hydrated_bloc.dart';
import 'package:flutter_custom_toolbox/flutter_toolbox.dart';


import 'package:awale/config/default_game_settings.dart';
import 'package:awale/config/default_game_settings.dart';
import 'package:awale/models/settings/settings_game.dart';
import 'package:awale/models/settings/settings_game.dart';
Original line number Original line Diff line number Diff line
import 'package:equatable/equatable.dart';
import 'package:flutter/material.dart';
import 'package:flutter/material.dart';
import 'package:hydrated_bloc/hydrated_bloc.dart';
import 'package:flutter_custom_toolbox/flutter_toolbox.dart';


import 'package:awale/config/default_global_settings.dart';
import 'package:awale/config/default_global_settings.dart';
import 'package:awale/models/settings/settings_global.dart';
import 'package:awale/models/settings/settings_global.dart';
Original line number Original line Diff line number Diff line
import 'package:equatable/equatable.dart';
import 'package:flutter/material.dart';
import 'package:flutter/material.dart';
import 'package:hydrated_bloc/hydrated_bloc.dart';
import 'package:flutter_custom_toolbox/flutter_toolbox.dart';


part 'theme_state.dart';
part 'theme_state.dart';


+1 −6
Original line number Original line Diff line number Diff line
import 'dart:io';
import 'dart:io';


import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter/services.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
import 'package:hive/hive.dart';
import 'package:hydrated_bloc/hydrated_bloc.dart';
import 'package:path_provider/path_provider.dart';


import 'package:awale/config/default_global_settings.dart';
import 'package:awale/config/default_global_settings.dart';
import 'package:awale/config/theme.dart';
import 'package:awale/cubit/game_cubit.dart';
import 'package:awale/cubit/game_cubit.dart';
import 'package:awale/cubit/nav_cubit.dart';
import 'package:awale/cubit/nav_cubit.dart';
import 'package:awale/cubit/settings_game_cubit.dart';
import 'package:awale/cubit/settings_game_cubit.dart';
Original line number Original line Diff line number Diff line
import 'package:awale/utils/tools.dart';
import 'package:flutter_custom_toolbox/flutter_toolbox.dart';


typedef BoardCells = List<int>;
typedef BoardCells = List<int>;


Original line number Original line Diff line number Diff line
import 'package:flutter_custom_toolbox/flutter_toolbox.dart';

import 'package:awale/config/default_game_settings.dart';
import 'package:awale/config/default_game_settings.dart';
import 'package:awale/models/game/board.dart';
import 'package:awale/models/game/board.dart';
import 'package:awale/models/settings/settings_game.dart';
import 'package:awale/models/settings/settings_game.dart';
import 'package:awale/models/settings/settings_global.dart';
import 'package:awale/models/settings/settings_global.dart';
import 'package:awale/utils/tools.dart';


class Game {
class Game {
  Game({
  Game({
Original line number Original line Diff line number Diff line
import 'package:flutter_custom_toolbox/flutter_toolbox.dart';

import 'package:awale/config/default_game_settings.dart';
import 'package:awale/config/default_game_settings.dart';
import 'package:awale/utils/tools.dart';


class GameSettings {
class GameSettings {
  final String gameMode;
  final String gameMode;
Original line number Original line Diff line number Diff line
import 'package:flutter_custom_toolbox/flutter_toolbox.dart';

import 'package:awale/config/default_global_settings.dart';
import 'package:awale/config/default_global_settings.dart';
import 'package:awale/utils/tools.dart';


class GlobalSettings {
class GlobalSettings {
  String skin;
  String skin;

lib/ui/helpers/app_titles.dart

deleted100644 → 0
+0 −32
Original line number Original line Diff line number Diff line
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';

class AppHeader extends StatelessWidget {
  const AppHeader({super.key, required this.text});

  final String text;

  @override
  Widget build(BuildContext context) {
    return Text(
      tr(text),
      textAlign: TextAlign.start,
      style: Theme.of(context).textTheme.headlineMedium!.apply(fontWeightDelta: 2),
    );
  }
}

class AppTitle extends StatelessWidget {
  const AppTitle({super.key, required this.text});

  final String text;

  @override
  Widget build(BuildContext context) {
    return Text(
      tr(text),
      textAlign: TextAlign.start,
      style: Theme.of(context).textTheme.titleLarge!.apply(fontWeightDelta: 2),
    );
  }
}
+0 −51
Original line number Original line Diff line number Diff line
import 'package:flutter/material.dart';

import 'package:awale/utils/color_extensions.dart';

class OutlinedText extends StatelessWidget {
  const OutlinedText({
    super.key,
    required this.text,
    required this.fontSize,
    required this.textColor,
    this.outlineColor,
  });

  final String text;
  final double fontSize;
  final Color textColor;
  final Color? outlineColor;

  @override
  Widget build(BuildContext context) {
    final double delta = fontSize / 30;

    return Text(
      text,
      style: TextStyle(
        inherit: true,
        fontSize: fontSize,
        fontWeight: FontWeight.w600,
        color: textColor,
        shadows: [
          Shadow(
            offset: Offset(-delta, -delta),
            color: outlineColor ?? textColor.darken(),
          ),
          Shadow(
            offset: Offset(delta, -delta),
            color: outlineColor ?? textColor.darken(),
          ),
          Shadow(
            offset: Offset(delta, delta),
            color: outlineColor ?? textColor.darken(),
          ),
          Shadow(
            offset: Offset(-delta, delta),
            color: outlineColor ?? textColor.darken(),
          ),
        ],
      ),
    );
  }
}

lib/ui/helpers/styled_button.dart

deleted100644 → 0
+0 −210
Original line number Original line Diff line number Diff line
import 'package:auto_size_text/auto_size_text.dart';
import 'package:flutter/material.dart';

import 'package:awale/utils/color_extensions.dart';

class StyledButton extends StatelessWidget {
  const StyledButton({
    super.key,
    required this.color,
    required this.onPressed,
    this.onLongPress,
    required this.child,
  });

  final Color color;
  final VoidCallback? onPressed;
  final VoidCallback? onLongPress;
  final Widget child;

  factory StyledButton.text({
    Key? key,
    required VoidCallback? onPressed,
    VoidCallback? onLongPress,
    required String caption,
    required Color color,
  }) {
    final Widget captionWidget = AutoSizeText(
      caption,
      maxLines: 1,
      style: TextStyle(
        inherit: true,
        fontWeight: FontWeight.w900,
        color: color.darken(60),
        shadows: [
          Shadow(
            blurRadius: 5.0,
            color: color.lighten(60),
            offset: const Offset(2, 2),
          ),
          Shadow(
            blurRadius: 5.0,
            color: color.lighten(60),
            offset: const Offset(2, -2),
          ),
          Shadow(
            blurRadius: 5.0,
            color: color.lighten(60),
            offset: const Offset(-2, 2),
          ),
          Shadow(
            blurRadius: 5.0,
            color: color.lighten(60),
            offset: const Offset(-2, -2),
          ),
        ],
      ),
    );

    return StyledButton(
      color: color,
      onPressed: onPressed,
      onLongPress: onLongPress,
      child: captionWidget,
    );
  }

  factory StyledButton.icon({
    Key? key,
    required VoidCallback? onPressed,
    VoidCallback? onLongPress,
    required Icon icon,
    required Color color,
    required double iconSize,
  }) {
    return StyledButton(
      color: color,
      onPressed: onPressed,
      onLongPress: onLongPress,
      child: Icon(
        icon.icon,
        color: icon.color ?? color.darken(60),
        size: iconSize,
        shadows: [
          Shadow(
            blurRadius: 5.0,
            color: color.lighten(60),
            offset: const Offset(2, 2),
          ),
          Shadow(
            blurRadius: 5.0,
            color: color.lighten(60),
            offset: const Offset(2, -2),
          ),
          Shadow(
            blurRadius: 5.0,
            color: color.lighten(60),
            offset: const Offset(-2, 2),
          ),
          Shadow(
            blurRadius: 5.0,
            color: color.lighten(60),
            offset: const Offset(-2, -2),
          ),
        ],
      ),
    );
  }

  @override
  Widget build(BuildContext context) {
    const double borderWidth = 4;
    final Color borderColor = color.darken(40);
    const double borderRadius = 10;

    return Container(
      margin: const EdgeInsets.all(2),
      padding: const EdgeInsets.all(2),
      decoration: BoxDecoration(
        color: color,
        border: Border.all(
          color: borderColor,
          width: borderWidth,
        ),
        borderRadius: BorderRadius.circular(borderRadius),
      ),
      child: CustomPaint(
        painter: StyledButtonPainter(
          baseColor: color,
        ),
        child: MaterialButton(
          onPressed: onPressed,
          onLongPress: onLongPress,
          padding: const EdgeInsets.all(8),
          materialTapTargetSize: MaterialTapTargetSize.shrinkWrap,
          minWidth: 40,
          child: child,
        ),
      ),
    );
  }
}

class StyledButtonPainter extends CustomPainter {
  StyledButtonPainter({
    required this.baseColor,
  });

  final Color baseColor;

  @override
  void paint(Canvas canvas, Size size) {
    final Color lightColor = baseColor.lighten(20);
    final Color darkColor = baseColor.darken(20);

    final Paint paint = Paint()..style = PaintingStyle.fill;

    const double cornerRadius = 6;

    Path topPath = Path()
      ..moveTo(cornerRadius, 0)
      ..lineTo(size.width - cornerRadius, 0)
      ..arcToPoint(
        Offset(size.width, cornerRadius),
        radius: const Radius.circular(cornerRadius),
      )
      ..lineTo(size.width, size.height * .35)
      ..quadraticBezierTo(
        size.width * .4,
        size.height * .1,
        0,
        size.height * .3,
      )
      ..lineTo(0, cornerRadius)
      ..arcToPoint(
        const Offset(cornerRadius, 0),
        radius: const Radius.circular(cornerRadius),
      );

    Path bottomPath = Path()
      ..moveTo(cornerRadius, size.height)
      ..lineTo(size.width - cornerRadius, size.height)
      ..arcToPoint(
        Offset(size.width, size.height - cornerRadius),
        radius: const Radius.circular(cornerRadius),
        clockwise: false,
      )
      ..lineTo(size.width, size.height * .7)
      ..quadraticBezierTo(
        size.width * .6,
        size.height * .9,
        0,
        size.height * .7,
      )
      ..lineTo(0, size.height - cornerRadius)
      ..arcToPoint(
        Offset(cornerRadius, size.height),
        radius: const Radius.circular(cornerRadius),
        clockwise: false,
      );

    paint.color = lightColor;
    canvas.drawPath(topPath, paint);

    paint.color = darkColor;
    canvas.drawPath(bottomPath, paint);
  }

  @override
  bool shouldRepaint(CustomPainter oldDelegate) => false;
}
Original line number Original line Diff line number Diff line
import 'package:awale/ui/widgets/game/game_player.dart';
import 'package:flutter/material.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_custom_toolbox/flutter_toolbox.dart';


import 'package:awale/cubit/game_cubit.dart';
import 'package:awale/cubit/game_cubit.dart';
import 'package:awale/models/game/game.dart';
import 'package:awale/models/game/game.dart';
import 'package:awale/ui/widgets/game/game_board.dart';
import 'package:awale/ui/widgets/game/game_board.dart';
import 'package:awale/ui/widgets/game/game_end.dart';
import 'package:awale/ui/widgets/game/game_end.dart';
import 'package:awale/ui/widgets/game/game_player.dart';


class GameLayout extends StatelessWidget {
class GameLayout extends StatelessWidget {
  const GameLayout({super.key});
  const GameLayout({super.key});
Original line number Original line Diff line number Diff line
import 'package:flutter/material.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_custom_toolbox/flutter_toolbox.dart';


import 'package:awale/config/default_game_settings.dart';
import 'package:awale/config/default_game_settings.dart';
import 'package:awale/config/default_global_settings.dart';
import 'package:awale/config/default_global_settings.dart';
Original line number Original line Diff line number Diff line
import 'dart:math';
import 'dart:math';


import 'package:flutter/material.dart';
import 'package:flutter/material.dart';
import 'package:flutter_custom_toolbox/flutter_toolbox.dart';


import 'package:awale/models/settings/settings_game.dart';
import 'package:awale/models/settings/settings_game.dart';
import 'package:awale/models/settings/settings_global.dart';
import 'package:awale/models/settings/settings_global.dart';
import 'package:awale/utils/tools.dart';


class ParameterPainter extends CustomPainter {
class ParameterPainter extends CustomPainter {
  const ParameterPainter({
  const ParameterPainter({
Original line number Original line Diff line number Diff line
import 'package:flutter/material.dart';
import 'package:flutter/material.dart';
import 'package:flutter_custom_toolbox/flutter_toolbox.dart';


import 'package:awale/config/default_game_settings.dart';
import 'package:awale/config/default_game_settings.dart';
import 'package:awale/models/settings/settings_game.dart';
import 'package:awale/models/settings/settings_game.dart';
import 'package:awale/models/settings/settings_global.dart';
import 'package:awale/models/settings/settings_global.dart';
import 'package:awale/ui/helpers/styled_button.dart';
import 'package:awale/utils/tools.dart';


class ParameterWidget extends StatelessWidget {
class ParameterWidget extends StatelessWidget {
  const ParameterWidget({
  const ParameterWidget({
Original line number Original line Diff line number Diff line
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:flutter/material.dart';
import 'package:package_info_plus/package_info_plus.dart';
import 'package:flutter_custom_toolbox/flutter_toolbox.dart';

import 'package:awale/ui/helpers/app_titles.dart';


class PageAbout extends StatelessWidget {
class PageAbout extends StatelessWidget {
  const PageAbout({super.key});
  const PageAbout({super.key});
Original line number Original line Diff line number Diff line
import 'package:flutter/material.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_custom_toolbox/flutter_toolbox.dart';


import 'package:awale/cubit/game_cubit.dart';
import 'package:awale/cubit/game_cubit.dart';
import 'package:awale/models/game/game.dart';
import 'package:awale/models/game/game.dart';
Original line number Original line Diff line number Diff line
import 'package:flutter/material.dart';
import 'package:flutter/material.dart';
import 'package:flutter_custom_toolbox/flutter_toolbox.dart';


import 'package:awale/ui/helpers/app_titles.dart';
import 'package:awale/ui/settings/settings_form.dart';
import 'package:awale/ui/settings/settings_form.dart';


class PageSettings extends StatelessWidget {
class PageSettings extends StatelessWidget {
Original line number Original line Diff line number Diff line
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:flutter/material.dart';
import 'package:unicons/unicons.dart';
import 'package:flutter_custom_toolbox/flutter_toolbox.dart';


import 'package:awale/ui/settings/theme_card.dart';
import 'package:awale/ui/settings/theme_card.dart';


Original line number Original line Diff line number Diff line
import 'package:flutter/material.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_custom_toolbox/flutter_toolbox.dart';


import 'package:awale/cubit/theme_cubit.dart';
import 'package:awale/cubit/theme_cubit.dart';


Original line number Original line Diff line number Diff line
import 'package:flutter/material.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_custom_toolbox/flutter_toolbox.dart';


import 'package:awale/config/menu.dart';
import 'package:awale/config/menu.dart';
import 'package:awale/cubit/nav_cubit.dart';
import 'package:awale/cubit/nav_cubit.dart';
Original line number Original line Diff line number Diff line
import 'package:flutter/material.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_custom_toolbox/flutter_toolbox.dart';


import 'package:awale/cubit/game_cubit.dart';
import 'package:awale/cubit/game_cubit.dart';
import 'package:awale/ui/helpers/styled_button.dart';


class DeleteSavedGameButton extends StatelessWidget {
class DeleteSavedGameButton extends StatelessWidget {
  const DeleteSavedGameButton({super.key});
  const DeleteSavedGameButton({super.key});
Original line number Original line Diff line number Diff line
import 'package:flutter/material.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_custom_toolbox/flutter_toolbox.dart';


import 'package:awale/cubit/game_cubit.dart';
import 'package:awale/cubit/game_cubit.dart';
import 'package:awale/ui/helpers/styled_button.dart';


class QuitGameButton extends StatelessWidget {
class QuitGameButton extends StatelessWidget {
  const QuitGameButton({super.key});
  const QuitGameButton({super.key});
Original line number Original line Diff line number Diff line
import 'package:flutter/material.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_custom_toolbox/flutter_toolbox.dart';


import 'package:awale/cubit/game_cubit.dart';
import 'package:awale/cubit/game_cubit.dart';
import 'package:awale/cubit/settings_game_cubit.dart';
import 'package:awale/cubit/settings_game_cubit.dart';
import 'package:awale/cubit/settings_global_cubit.dart';
import 'package:awale/cubit/settings_global_cubit.dart';
import 'package:awale/ui/helpers/styled_button.dart';


class StartNewGameButton extends StatelessWidget {
class StartNewGameButton extends StatelessWidget {
  const StartNewGameButton({super.key});
  const StartNewGameButton({super.key});
Original line number Original line Diff line number Diff line
import 'package:flutter/material.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_custom_toolbox/flutter_toolbox.dart';


import 'package:awale/cubit/game_cubit.dart';
import 'package:awale/cubit/game_cubit.dart';
import 'package:awale/ui/helpers/styled_button.dart';


class ResumeSavedGameButton extends StatelessWidget {
class ResumeSavedGameButton extends StatelessWidget {
  const ResumeSavedGameButton({super.key});
  const ResumeSavedGameButton({super.key});
Original line number Original line Diff line number Diff line
import 'package:flutter/material.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_custom_toolbox/flutter_toolbox.dart';


import 'package:awale/cubit/game_cubit.dart';
import 'package:awale/cubit/game_cubit.dart';
import 'package:awale/ui/widgets/game/game_house.dart';
import 'package:awale/ui/widgets/game/game_house.dart';
Original line number Original line Diff line number Diff line
import 'package:flutter/material.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_custom_toolbox/flutter_toolbox.dart';


import 'package:awale/cubit/game_cubit.dart';
import 'package:awale/cubit/game_cubit.dart';
import 'package:awale/models/game/game.dart';
import 'package:awale/models/game/game.dart';
Original line number Original line Diff line number Diff line
import 'package:flutter/material.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_custom_toolbox/flutter_toolbox.dart';


import 'package:awale/cubit/game_cubit.dart';
import 'package:awale/cubit/game_cubit.dart';
import 'package:awale/models/game/game.dart';
import 'package:awale/models/game/game.dart';
import 'package:awale/ui/widgets/game/game_seeds.dart';
import 'package:awale/ui/widgets/game/game_seeds.dart';
import 'package:awale/utils/color_extensions.dart';


class GameHouseWidget extends StatelessWidget {
class GameHouseWidget extends StatelessWidget {
  const GameHouseWidget({
  const GameHouseWidget({
Original line number Original line Diff line number Diff line
import 'package:awale/utils/color_extensions.dart';
import 'package:flutter/material.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_custom_toolbox/flutter_toolbox.dart';


import 'package:awale/cubit/game_cubit.dart';
import 'package:awale/cubit/game_cubit.dart';
import 'package:awale/models/game/game.dart';
import 'package:awale/models/game/game.dart';
Original line number Original line Diff line number Diff line
import 'package:awale/utils/color_extensions.dart';
import 'package:flutter/material.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_custom_toolbox/flutter_toolbox.dart';


import 'package:awale/cubit/game_cubit.dart';
import 'package:awale/cubit/game_cubit.dart';
import 'package:awale/models/game/game.dart';
import 'package:awale/models/game/game.dart';
Original line number Original line Diff line number Diff line
import 'dart:math';
import 'dart:math';


import 'package:flutter/material.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_custom_toolbox/flutter_toolbox.dart';


import 'package:awale/cubit/game_cubit.dart';
import 'package:awale/cubit/game_cubit.dart';
import 'package:awale/models/game/game.dart';
import 'package:awale/models/game/game.dart';
Original line number Original line Diff line number Diff line
import 'package:flutter/material.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_custom_toolbox/flutter_toolbox.dart';


import 'package:awale/config/menu.dart';
import 'package:awale/config/menu.dart';
import 'package:awale/cubit/game_cubit.dart';
import 'package:awale/cubit/game_cubit.dart';
import 'package:awale/cubit/nav_cubit.dart';
import 'package:awale/cubit/nav_cubit.dart';
import 'package:awale/models/game/game.dart';
import 'package:awale/models/game/game.dart';
import 'package:awale/ui/helpers/app_titles.dart';
import 'package:awale/ui/helpers/styled_button.dart';


class GlobalAppBar extends StatelessWidget implements PreferredSizeWidget {
class GlobalAppBar extends StatelessWidget implements PreferredSizeWidget {
  const GlobalAppBar({super.key});
  const GlobalAppBar({super.key});
@@ -38,7 +36,7 @@ class GlobalAppBar extends StatelessWidget implements PreferredSizeWidget {
                // go to Settings page
                // go to Settings page
                menuActions.add(ElevatedButton(
                menuActions.add(ElevatedButton(
                  onPressed: () {
                  onPressed: () {
                    context.read<NavCubit>().goToSettingsPage();
                    BlocProvider.of<NavCubit>(context).goToSettingsPage();
                  },
                  },
                  style: ElevatedButton.styleFrom(
                  style: ElevatedButton.styleFrom(
                    shape: const CircleBorder(),
                    shape: const CircleBorder(),
@@ -49,7 +47,7 @@ class GlobalAppBar extends StatelessWidget implements PreferredSizeWidget {
                // go to About page
                // go to About page
                menuActions.add(ElevatedButton(
                menuActions.add(ElevatedButton(
                  onPressed: () {
                  onPressed: () {
                    context.read<NavCubit>().goToAboutPage();
                    BlocProvider.of<NavCubit>(context).goToAboutPage();
                  },
                  },
                  style: ElevatedButton.styleFrom(
                  style: ElevatedButton.styleFrom(
                    shape: const CircleBorder(),
                    shape: const CircleBorder(),
@@ -60,7 +58,7 @@ class GlobalAppBar extends StatelessWidget implements PreferredSizeWidget {
                // back to Home page
                // back to Home page
                menuActions.add(ElevatedButton(
                menuActions.add(ElevatedButton(
                  onPressed: () {
                  onPressed: () {
                    context.read<NavCubit>().goToGamePage();
                    BlocProvider.of<NavCubit>(context).goToGamePage();
                  },
                  },
                  style: ElevatedButton.styleFrom(
                  style: ElevatedButton.styleFrom(
                    shape: const CircleBorder(),
                    shape: const CircleBorder(),

lib/utils/color_extensions.dart

deleted100644 → 0
+0 −33
Original line number Original line Diff line number Diff line
import 'dart:ui';

extension ColorExtension on Color {
  Color darken([int percent = 40]) {
    assert(1 <= percent && percent <= 100);
    final value = 1 - percent / 100;
    return Color.fromARGB(
      alpha,
      (red * value).round(),
      (green * value).round(),
      (blue * value).round(),
    );
  }

  Color lighten([int percent = 40]) {
    assert(1 <= percent && percent <= 100);
    final value = percent / 100;
    return Color.fromARGB(
      alpha,
      (red + ((255 - red) * value)).round(),
      (green + ((255 - green) * value)).round(),
      (blue + ((255 - blue) * value)).round(),
    );
  }

  Color avg(Color other) {
    final red = (this.red + other.red) ~/ 2;
    final green = (this.green + other.green) ~/ 2;
    final blue = (this.blue + other.blue) ~/ 2;
    final alpha = (this.alpha + other.alpha) ~/ 2;
    return Color.fromARGB(alpha, red, green, blue);
  }
}

lib/utils/tools.dart

deleted100644 → 0
+0 −7
Original line number Original line Diff line number Diff line
import 'package:flutter/foundation.dart';

void printlog(String message) {
  if (!kReleaseMode) {
    debugPrint(message);
  }
}
+35 −26
Original line number Original line Diff line number Diff line
@@ -5,20 +5,20 @@ packages:
    dependency: transitive
    dependency: transitive
    description:
    description:
      name: args
      name: args
      sha256: "7cf60b9f0cc88203c5a190b4cd62a99feea42759a7fa695010eb5de1c0b2252a"
      sha256: bf9f5caeea8d8fe6721a9c358dd8a5c1947b27f1cfaa18b39c301273594919e6
      url: "https://pub.dev"
      url: "https://pub.dev"
    source: hosted
    source: hosted
    version: "2.5.0"
    version: "2.6.0"
  async:
  async:
    dependency: transitive
    dependency: transitive
    description:
    description:
      name: async
      name: async
      sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c"
      sha256: d2872f9c19731c2e5f10444b14686eb7cc85c76274bd6c16e1816bff9a3bab63
      url: "https://pub.dev"
      url: "https://pub.dev"
    source: hosted
    source: hosted
    version: "2.11.0"
    version: "2.12.0"
  auto_size_text:
  auto_size_text:
    dependency: "direct main"
    dependency: transitive
    description:
    description:
      name: auto_size_text
      name: auto_size_text
      sha256: "3f5261cd3fb5f2a9ab4e2fc3fba84fd9fcaac8821f20a1d4e71f557521b22599"
      sha256: "3f5261cd3fb5f2a9ab4e2fc3fba84fd9fcaac8821f20a1d4e71f557521b22599"
@@ -61,12 +61,12 @@ packages:
    dependency: transitive
    dependency: transitive
    description:
    description:
      name: crypto
      name: crypto
      sha256: ec30d999af904f33454ba22ed9a86162b35e52b44ac4807d1d93c288041d7d27
      sha256: "1e445881f28f22d6140f181e07737b22f1e099a5e1ff94b0af2f9e4a463f4855"
      url: "https://pub.dev"
      url: "https://pub.dev"
    source: hosted
    source: hosted
    version: "3.0.5"
    version: "3.0.6"
  easy_localization:
  easy_localization:
    dependency: "direct main"
    dependency: transitive
    description:
    description:
      name: easy_localization
      name: easy_localization
      sha256: fa59bcdbbb911a764aa6acf96bbb6fa7a5cf8234354fc45ec1a43a0349ef0201
      sha256: fa59bcdbbb911a764aa6acf96bbb6fa7a5cf8234354fc45ec1a43a0349ef0201
@@ -82,7 +82,7 @@ packages:
    source: hosted
    source: hosted
    version: "0.0.2"
    version: "0.0.2"
  equatable:
  equatable:
    dependency: "direct main"
    dependency: transitive
    description:
    description:
      name: equatable
      name: equatable
      sha256: c2b87cb7756efdf69892005af546c56c0b5037f54d2a88269b4f347a505e3ca2
      sha256: c2b87cb7756efdf69892005af546c56c0b5037f54d2a88269b4f347a505e3ca2
@@ -111,13 +111,22 @@ packages:
    source: sdk
    source: sdk
    version: "0.0.0"
    version: "0.0.0"
  flutter_bloc:
  flutter_bloc:
    dependency: "direct main"
    dependency: transitive
    description:
    description:
      name: flutter_bloc
      name: flutter_bloc
      sha256: b594505eac31a0518bdcb4b5b79573b8d9117b193cc80cc12e17d639b10aa27a
      sha256: b594505eac31a0518bdcb4b5b79573b8d9117b193cc80cc12e17d639b10aa27a
      url: "https://pub.dev"
      url: "https://pub.dev"
    source: hosted
    source: hosted
    version: "8.1.6"
    version: "8.1.6"
  flutter_custom_toolbox:
    dependency: "direct main"
    description:
      path: "."
      ref: "0.1.1"
      resolved-ref: ba7137ca9edec7e503ed3dbfe7f6ede7e9cfbf4d
      url: "https://git.harrault.fr/android/flutter-toolbox.git"
    source: git
    version: "0.1.1"
  flutter_lints:
  flutter_lints:
    dependency: "direct dev"
    dependency: "direct dev"
    description:
    description:
@@ -137,7 +146,7 @@ packages:
    source: sdk
    source: sdk
    version: "0.0.0"
    version: "0.0.0"
  hive:
  hive:
    dependency: "direct main"
    dependency: transitive
    description:
    description:
      name: hive
      name: hive
      sha256: "8dcf6db979d7933da8217edcec84e9df1bdb4e4edc7fc77dbd5aa74356d6d941"
      sha256: "8dcf6db979d7933da8217edcec84e9df1bdb4e4edc7fc77dbd5aa74356d6d941"
@@ -161,7 +170,7 @@ packages:
    source: hosted
    source: hosted
    version: "4.0.2"
    version: "4.0.2"
  hydrated_bloc:
  hydrated_bloc:
    dependency: "direct main"
    dependency: transitive
    description:
    description:
      name: hydrated_bloc
      name: hydrated_bloc
      sha256: af35b357739fe41728df10bec03aad422cdc725a1e702e03af9d2a41ea05160c
      sha256: af35b357739fe41728df10bec03aad422cdc725a1e702e03af9d2a41ea05160c
@@ -209,13 +218,13 @@ packages:
    source: hosted
    source: hosted
    version: "1.0.0"
    version: "1.0.0"
  package_info_plus:
  package_info_plus:
    dependency: "direct main"
    dependency: transitive
    description:
    description:
      name: package_info_plus
      name: package_info_plus
      sha256: "894f37107424311bdae3e476552229476777b8752c5a2a2369c0cb9a2d5442ef"
      sha256: df3eb3e0aed5c1107bb0fdb80a8e82e778114958b1c5ac5644fb1ac9cae8a998
      url: "https://pub.dev"
      url: "https://pub.dev"
    source: hosted
    source: hosted
    version: "8.0.3"
    version: "8.1.0"
  package_info_plus_platform_interface:
  package_info_plus_platform_interface:
    dependency: transitive
    dependency: transitive
    description:
    description:
@@ -233,7 +242,7 @@ packages:
    source: hosted
    source: hosted
    version: "1.9.0"
    version: "1.9.0"
  path_provider:
  path_provider:
    dependency: "direct main"
    dependency: transitive
    description:
    description:
      name: path_provider
      name: path_provider
      sha256: fec0d61223fba3154d87759e3cc27fe2c8dc498f6386c6d6fc80d1afdd1bf378
      sha256: fec0d61223fba3154d87759e3cc27fe2c8dc498f6386c6d6fc80d1afdd1bf378
@@ -284,10 +293,10 @@ packages:
    dependency: transitive
    dependency: transitive
    description:
    description:
      name: platform
      name: platform
      sha256: "9b71283fc13df574056616011fb138fd3b793ea47cc509c189a6c3fa5f8a1a65"
      sha256: "5d6b1b0036a5f331ebc77c850ebc8506cbc1e9416c27e59b439f917a902a4984"
      url: "https://pub.dev"
      url: "https://pub.dev"
    source: hosted
    source: hosted
    version: "3.1.5"
    version: "3.1.6"
  plugin_platform_interface:
  plugin_platform_interface:
    dependency: transitive
    dependency: transitive
    description:
    description:
@@ -377,10 +386,10 @@ packages:
    dependency: transitive
    dependency: transitive
    description:
    description:
      name: string_scanner
      name: string_scanner
      sha256: "688af5ed3402a4bde5b3a6c15fd768dbf2621a614950b17f04626c431ab3c4c3"
      sha256: "0bd04f5bb74fcd6ff0606a888a30e917af9bd52820b178eaa464beb11dca84b6"
      url: "https://pub.dev"
      url: "https://pub.dev"
    source: hosted
    source: hosted
    version: "1.3.0"
    version: "1.4.0"
  synchronized:
  synchronized:
    dependency: transitive
    dependency: transitive
    description:
    description:
@@ -401,12 +410,12 @@ packages:
    dependency: transitive
    dependency: transitive
    description:
    description:
      name: typed_data
      name: typed_data
      sha256: facc8d6582f16042dd49f2463ff1bd6e2c9ef9f3d5da3d9b087e244a7b564b3c
      sha256: f9049c039ebfeb4cf7a7104a675823cd72dba8297f264b6637062516699fa006
      url: "https://pub.dev"
      url: "https://pub.dev"
    source: hosted
    source: hosted
    version: "1.3.2"
    version: "1.4.0"
  unicons:
  unicons:
    dependency: "direct main"
    dependency: transitive
    description:
    description:
      name: unicons
      name: unicons
      sha256: f3eab9d87c226415ef857cfd2167e1d12ad81ea1f5783b46cf644224fea4eab7
      sha256: f3eab9d87c226415ef857cfd2167e1d12ad81ea1f5783b46cf644224fea4eab7
@@ -433,10 +442,10 @@ packages:
    dependency: transitive
    dependency: transitive
    description:
    description:
      name: win32
      name: win32
      sha256: "4d45dc9069dba4619dc0ebd93c7cec5e66d8482cb625a370ac806dcc8165f2ec"
      sha256: "2735daae5150e8b1dfeb3eb0544b4d3af0061e9e82cef063adcd583bdae4306a"
      url: "https://pub.dev"
      url: "https://pub.dev"
    source: hosted
    source: hosted
    version: "5.5.5"
    version: "5.7.0"
  xdg_directories:
  xdg_directories:
    dependency: transitive
    dependency: transitive
    description:
    description:
@@ -446,5 +455,5 @@ packages:
    source: hosted
    source: hosted
    version: "1.1.0"
    version: "1.1.0"
sdks:
sdks:
  dart: ">=3.5.0 <4.0.0"
  dart: ">=3.5.3 <4.0.0"
  flutter: ">=3.24.0"
  flutter: ">=3.24.0"
+5 −22
Original line number Original line Diff line number Diff line
@@ -3,7 +3,7 @@ description: Awale game


publish_to: "none"
publish_to: "none"


version: 0.1.1+13
version: 0.2.0+14


environment:
environment:
  sdk: "^3.0.0"
  sdk: "^3.0.0"
@@ -13,15 +13,10 @@ dependencies:
    sdk: flutter
    sdk: flutter


  # base
  # base
  auto_size_text: ^3.0.0
  flutter_custom_toolbox:
  easy_localization: ^3.0.1
    git:
  equatable: ^2.0.5
      url: https://git.harrault.fr/android/flutter-toolbox.git
  flutter_bloc: ^8.1.1
      ref: 0.1.1
  hive: ^2.2.3
  hydrated_bloc: ^9.0.0
  package_info_plus: ^8.0.0
  path_provider: ^2.0.11
  unicons: ^3.0.0


  # specific
  # specific
  # (none)
  # (none)
@@ -35,15 +30,3 @@ flutter:
    - assets/skins/
    - assets/skins/
    - assets/translations/
    - assets/translations/
    - assets/ui/
    - assets/ui/

  fonts:
    - family: Nunito
      fonts:
        - asset: assets/fonts/Nunito-Bold.ttf
          weight: 700
        - asset: assets/fonts/Nunito-Medium.ttf
          weight: 500
        - asset: assets/fonts/Nunito-Regular.ttf
          weight: 400
        - asset: assets/fonts/Nunito-Light.ttf
          weight: 300