Updated and added comments
This commit is contained in:
@@ -1,11 +1,11 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:skeletonizer/skeletonizer.dart';
|
||||
|
||||
/// A widget that provides a skeleton loading effect to its child widget tree.
|
||||
/// - [child]: The widget tree to apply the skeleton effect to.
|
||||
/// - [enabled]: A boolean to enable or disable the skeleton effect.
|
||||
/// - [fixLayoutBuilder]: A boolean to fix the layout builder for AnimatedSwitcher.
|
||||
class AppSkeleton extends StatefulWidget {
|
||||
/// A widget that provides a skeleton loading effect to its child widget tree.
|
||||
/// - [child]: The widget tree to apply the skeleton effect to.
|
||||
/// - [enabled]: A boolean to enable or disable the skeleton effect.
|
||||
/// - [fixLayoutBuilder]: A boolean to fix the layout builder for AnimatedSwitcher.
|
||||
const AppSkeleton({
|
||||
super.key,
|
||||
required this.child,
|
||||
|
||||
@@ -2,13 +2,13 @@ import 'package:flutter/material.dart';
|
||||
import 'package:game_tracker/core/custom_theme.dart';
|
||||
import 'package:game_tracker/core/enums.dart';
|
||||
|
||||
/// A custom button widget that is designed to have a width relative to the screen size.
|
||||
/// It supports three types of buttons: primary, secondary, and text buttons.
|
||||
/// - [text]: The text to display on the button.
|
||||
/// - [buttonType]: The type of button to display. Defaults to [ButtonType.primary].
|
||||
/// - [sizeRelativeToWidth]: The size of the button relative to the width of the screen.
|
||||
/// - [onPressed]: The callback to be invoked when the button is pressed.
|
||||
class CustomWidthButton extends StatelessWidget {
|
||||
/// A custom button widget that is designed to have a width relative to the screen size.
|
||||
/// It supports three types of buttons: primary, secondary, and text buttons.
|
||||
/// - [text]: The text to display on the button.
|
||||
/// - [buttonType]: The type of button to display. Defaults to [ButtonType.primary].
|
||||
/// - [sizeRelativeToWidth]: The size of the button relative to the width of the screen.
|
||||
/// - [onPressed]: The callback to be invoked when the button is pressed.
|
||||
const CustomWidthButton({
|
||||
super.key,
|
||||
required this.text,
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
/// A button for the main menu with an optional icon and a press animation.
|
||||
/// - [text]: The text of the button.
|
||||
/// - [icon]: The icon of the button.
|
||||
/// - [onPressed]: The callback to be invoked when the button is pressed.
|
||||
class MainMenuButton extends StatefulWidget {
|
||||
/// A button for the main menu with an optional icon and a press animation.
|
||||
/// - [text]: The text of the button.
|
||||
/// - [icon]: The icon of the button.
|
||||
/// - [onPressed]: The callback to be invoked when the button is pressed.
|
||||
const MainMenuButton({
|
||||
super.key,
|
||||
required this.text,
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:game_tracker/core/custom_theme.dart';
|
||||
|
||||
/// A button widget designed for quick creating matches in the [HomeView]
|
||||
/// - [text]: The text to display on the button.
|
||||
/// - [onPressed]: The callback to be invoked when the button is pressed.
|
||||
class QuickCreateButton extends StatefulWidget {
|
||||
/// A button widget designed for quick creating matches in the [HomeView]
|
||||
/// - [text]: The text to display on the button.
|
||||
/// - [onPressed]: The callback to be invoked when the button is pressed.
|
||||
const QuickCreateButton({
|
||||
super.key,
|
||||
required this.text,
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:game_tracker/core/custom_theme.dart';
|
||||
|
||||
/// A navigation bar item widget that represents a single tab in a navigation bar.
|
||||
/// - [index]: The index of the tab.
|
||||
/// - [isSelected]: A boolean indicating whether the tab is currently selected.
|
||||
/// - [icon]: The icon to display for the tab.
|
||||
/// - [label]: The label to display for the tab.
|
||||
/// - [onTabTapped]: The callback to be invoked when the tab is tapped.
|
||||
class NavbarItem extends StatefulWidget {
|
||||
/// A navigation bar item widget that represents a single tab in a navigation bar.
|
||||
/// - [index]: The index of the tab.
|
||||
/// - [isSelected]: A boolean indicating whether the tab is currently selected.
|
||||
/// - [icon]: The icon to display for the tab.
|
||||
/// - [label]: The label to display for the tab.
|
||||
/// - [onTabTapped]: The callback to be invoked when the tab is tapped.
|
||||
const NavbarItem({
|
||||
super.key,
|
||||
required this.index,
|
||||
|
||||
@@ -11,14 +11,14 @@ import 'package:game_tracker/presentation/widgets/tiles/text_icon_tile.dart';
|
||||
import 'package:game_tracker/presentation/widgets/top_centered_message.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
/// A widget that allows users to select players from a list,
|
||||
/// with search functionality and the ability to add new players.
|
||||
/// - [availablePlayers]: An optional list of players to choose from. If null, all
|
||||
/// players from the database are used.
|
||||
/// - [initialSelectedPlayers]: An optional list of players that should be pre-selected.
|
||||
/// - [onChanged]: A callback function that is invoked whenever the selection changes,
|
||||
/// providing the updated list of selected players.
|
||||
class PlayerSelection extends StatefulWidget {
|
||||
/// A widget that allows users to select players from a list,
|
||||
/// with search functionality and the ability to add new players.
|
||||
/// - [availablePlayers]: An optional list of players to choose from. If null,
|
||||
/// all players from the database are used.
|
||||
/// - [initialSelectedPlayers]: An optional list of players that should be pre-selected.
|
||||
/// - [onChanged]: A callback function that is invoked whenever the selection
|
||||
/// changes, providing the updated list of selected players.
|
||||
const PlayerSelection({
|
||||
super.key,
|
||||
this.availablePlayers,
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:game_tracker/core/custom_theme.dart';
|
||||
|
||||
/// A custom search bar widget that encapsulates a [SearchBar] with additional customization options.
|
||||
/// - [controller]: The controller for the search bar's text input.
|
||||
/// - [hintText]: The hint text displayed in the search bar when it is empty.
|
||||
/// - [trailingButtonShown]: Whether to show the trailing button.
|
||||
/// - [trailingButtonicon]: The icon for the trailing button.
|
||||
/// - [trailingButtonEnabled]: Whether the trailing button is in enabled state.
|
||||
/// - [onTrailingButtonPressed]: The callback invoked when the trailing button is pressed.
|
||||
/// - [onChanged]: The callback invoked when the text in the search bar changes.
|
||||
/// - [constraints]: The constraints for the search bar.
|
||||
class CustomSearchBar extends StatelessWidget {
|
||||
/// A custom search bar widget that encapsulates a [SearchBar] with additional customization options.
|
||||
/// - [controller]: The controller for the search bar's text input.
|
||||
/// - [hintText]: The hint text displayed in the search bar when it is empty.
|
||||
/// - [trailingButtonShown]: Whether to show the trailing button.
|
||||
/// - [trailingButtonicon]: The icon for the trailing button.
|
||||
/// - [trailingButtonEnabled]: Whether the trailing button is in enabled state.
|
||||
/// - [onTrailingButtonPressed]: The callback invoked when the trailing button is pressed.
|
||||
/// - [onChanged]: The callback invoked when the text in the search bar changes.
|
||||
/// - [constraints]: The constraints for the search bar.
|
||||
const CustomSearchBar({
|
||||
super.key,
|
||||
required this.controller,
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:game_tracker/core/custom_theme.dart';
|
||||
|
||||
/// A custom text input field widget that encapsulates a [TextField] with specific styling.
|
||||
/// - [controller]: The controller for the text input field.
|
||||
/// - [onChanged]: The callback invoked when the text in the field changes.
|
||||
/// - [hintText]: The hint text displayed in the text input field when it is empty
|
||||
class TextInputField extends StatelessWidget {
|
||||
/// A custom text input field widget that encapsulates a [TextField] with specific styling.
|
||||
/// - [controller]: The controller for the text input field.
|
||||
/// - [onChanged]: The callback invoked when the text in the field changes.
|
||||
/// - [hintText]: The hint text displayed in the text input field when it is empty
|
||||
const TextInputField({
|
||||
super.key,
|
||||
required this.controller,
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:game_tracker/core/custom_theme.dart';
|
||||
|
||||
/// A tile widget that allows users to choose an option by tapping on it.
|
||||
/// - [title]: The title text displayed on the tile.
|
||||
/// - [trailingText]: Optional trailing text displayed on the tile.
|
||||
/// - [onPressed]: The callback invoked when the tile is tapped.
|
||||
class ChooseTile extends StatefulWidget {
|
||||
/// A tile widget that allows users to choose an option by tapping on it.
|
||||
/// - [title]: The title text displayed on the tile.
|
||||
/// - [trailingText]: Optional trailing text displayed on the tile.
|
||||
/// - [onPressed]: The callback invoked when the tile is tapped.
|
||||
const ChooseTile({
|
||||
super.key,
|
||||
required this.title,
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:game_tracker/core/custom_theme.dart';
|
||||
|
||||
/// A custom radio list tile widget that encapsulates a [Radio] button with additional styling and functionality.
|
||||
/// - [text]: The text to display next to the radio button.
|
||||
/// - [value]: The value associated with the radio button.
|
||||
/// - [onContainerTap]: The callback invoked when the container is tapped.
|
||||
class CustomRadioListTile<T> extends StatelessWidget {
|
||||
/// A custom radio list tile widget that encapsulates a [Radio] button with additional styling and functionality.
|
||||
/// - [text]: The text to display next to the radio button.
|
||||
/// - [value]: The value associated with the radio button.
|
||||
/// - [onContainerTap]: The callback invoked when the container is tapped.
|
||||
const CustomRadioListTile({
|
||||
super.key,
|
||||
required this.text,
|
||||
|
||||
@@ -3,10 +3,10 @@ import 'package:game_tracker/core/custom_theme.dart';
|
||||
import 'package:game_tracker/data/dto/group.dart';
|
||||
import 'package:game_tracker/presentation/widgets/tiles/text_icon_tile.dart';
|
||||
|
||||
/// A tile widget that displays information about a group, including its name and members.
|
||||
/// - [group]: The group data to be displayed.
|
||||
/// - [isHighlighted]: Whether the tile should be highlighted.
|
||||
class GroupTile extends StatelessWidget {
|
||||
/// A tile widget that displays information about a group, including its name and members.
|
||||
/// - [group]: The group data to be displayed.
|
||||
/// - [isHighlighted]: Whether the tile should be highlighted.
|
||||
const GroupTile({super.key, required this.group, this.isHighlighted = false});
|
||||
|
||||
/// The group data to be displayed.
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:game_tracker/core/custom_theme.dart';
|
||||
|
||||
/// A tile widget that displays a title with an icon and some content below it.
|
||||
/// - [title]: The title text displayed on the tile.
|
||||
/// - [icon]: The icon displayed next to the title.
|
||||
/// - [content]: The content widget displayed below the title.
|
||||
/// - [padding]: Optional padding for the tile content.
|
||||
/// - [height]: Optional height for the tile.
|
||||
/// - [width]: Optional width for the tile.
|
||||
class InfoTile extends StatefulWidget {
|
||||
/// A tile widget that displays a title with an icon and some content below it.
|
||||
/// - [title]: The title text displayed on the tile.
|
||||
/// - [icon]: The icon displayed next to the title.
|
||||
/// - [content]: The content widget displayed below the title.
|
||||
/// - [padding]: Optional padding for the tile content.
|
||||
/// - [height]: Optional height for the tile.
|
||||
/// - [width]: Optional width for the tile.
|
||||
const InfoTile({
|
||||
super.key,
|
||||
required this.title,
|
||||
|
||||
@@ -4,10 +4,13 @@ import 'package:game_tracker/presentation/views/main_menu/settings_view/licenses
|
||||
import 'package:game_tracker/presentation/views/main_menu/settings_view/licenses/oss_licenses.dart';
|
||||
|
||||
class LicenseTile extends StatelessWidget {
|
||||
final Package package;
|
||||
|
||||
/// A tile widget that displays information about a software package license.
|
||||
/// - [package]: The package data to be displayed.
|
||||
const LicenseTile({super.key, required this.package});
|
||||
|
||||
/// The package data to be displayed.
|
||||
final Package package;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return GestureDetector(
|
||||
|
||||
@@ -1,95 +0,0 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:game_tracker/core/custom_theme.dart';
|
||||
import 'package:skeletonizer/skeletonizer.dart';
|
||||
|
||||
class MatchSummaryTile extends StatefulWidget {
|
||||
final String matchTitle;
|
||||
final String game;
|
||||
final String ruleset;
|
||||
final String players;
|
||||
final String winner;
|
||||
|
||||
const MatchSummaryTile({
|
||||
super.key,
|
||||
required this.matchTitle,
|
||||
required this.game,
|
||||
required this.ruleset,
|
||||
required this.players,
|
||||
required this.winner,
|
||||
});
|
||||
|
||||
@override
|
||||
State<MatchSummaryTile> createState() => _MatchSummaryTileState();
|
||||
}
|
||||
|
||||
class _MatchSummaryTileState extends State<MatchSummaryTile> {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Row(
|
||||
children: [
|
||||
Text(
|
||||
widget.matchTitle,
|
||||
style: const TextStyle(fontSize: 18, fontWeight: FontWeight.bold),
|
||||
),
|
||||
const SizedBox(width: 5),
|
||||
Text(
|
||||
widget.game,
|
||||
style: const TextStyle(fontSize: 14, color: Colors.grey),
|
||||
),
|
||||
],
|
||||
),
|
||||
const SizedBox(height: 5),
|
||||
Container(
|
||||
padding: const EdgeInsets.symmetric(horizontal: 4),
|
||||
height: 20,
|
||||
decoration: BoxDecoration(
|
||||
borderRadius: BorderRadius.circular(4),
|
||||
color: CustomTheme.primaryColor,
|
||||
),
|
||||
child: Skeleton.ignore(
|
||||
child: Text(
|
||||
widget.ruleset,
|
||||
style: const TextStyle(fontWeight: FontWeight.bold),
|
||||
),
|
||||
),
|
||||
),
|
||||
Center(
|
||||
heightFactor: 1.5,
|
||||
child: Text(
|
||||
widget.players,
|
||||
style: const TextStyle(fontWeight: FontWeight.bold),
|
||||
),
|
||||
),
|
||||
Center(
|
||||
child: Container(
|
||||
padding: const EdgeInsets.symmetric(horizontal: 4),
|
||||
width: 220,
|
||||
decoration: BoxDecoration(
|
||||
borderRadius: BorderRadius.circular(4),
|
||||
color: Colors.yellow.shade300,
|
||||
),
|
||||
child: Skeleton.ignore(
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
const Icon(Icons.emoji_events, color: Colors.black, size: 20),
|
||||
Text(
|
||||
widget.winner,
|
||||
textAlign: TextAlign.center,
|
||||
style: const TextStyle(
|
||||
fontWeight: FontWeight.bold,
|
||||
color: Colors.black87,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -6,13 +6,13 @@ import 'package:game_tracker/l10n/generated/app_localizations.dart';
|
||||
import 'package:game_tracker/presentation/widgets/tiles/text_icon_tile.dart';
|
||||
import 'package:intl/intl.dart';
|
||||
|
||||
/// A tile widget that displays information about a match, including its name,
|
||||
/// creation date, associated group, winner, and players.
|
||||
/// - [match]: The match data to be displayed.
|
||||
/// - [onTap]: The callback invoked when the tile is tapped.
|
||||
/// - [width]: Optional width for the tile.
|
||||
/// - [compact]: Whether to display the tile in a compact mode
|
||||
class MatchTile extends StatefulWidget {
|
||||
/// A tile widget that displays information about a match, including its name,
|
||||
/// creation date, associated group, winner, and players.
|
||||
/// - [match]: The match data to be displayed.
|
||||
/// - [onTap]: The callback invoked when the tile is tapped.
|
||||
/// - [width]: Optional width for the tile.
|
||||
/// - [compact]: Whether to display the tile in a compact mode
|
||||
const MatchTile({
|
||||
super.key,
|
||||
required this.match,
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:game_tracker/core/custom_theme.dart';
|
||||
|
||||
/// A tile widget that displays a title with an icon and a numeric value below it.
|
||||
/// - [title]: The title text displayed on the tile.
|
||||
/// - [icon]: The icon displayed next to the title.
|
||||
/// - [value]: The numeric value displayed below the title.
|
||||
/// - [height]: Optional height for the tile.
|
||||
/// - [width]: Optional width for the tile.
|
||||
/// - [padding]: Optional padding for the tile content.
|
||||
class QuickInfoTile extends StatefulWidget {
|
||||
/// A tile widget that displays a title with an icon and a numeric value below it.
|
||||
/// - [title]: The title text displayed on the tile.
|
||||
/// - [icon]: The icon displayed next to the title.
|
||||
/// - [value]: The numeric value displayed below the title.
|
||||
/// - [height]: Optional height for the tile.
|
||||
/// - [width]: Optional width for the tile.
|
||||
/// - [padding]: Optional padding for the tile content.
|
||||
const QuickInfoTile({
|
||||
super.key,
|
||||
required this.title,
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:game_tracker/core/custom_theme.dart';
|
||||
|
||||
/// A customizable settings list tile widget that displays an icon, title, and an optional suffix widget.
|
||||
/// - [icon]: The icon displayed on the left side of the tile.
|
||||
/// - [title]: The title text displayed next to the icon.
|
||||
/// - [suffixWidget]: An optional widget displayed on the right side of the tile.
|
||||
/// - [onPressed]: The callback invoked when the tile is tapped.
|
||||
class SettingsListTile extends StatelessWidget {
|
||||
/// A customizable settings list tile widget that displays an icon, title, and an optional suffix widget.
|
||||
/// - [icon]: The icon displayed on the left side of the tile.
|
||||
/// - [title]: The title text displayed next to the icon.
|
||||
/// - [suffixWidget]: An optional widget displayed on the right side of the tile.
|
||||
/// - [onPressed]: The callback invoked when the tile is tapped.
|
||||
const SettingsListTile({
|
||||
super.key,
|
||||
required this.icon,
|
||||
|
||||
@@ -4,14 +4,14 @@ import 'package:flutter/material.dart';
|
||||
import 'package:game_tracker/l10n/generated/app_localizations.dart';
|
||||
import 'package:game_tracker/presentation/widgets/tiles/info_tile.dart';
|
||||
|
||||
/// A tile widget that displays statistical data using horizontal bars.
|
||||
/// - [icon]: The icon displayed next to the title.
|
||||
/// - [title]: The title text displayed on the tile.
|
||||
/// - [width]: The width of the tile.
|
||||
/// - [values]: A list of tuples containing labels and their corresponding numeric values.
|
||||
/// - [itemCount]: The maximum number of items to display.
|
||||
/// - [barColor]: The color of the bars representing the values.
|
||||
class StatisticsTile extends StatelessWidget {
|
||||
/// A tile widget that displays statistical data using horizontal bars.
|
||||
/// - [icon]: The icon displayed next to the title.
|
||||
/// - [title]: The title text displayed on the tile.
|
||||
/// - [width]: The width of the tile.
|
||||
/// - [values]: A list of tuples containing labels and their corresponding numeric values.
|
||||
/// - [itemCount]: The maximum number of items to display.
|
||||
/// - [barColor]: The color of the bars representing the values.
|
||||
const StatisticsTile({
|
||||
super.key,
|
||||
required this.icon,
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:game_tracker/core/custom_theme.dart';
|
||||
|
||||
/// A list tile widget that displays text with an optional icon button.
|
||||
/// - [text]: The text to display in the tile.
|
||||
/// - [onPressed]: The callback to be invoked when the icon is pressed.
|
||||
/// - [iconEnabled]: A boolean to determine if the icon should be displayed.
|
||||
class TextIconListTile extends StatelessWidget {
|
||||
/// A list tile widget that displays text with an optional icon button.
|
||||
/// - [text]: The text to display in the tile.
|
||||
/// - [onPressed]: The callback to be invoked when the icon is pressed.
|
||||
/// - [iconEnabled]: A boolean to determine if the icon should be displayed.
|
||||
const TextIconListTile({
|
||||
super.key,
|
||||
required this.text,
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:game_tracker/core/custom_theme.dart';
|
||||
|
||||
/// A tile widget that displays text with an optional icon that can be tapped.
|
||||
/// - [text]: The text to display in the tile.
|
||||
/// - [iconEnabled]: A boolean to determine if the icon should be displayed.
|
||||
/// - [onIconTap]: The callback to be invoked when the icon is tapped.
|
||||
class TextIconTile extends StatelessWidget {
|
||||
/// A tile widget that displays text with an optional icon that can be tapped.
|
||||
/// - [text]: The text to display in the tile.
|
||||
/// - [iconEnabled]: A boolean to determine if the icon should be displayed.
|
||||
/// - [onIconTap]: The callback to be invoked when the icon is tapped.
|
||||
const TextIconTile({
|
||||
super.key,
|
||||
required this.text,
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:game_tracker/core/custom_theme.dart';
|
||||
|
||||
/// A list tile widget that displays a title and description, with optional highlighting and badge.
|
||||
/// - [title]: The title text displayed on the tile.
|
||||
/// - [description]: The description text displayed below the title.
|
||||
/// - [onPressed]: The callback invoked when the tile is tapped.
|
||||
/// - [isHighlighted]: A boolean to determine if the tile should be highlighted.
|
||||
/// - [badgeText]: Optional text to display in a badge on the right side of the title.
|
||||
/// - [badgeColor]: Optional color for the badge background.
|
||||
class TitleDescriptionListTile extends StatelessWidget {
|
||||
/// A list tile widget that displays a title and description, with optional highlighting and badge.
|
||||
/// - [title]: The title text displayed on the tile.
|
||||
/// - [description]: The description text displayed below the title.
|
||||
/// - [onPressed]: The callback invoked when the tile is tapped.
|
||||
/// - [isHighlighted]: A boolean to determine if the tile should be highlighted.
|
||||
/// - [badgeText]: Optional text to display in a badge on the right side of the title.
|
||||
/// - [badgeColor]: Optional color for the badge background.
|
||||
const TitleDescriptionListTile({
|
||||
super.key,
|
||||
required this.title,
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
/// A widget that displays a message centered at the top of the screen with an icon, title, and message.
|
||||
/// - [icon]: The icon to display above the title.
|
||||
/// - [title]: The title text to display.
|
||||
/// - [message]: The message text to display below the title.
|
||||
class TopCenteredMessage extends StatelessWidget {
|
||||
/// A widget that displays a message centered at the top of the screen with an icon, title, and message.
|
||||
/// - [icon]: The icon to display above the title.
|
||||
/// - [title]: The title text to display.
|
||||
/// - [message]: The message text to display below the title.
|
||||
const TopCenteredMessage({
|
||||
super.key,
|
||||
required this.icon,
|
||||
|
||||
Reference in New Issue
Block a user