Commit cc1f4c41 authored by Nina Rybárová's avatar Nina Rybárová
Browse files

added common utilities

parent 36de9b34
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
import 'package:flutter/material.dart';

const LARGE_UI_GAP = 20.0;
const STANDARD_UI_GAP = 16.0;
const SMALLER_UI_GAP = 8.0;

const APP_BAR_ACTION_PADDING = EdgeInsets.only(right: LARGE_UI_GAP);
const PAGE_PADDING = EdgeInsets.only(left: LARGE_UI_GAP, right: LARGE_UI_GAP);

const STANDARD_GAP = SizedBox(width: STANDARD_UI_GAP, height: STANDARD_UI_GAP);
const SMALLER_GAP = SizedBox(width: SMALLER_UI_GAP, height: SMALLER_UI_GAP);
+5 −0
Original line number Diff line number Diff line
import 'package:flutter/material.dart';

const MUTED_COLOR = Color(0xFF644E97);
const FIELD_COLOR = Color(0xFFEBE7F3);
const PRIMARY_COLOR = Color(0xFF7847EB);
+46 −0
Original line number Diff line number Diff line
import 'dart:async';

import 'package:adnotes/common/widget/styled_button.dart';
import 'package:flutter/material.dart';

class ConfirmableDialog extends StatelessWidget {
  final String title;
  final String description;
  final String confirmButtonTitle;
  final FutureOr<void> Function() onConfirmPressed;
  const ConfirmableDialog({
    super.key,
    required this.title,
    required this.onConfirmPressed,
    required this.description,
    required this.confirmButtonTitle,
  });

  @override
  Widget build(BuildContext context) {
    return AlertDialog(
      title: Text(title, textAlign: TextAlign.center),
      content: Padding(
        padding: EdgeInsets.symmetric(vertical: 8.0),
        child: Text(description, textAlign: TextAlign.center),
      ),
      actions: [
        Row(
          mainAxisAlignment: MainAxisAlignment.spaceBetween,
          children: [
            TextButton(
              onPressed: () => Navigator.of(context).pop(),
              child: const Text('Cancel'),
            ),
            StyledButton(
              title: confirmButtonTitle,
              onConfirmPressed: () async {
                await onConfirmPressed.call();
              },
            ),
          ],
        ),
      ],
    );
  }
}
+39 −0
Original line number Diff line number Diff line
import 'package:adnotes/common/util/constants.dart';
import 'package:flutter/material.dart';

class PageTemplate extends StatelessWidget {
  final String title;
  final Widget? floatingActionButton;
  final Widget? appBarAction;
  final Widget child;

  const PageTemplate({
    super.key,
    this.title = 'AdNotes',
    this.floatingActionButton,
    this.appBarAction,
    required this.child,
  });

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(title),
        centerTitle: true,
        actions: appBarAction != null ? [_buildAppBarAction(appBarAction!)] : null,
      ),
      floatingActionButton: floatingActionButton,
      body: SafeArea(
        child: Padding(padding: PAGE_PADDING, child: child),
      ),
    );
  }

  Widget _buildAppBarAction(Widget child) {
    return Padding(
      padding: APP_BAR_ACTION_PADDING,
      child: child,
    );
  }
}
+28 −0
Original line number Diff line number Diff line
import 'dart:async';

import 'package:adnotes/common/util/theme_colors.dart';
import 'package:flutter/material.dart';

class StyledButton extends StatelessWidget {
  final String title;
  final Color? titleTextColor;
  final FutureOr<void> Function() onConfirmPressed;

  const StyledButton({super.key, required this.title, required this.onConfirmPressed, this.titleTextColor});

  @override
  Widget build(BuildContext context) {
    return FilledButton(
      style: FilledButton.styleFrom(
        backgroundColor: PRIMARY_COLOR,
        foregroundColor: titleTextColor ?? FIELD_COLOR,
        textStyle: const TextStyle(fontSize: 16),
        shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(12)),
      ),
      onPressed: () async {
        await onConfirmPressed.call();
      },
      child: Text(title),
    );
  }
}