update icon

This commit is contained in:
Phuoc Nguyen
2025-11-14 18:02:37 +07:00
parent aae3c9d080
commit b5f90c364d
54 changed files with 534 additions and 245 deletions

View File

@@ -5,6 +5,7 @@
library;
import 'package:flutter/material.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
import 'package:go_router/go_router.dart';
import 'package:worker/core/constants/ui_constants.dart';
import 'package:worker/core/router/app_router.dart';
@@ -162,7 +163,7 @@ class _BusinessUnitSelectionPageState extends State<BusinessUnitSelectionPage> {
backgroundColor: AppColors.white,
elevation: AppBarSpecs.elevation,
leading: IconButton(
icon: const Icon(Icons.arrow_back, color: Colors.black),
icon: const FaIcon(FontAwesomeIcons.arrowLeft, color: Colors.black, size: 20),
onPressed: () => context.pop(),
),
title: const Text(
@@ -176,7 +177,7 @@ class _BusinessUnitSelectionPageState extends State<BusinessUnitSelectionPage> {
centerTitle: false,
actions: [
IconButton(
icon: const Icon(Icons.info_outline, color: Colors.black),
icon: const FaIcon(FontAwesomeIcons.circleInfo, color: Colors.black, size: 20),
onPressed: _showInfoDialog,
),
const SizedBox(width: AppSpacing.sm),
@@ -331,7 +332,7 @@ class _BusinessUnitSelectionPageState extends State<BusinessUnitSelectionPage> {
borderRadius: BorderRadius.circular(8),
),
child: Icon(
Icons.business,
FontAwesomeIcons.building,
color: isSelected
? AppColors.primaryBlue
: AppColors.grey500,
@@ -387,7 +388,7 @@ class _BusinessUnitSelectionPageState extends State<BusinessUnitSelectionPage> {
),
child: isSelected
? const Icon(
Icons.circle,
FontAwesomeIcons.solidCircle,
size: 10,
color: AppColors.white,
)

View File

@@ -6,6 +6,7 @@ library;
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
import 'package:go_router/go_router.dart';
import 'package:worker/core/constants/ui_constants.dart';
import 'package:worker/core/theme/colors.dart';
@@ -147,7 +148,7 @@ class _ForgotPasswordPageState extends ConsumerState<ForgotPasswordPage> {
),
centerTitle: false,
leading: IconButton(
icon: const Icon(Icons.arrow_back, color: Colors.black),
icon: const FaIcon(FontAwesomeIcons.arrowLeft, color: Colors.black, size: 20),
onPressed: () => context.pop(),
),
actions: const [
@@ -205,7 +206,7 @@ class _ForgotPasswordPageState extends ConsumerState<ForgotPasswordPage> {
shape: BoxShape.circle,
),
child: const Icon(
Icons.lock_reset,
FontAwesomeIcons.key,
size: 50,
color: AppColors.primaryBlue,
),
@@ -349,7 +350,7 @@ class _ForgotPasswordPageState extends ConsumerState<ForgotPasswordPage> {
child: TextButton.icon(
onPressed: _showSupport,
icon: const Icon(
Icons.headset_mic,
FontAwesomeIcons.headset,
size: AppIconSize.sm,
color: AppColors.primaryBlue,
),

View File

@@ -6,6 +6,7 @@ library;
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
import 'package:go_router/go_router.dart';
import 'package:worker/core/constants/ui_constants.dart';
import 'package:worker/core/router/app_router.dart';
@@ -329,13 +330,13 @@ class _LoginPageState extends ConsumerState<LoginPage> {
color: AppColors.grey500,
),
prefixIcon: const Icon(
Icons.lock,
FontAwesomeIcons.lock,
color: AppColors.primaryBlue,
size: AppIconSize.md,
),
suffixIcon: IconButton(
icon: Icon(
isPasswordVisible ? Icons.visibility : Icons.visibility_off,
isPasswordVisible ? FontAwesomeIcons.eye : FontAwesomeIcons.eyeSlash,
color: AppColors.grey500,
size: AppIconSize.md,
),
@@ -538,7 +539,7 @@ class _LoginPageState extends ConsumerState<LoginPage> {
child: TextButton.icon(
onPressed: _showSupport,
icon: const Icon(
Icons.headset_mic,
FontAwesomeIcons.headset,
size: AppIconSize.sm,
color: AppColors.primaryBlue,
),

View File

@@ -9,6 +9,7 @@ import 'dart:async';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
import 'package:go_router/go_router.dart';
import 'package:worker/core/constants/ui_constants.dart';
@@ -242,7 +243,7 @@ class _OtpVerificationPageState extends ConsumerState<OtpVerificationPage> {
backgroundColor: AppColors.white,
elevation: AppBarSpecs.elevation,
leading: IconButton(
icon: const Icon(Icons.arrow_back, color: Colors.black),
icon: const FaIcon(FontAwesomeIcons.arrowLeft, color: Colors.black, size: 20),
onPressed: () => context.pop(),
),
title: const Text(
@@ -280,7 +281,7 @@ class _OtpVerificationPageState extends ConsumerState<OtpVerificationPage> {
shape: BoxShape.circle,
),
child: const Icon(
Icons.shield_outlined,
FontAwesomeIcons.shieldHalved,
size: 36,
color: AppColors.white,
),

View File

@@ -9,6 +9,7 @@ import 'dart:io';
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
import 'package:go_router/go_router.dart';
import 'package:image_picker/image_picker.dart';
@@ -174,12 +175,12 @@ class _RegisterPageState extends ConsumerState<RegisterPage> {
child: Wrap(
children: [
ListTile(
leading: const Icon(Icons.camera_alt),
leading: const FaIcon(FontAwesomeIcons.camera, size: 20),
title: const Text('Chụp ảnh'),
onTap: () => Navigator.pop(context, ImageSource.camera),
),
ListTile(
leading: const Icon(Icons.photo_library),
leading: const FaIcon(FontAwesomeIcons.images, size: 20),
title: const Text('Chọn từ thư viện'),
onTap: () => Navigator.pop(context, ImageSource.gallery),
),
@@ -392,7 +393,7 @@ class _RegisterPageState extends ConsumerState<RegisterPage> {
backgroundColor: AppColors.white,
elevation: AppBarSpecs.elevation,
leading: IconButton(
icon: const Icon(Icons.arrow_back, color: Colors.black),
icon: const FaIcon(FontAwesomeIcons.arrowLeft, color: Colors.black, size: 20),
onPressed: () => context.pop(),
),
title: const Text(
@@ -470,7 +471,7 @@ class _RegisterPageState extends ConsumerState<RegisterPage> {
textInputAction: TextInputAction.next,
decoration: _buildInputDecoration(
hintText: 'Nhập họ và tên',
prefixIcon: Icons.person,
prefixIcon: FontAwesomeIcons.user,
),
validator: (value) => Validators.minLength(
value,
@@ -498,7 +499,7 @@ class _RegisterPageState extends ConsumerState<RegisterPage> {
textInputAction: TextInputAction.next,
decoration: _buildInputDecoration(
hintText: 'Nhập email',
prefixIcon: Icons.email,
prefixIcon: FontAwesomeIcons.envelope,
),
validator: Validators.email,
),
@@ -513,12 +514,12 @@ class _RegisterPageState extends ConsumerState<RegisterPage> {
textInputAction: TextInputAction.done,
decoration: _buildInputDecoration(
hintText: 'Tạo mật khẩu mới',
prefixIcon: Icons.lock,
prefixIcon: FontAwesomeIcons.lock,
suffixIcon: IconButton(
icon: Icon(
_passwordVisible
? Icons.visibility
: Icons.visibility_off,
? FontAwesomeIcons.eye
: FontAwesomeIcons.eyeSlash,
color: AppColors.grey500,
),
onPressed: () {
@@ -560,7 +561,7 @@ class _RegisterPageState extends ConsumerState<RegisterPage> {
textInputAction: TextInputAction.next,
decoration: _buildInputDecoration(
hintText: 'Nhập tên công ty (không bắt buộc)',
prefixIcon: Icons.business,
prefixIcon: FontAwesomeIcons.building,
),
),
const SizedBox(height: AppSpacing.md),
@@ -761,7 +762,7 @@ class _RegisterPageState extends ConsumerState<RegisterPage> {
value: _selectedRole,
decoration: _buildInputDecoration(
hintText: 'Chọn vai trò',
prefixIcon: Icons.work,
prefixIcon: FontAwesomeIcons.briefcase,
),
items: groups
.map(

View File

@@ -6,6 +6,7 @@ library;
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
import 'package:worker/core/constants/ui_constants.dart';
import 'package:worker/core/theme/colors.dart';
@@ -154,7 +155,7 @@ class FileUploadCard extends StatelessWidget {
height: 50,
color: AppColors.grey100,
child: const Icon(
Icons.broken_image,
FontAwesomeIcons.image,
color: AppColors.grey500,
size: 24,
),
@@ -203,7 +204,7 @@ class FileUploadCard extends StatelessWidget {
// Remove button
IconButton(
icon: const Icon(Icons.close, color: AppColors.danger, size: 20),
icon: const FaIcon(FontAwesomeIcons.xmark, color: AppColors.danger, size: 18),
onPressed: onRemove,
padding: EdgeInsets.zero,
constraints: const BoxConstraints(),

View File

@@ -6,6 +6,7 @@ library;
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
import 'package:worker/core/constants/ui_constants.dart';
import 'package:worker/core/theme/colors.dart';
@@ -93,7 +94,7 @@ class PhoneInputField extends StatelessWidget {
color: AppColors.grey500,
),
prefixIcon: const Icon(
Icons.phone,
FontAwesomeIcons.phone,
color: AppColors.primaryBlue,
size: AppIconSize.md,
),

View File

@@ -4,6 +4,7 @@
library;
import 'package:flutter/material.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
import 'package:worker/core/constants/ui_constants.dart';
import 'package:worker/core/theme/colors.dart';
@@ -62,7 +63,7 @@ class RoleDropdown extends StatelessWidget {
color: AppColors.grey500,
),
prefixIcon: const Icon(
Icons.work,
FontAwesomeIcons.briefcase,
color: AppColors.primaryBlue,
size: AppIconSize.md,
),
@@ -104,7 +105,7 @@ class RoleDropdown extends StatelessWidget {
],
onChanged: onChanged,
validator: validator,
icon: const Icon(Icons.arrow_drop_down, color: AppColors.grey500),
icon: const FaIcon(FontAwesomeIcons.chevronDown, color: AppColors.grey500, size: 16),
dropdownColor: AppColors.white,
style: const TextStyle(
fontSize: InputFieldSpecs.fontSize,