feat: rebrand app to "Coves" with custom navigation and launcher icons

Update app branding with new name and Bluesky-style icon system. Replace Material icons with custom SVG icons for cleaner navigation UI. Generate adaptive launcher icons from Coves shark logo with proper safe zones.

Key changes:
- Rename app from "Coves Flutter" to "Coves" on Android and iOS
- Add BlueSkyIcon widget with custom SVG icon support
- Implement Bluesky-style navigation icons (home, search, plus, bell, person)
- Generate adaptive launcher icons with flutter_launcher_icons
- Configure Android adaptive icons with #0B0F14 background
- Bump version to 1.0.0+2

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

+1 -1
android/app/src/main/AndroidManifest.xml
···
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<application
-
android:label="coves_flutter"
android:name="${applicationName}"
android:icon="@mipmap/ic_launcher"
android:usesCleartextTraffic="true"
···
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<application
+
android:label="Coves"
android:name="${applicationName}"
android:icon="@mipmap/ic_launcher"
android:usesCleartextTraffic="true"
android/app/src/main/res/drawable-hdpi/ic_launcher_foreground.png

This is a binary file and will not be displayed.

android/app/src/main/res/drawable-mdpi/ic_launcher_foreground.png

This is a binary file and will not be displayed.

android/app/src/main/res/drawable-xhdpi/ic_launcher_foreground.png

This is a binary file and will not be displayed.

android/app/src/main/res/drawable-xxhdpi/ic_launcher_foreground.png

This is a binary file and will not be displayed.

android/app/src/main/res/drawable-xxxhdpi/ic_launcher_foreground.png

This is a binary file and will not be displayed.

+9
android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
···
···
+
<?xml version="1.0" encoding="utf-8"?>
+
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
+
<background android:drawable="@color/ic_launcher_background"/>
+
<foreground>
+
<inset
+
android:drawable="@drawable/ic_launcher_foreground"
+
android:inset="16%" />
+
</foreground>
+
</adaptive-icon>
android/app/src/main/res/mipmap-hdpi/ic_launcher.png

This is a binary file and will not be displayed.

android/app/src/main/res/mipmap-mdpi/ic_launcher.png

This is a binary file and will not be displayed.

android/app/src/main/res/mipmap-xhdpi/ic_launcher.png

This is a binary file and will not be displayed.

android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png

This is a binary file and will not be displayed.

android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png

This is a binary file and will not be displayed.

+4
android/app/src/main/res/values/colors.xml
···
···
+
<?xml version="1.0" encoding="utf-8"?>
+
<resources>
+
<color name="ic_launcher_background">#0B0F14</color>
+
</resources>
+3
assets/icons/bell_filled.svg
···
···
+
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+
<path d="M12 2a7.853 7.853 0 0 0-7.784 6.815l-1.207 9.053A1 1 0 0 0 4 19h3.354c.904 1.748 2.607 3 4.646 3 2.039 0 3.742-1.252 4.646-3H20a1 1 0 0 0 .991-1.132l-1.207-9.053A7.853 7.853 0 0 0 12 2Zm2.222 17H9.778c.61.637 1.399 1 2.222 1s1.613-.363 2.222-1Z" fill="currentColor"/>
+
</svg>
+3
assets/icons/bell_outline.svg
···
···
+
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+
<path d="M4.216 8.815a7.853 7.853 0 0 1 15.568 0l1.207 9.053A1 1 0 0 1 20 19h-3.354c-.904 1.748-2.607 3-4.646 3-2.039 0-3.742-1.252-4.646-3H4a1 1 0 0 1-.991-1.132l1.207-9.053ZM9.778 19c.61.637 1.399 1 2.222 1s1.613-.363 2.222-1H9.778ZM12 4a5.853 5.853 0 0 0-5.802 5.08L5.142 17h13.716l-1.056-7.92A5.853 5.853 0 0 0 12 4Z" fill="currentColor"/>
+
</svg>
+3
assets/icons/home_filled.svg
···
···
+
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+
<path d="M12.63 1.724a1 1 0 0 0-1.26 0l-8 6.5A1 1 0 0 0 3 9v11a1 1 0 0 0 1 1h5a1 1 0 0 0 1-1v-6h4v6a1 1 0 0 0 1 1h5a1 1 0 0 0 1-1V9a1 1 0 0 0-.37-.776l-8-6.5Z" fill="currentColor"/>
+
</svg>
+3
assets/icons/home_outline.svg
···
···
+
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+
<path d="M11.37 1.724a1 1 0 0 1 1.26 0l8 6.5A1 1 0 0 1 21 9v11a1 1 0 0 1-1 1h-6a1 1 0 0 1-1-1v-5h-2v5a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1V9a1 1 0 0 1 .37-.776l8-6.5ZM5 9.476V19h4v-5a1 1 0 0 1 1-1h4a1 1 0 0 1 1 1v5h4V9.476l-7-5.688-7 5.688Z" fill="currentColor"/>
+
</svg>
+3
assets/icons/home_simple.svg
···
···
+
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+
<path d="M10 20v-6h4v6h5v-8h3L12 3 2 12h3v8z" fill="currentColor"/>
+
</svg>
+4
assets/icons/person_simple.svg
···
···
+
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+
<circle cx="12" cy="7" r="4" stroke="currentColor" stroke-width="2" fill="none"/>
+
<path d="M4 20c0-4.42 3.58-8 8-8s8 3.58 8 8" stroke="currentColor" stroke-width="2" stroke-linecap="round" fill="none"/>
+
</svg>
+3
assets/icons/plus.svg
···
···
+
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+
<path d="M11 11V5h2v6h6v2h-6v6h-2v-6H5v-2h6Z" fill="currentColor"/>
+
</svg>
+3
assets/icons/search.svg
···
···
+
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+
<path d="M11 5a6 6 0 1 0 0 12 6 6 0 0 0 0-12Zm-8 6a8 8 0 1 1 14.32 4.906l3.387 3.387a1 1 0 0 1-1.414 1.414l-3.387-3.387A8 8 0 0 1 3 11Z" fill="currentColor"/>
+
</svg>
+3
assets/icons/user_circle_filled.svg
···
···
+
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+
<path d="M12 22c5.523 0 10-4.477 10-10S17.523 2 12 2 2 6.477 2 12s4.477 10 10 10Zm3-12a3 3 0 1 1-6 0 3 3 0 0 1 6 0Zm-3 10a7.976 7.976 0 0 1-5.714-2.4C7.618 16.004 9.605 15 12 15c2.396 0 4.383 1.005 5.714 2.6A7.976 7.976 0 0 1 12 20Z" fill="currentColor"/>
+
</svg>
+3
assets/icons/user_circle_outline.svg
···
···
+
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+
<path d="M12 4a8 8 0 0 0-5.935 13.365C7.56 15.895 9.612 15 12 15c2.388 0 4.44.894 5.935 2.365A8 8 0 0 0 12 4Zm4.412 14.675C15.298 17.636 13.792 17 12 17c-1.791 0-3.298.636-4.412 1.675A7.96 7.96 0 0 0 12 20a7.96 7.96 0 0 0 4.412-1.325ZM2 12C2 6.477 6.477 2 12 2s10 4.477 10 10a9.98 9.98 0 0 1-3.462 7.567A9.965 9.965 0 0 1 12 22a9.965 9.965 0 0 1-6.538-2.433A9.98 9.98 0 0 1 2 12Zm10-4a2 2 0 1 0 0 4 2 2 0 0 0 0-4Zm-4 2a4 4 0 1 1 8 0 4 4 0 0 1-8 0Z" fill="currentColor"/>
+
</svg>
assets/logo/app-icon-foreground.png

This is a binary file and will not be displayed.

assets/logo/app-icon.png

This is a binary file and will not be displayed.

+2 -2
ios/Runner.xcodeproj/project.pbxproj
···
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
-
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
CLANG_ANALYZER_NONNULL = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
···
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
-
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
CLANG_ANALYZER_NONNULL = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
···
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
+
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = AppIcon;
CLANG_ANALYZER_NONNULL = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
···
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
+
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = AppIcon;
CLANG_ANALYZER_NONNULL = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
+1 -122
ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json
···
-
{
-
"images" : [
-
{
-
"size" : "20x20",
-
"idiom" : "iphone",
-
"filename" : "Icon-App-20x20@2x.png",
-
"scale" : "2x"
-
},
-
{
-
"size" : "20x20",
-
"idiom" : "iphone",
-
"filename" : "Icon-App-20x20@3x.png",
-
"scale" : "3x"
-
},
-
{
-
"size" : "29x29",
-
"idiom" : "iphone",
-
"filename" : "Icon-App-29x29@1x.png",
-
"scale" : "1x"
-
},
-
{
-
"size" : "29x29",
-
"idiom" : "iphone",
-
"filename" : "Icon-App-29x29@2x.png",
-
"scale" : "2x"
-
},
-
{
-
"size" : "29x29",
-
"idiom" : "iphone",
-
"filename" : "Icon-App-29x29@3x.png",
-
"scale" : "3x"
-
},
-
{
-
"size" : "40x40",
-
"idiom" : "iphone",
-
"filename" : "Icon-App-40x40@2x.png",
-
"scale" : "2x"
-
},
-
{
-
"size" : "40x40",
-
"idiom" : "iphone",
-
"filename" : "Icon-App-40x40@3x.png",
-
"scale" : "3x"
-
},
-
{
-
"size" : "60x60",
-
"idiom" : "iphone",
-
"filename" : "Icon-App-60x60@2x.png",
-
"scale" : "2x"
-
},
-
{
-
"size" : "60x60",
-
"idiom" : "iphone",
-
"filename" : "Icon-App-60x60@3x.png",
-
"scale" : "3x"
-
},
-
{
-
"size" : "20x20",
-
"idiom" : "ipad",
-
"filename" : "Icon-App-20x20@1x.png",
-
"scale" : "1x"
-
},
-
{
-
"size" : "20x20",
-
"idiom" : "ipad",
-
"filename" : "Icon-App-20x20@2x.png",
-
"scale" : "2x"
-
},
-
{
-
"size" : "29x29",
-
"idiom" : "ipad",
-
"filename" : "Icon-App-29x29@1x.png",
-
"scale" : "1x"
-
},
-
{
-
"size" : "29x29",
-
"idiom" : "ipad",
-
"filename" : "Icon-App-29x29@2x.png",
-
"scale" : "2x"
-
},
-
{
-
"size" : "40x40",
-
"idiom" : "ipad",
-
"filename" : "Icon-App-40x40@1x.png",
-
"scale" : "1x"
-
},
-
{
-
"size" : "40x40",
-
"idiom" : "ipad",
-
"filename" : "Icon-App-40x40@2x.png",
-
"scale" : "2x"
-
},
-
{
-
"size" : "76x76",
-
"idiom" : "ipad",
-
"filename" : "Icon-App-76x76@1x.png",
-
"scale" : "1x"
-
},
-
{
-
"size" : "76x76",
-
"idiom" : "ipad",
-
"filename" : "Icon-App-76x76@2x.png",
-
"scale" : "2x"
-
},
-
{
-
"size" : "83.5x83.5",
-
"idiom" : "ipad",
-
"filename" : "Icon-App-83.5x83.5@2x.png",
-
"scale" : "2x"
-
},
-
{
-
"size" : "1024x1024",
-
"idiom" : "ios-marketing",
-
"filename" : "Icon-App-1024x1024@1x.png",
-
"scale" : "1x"
-
}
-
],
-
"info" : {
-
"version" : 1,
-
"author" : "xcode"
-
}
-
}
···
+
{"images":[{"size":"20x20","idiom":"iphone","filename":"Icon-App-20x20@2x.png","scale":"2x"},{"size":"20x20","idiom":"iphone","filename":"Icon-App-20x20@3x.png","scale":"3x"},{"size":"29x29","idiom":"iphone","filename":"Icon-App-29x29@1x.png","scale":"1x"},{"size":"29x29","idiom":"iphone","filename":"Icon-App-29x29@2x.png","scale":"2x"},{"size":"29x29","idiom":"iphone","filename":"Icon-App-29x29@3x.png","scale":"3x"},{"size":"40x40","idiom":"iphone","filename":"Icon-App-40x40@2x.png","scale":"2x"},{"size":"40x40","idiom":"iphone","filename":"Icon-App-40x40@3x.png","scale":"3x"},{"size":"57x57","idiom":"iphone","filename":"Icon-App-57x57@1x.png","scale":"1x"},{"size":"57x57","idiom":"iphone","filename":"Icon-App-57x57@2x.png","scale":"2x"},{"size":"60x60","idiom":"iphone","filename":"Icon-App-60x60@2x.png","scale":"2x"},{"size":"60x60","idiom":"iphone","filename":"Icon-App-60x60@3x.png","scale":"3x"},{"size":"20x20","idiom":"ipad","filename":"Icon-App-20x20@1x.png","scale":"1x"},{"size":"20x20","idiom":"ipad","filename":"Icon-App-20x20@2x.png","scale":"2x"},{"size":"29x29","idiom":"ipad","filename":"Icon-App-29x29@1x.png","scale":"1x"},{"size":"29x29","idiom":"ipad","filename":"Icon-App-29x29@2x.png","scale":"2x"},{"size":"40x40","idiom":"ipad","filename":"Icon-App-40x40@1x.png","scale":"1x"},{"size":"40x40","idiom":"ipad","filename":"Icon-App-40x40@2x.png","scale":"2x"},{"size":"50x50","idiom":"ipad","filename":"Icon-App-50x50@1x.png","scale":"1x"},{"size":"50x50","idiom":"ipad","filename":"Icon-App-50x50@2x.png","scale":"2x"},{"size":"72x72","idiom":"ipad","filename":"Icon-App-72x72@1x.png","scale":"1x"},{"size":"72x72","idiom":"ipad","filename":"Icon-App-72x72@2x.png","scale":"2x"},{"size":"76x76","idiom":"ipad","filename":"Icon-App-76x76@1x.png","scale":"1x"},{"size":"76x76","idiom":"ipad","filename":"Icon-App-76x76@2x.png","scale":"2x"},{"size":"83.5x83.5","idiom":"ipad","filename":"Icon-App-83.5x83.5@2x.png","scale":"2x"},{"size":"1024x1024","idiom":"ios-marketing","filename":"Icon-App-1024x1024@1x.png","scale":"1x"}],"info":{"version":1,"author":"xcode"}}
ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png

This is a binary file and will not be displayed.

ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png

This is a binary file and will not be displayed.

ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png

This is a binary file and will not be displayed.

ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png

This is a binary file and will not be displayed.

ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png

This is a binary file and will not be displayed.

ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png

This is a binary file and will not be displayed.

ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png

This is a binary file and will not be displayed.

ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png

This is a binary file and will not be displayed.

ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png

This is a binary file and will not be displayed.

ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png

This is a binary file and will not be displayed.

ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@1x.png

This is a binary file and will not be displayed.

ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@2x.png

This is a binary file and will not be displayed.

ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png

This is a binary file and will not be displayed.

ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png

This is a binary file and will not be displayed.

ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png

This is a binary file and will not be displayed.

ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png

This is a binary file and will not be displayed.

ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png

This is a binary file and will not be displayed.

ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png

This is a binary file and will not be displayed.

ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png

This is a binary file and will not be displayed.

ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png

This is a binary file and will not be displayed.

ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png

This is a binary file and will not be displayed.

+1 -1
ios/Runner/Info.plist
···
<key>CFBundleDevelopmentRegion</key>
<string>$(DEVELOPMENT_LANGUAGE)</string>
<key>CFBundleDisplayName</key>
-
<string>Coves Flutter</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>
···
<key>CFBundleDevelopmentRegion</key>
<string>$(DEVELOPMENT_LANGUAGE)</string>
<key>CFBundleDisplayName</key>
+
<string>Coves</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>
+32 -7
lib/screens/home/main_shell_screen.dart
···
import 'package:flutter/material.dart';
import 'create_post_screen.dart';
import 'feed_screen.dart';
import 'notifications_screen.dart';
···
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: [
-
_buildNavItem(0, Icons.home, 'Home'),
-
_buildNavItem(1, Icons.search, 'Search'),
-
_buildNavItem(2, Icons.add_box_outlined, 'Create'),
-
_buildNavItem(3, Icons.notifications_outlined, 'Notifications'),
-
_buildNavItem(4, Icons.person_outline, 'Me'),
],
),
),
···
);
}
-
Widget _buildNavItem(int index, IconData icon, String label) {
final isSelected = _selectedIndex == index;
final color =
isSelected
? const Color(0xFFFF6B35)
: const Color(0xFFB6C2D2).withValues(alpha: 0.6);
return Expanded(
child: InkWell(
onTap: () => _onItemTapped(index),
splashColor: Colors.transparent,
highlightColor: Colors.transparent,
-
child: Icon(icon, size: 28, color: color),
),
);
}
···
import 'package:flutter/material.dart';
+
import '../../widgets/icons/bluesky_icons.dart';
import 'create_post_screen.dart';
import 'feed_screen.dart';
import 'notifications_screen.dart';
···
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: [
+
_buildNavItem(0, 'home', 'Home'),
+
_buildNavItem(1, 'search', 'Search'),
+
_buildNavItem(2, 'plus', 'Create'),
+
_buildNavItem(3, 'bell', 'Notifications'),
+
_buildNavItem(4, 'person', 'Me'),
],
),
),
···
);
}
+
Widget _buildNavItem(int index, String iconName, String label) {
final isSelected = _selectedIndex == index;
final color =
isSelected
? const Color(0xFFFF6B35)
: const Color(0xFFB6C2D2).withValues(alpha: 0.6);
+
// Use filled variant when selected, outline when not
+
Widget icon;
+
switch (iconName) {
+
case 'home':
+
icon = BlueSkyIcon.homeSimple(color: color);
+
break;
+
case 'search':
+
icon = BlueSkyIcon.search(color: color);
+
break;
+
case 'plus':
+
icon = BlueSkyIcon.plus(color: color);
+
break;
+
case 'bell':
+
icon = isSelected
+
? BlueSkyIcon.bellFilled(color: color)
+
: BlueSkyIcon.bellOutline(color: color);
+
break;
+
case 'person':
+
icon = BlueSkyIcon.personSimple(color: color);
+
break;
+
default:
+
icon = BlueSkyIcon.homeOutline(color: color);
+
}
+
return Expanded(
child: InkWell(
onTap: () => _onItemTapped(index),
splashColor: Colors.transparent,
highlightColor: Colors.transparent,
+
child: icon,
),
);
}
+59
lib/widgets/icons/bluesky_icons.dart
···
···
+
import 'package:flutter/widgets.dart';
+
import 'package:flutter_svg/flutter_svg.dart';
+
+
/// Bluesky-style navigation icons using SVG assets
+
/// These icons match the design from Bluesky's social-app
+
class BlueSkyIcon extends StatelessWidget {
+
final String iconName;
+
final double size;
+
final Color color;
+
+
const BlueSkyIcon({
+
required this.iconName,
+
this.size = 28,
+
required this.color,
+
super.key,
+
});
+
+
@override
+
Widget build(BuildContext context) {
+
return SvgPicture.asset(
+
'assets/icons/$iconName.svg',
+
width: size,
+
height: size,
+
colorFilter: ColorFilter.mode(color, BlendMode.srcIn),
+
);
+
}
+
+
// Convenience constructors for each icon type
+
static Widget homeOutline({required Color color, double size = 28}) =>
+
BlueSkyIcon(iconName: 'home_outline', color: color, size: size);
+
+
static Widget homeFilled({required Color color, double size = 28}) =>
+
BlueSkyIcon(iconName: 'home_filled', color: color, size: size);
+
+
static Widget search({required Color color, double size = 28}) =>
+
BlueSkyIcon(iconName: 'search', color: color, size: size);
+
+
static Widget plus({required Color color, double size = 28}) =>
+
BlueSkyIcon(iconName: 'plus', color: color, size: size);
+
+
static Widget bellOutline({required Color color, double size = 28}) =>
+
BlueSkyIcon(iconName: 'bell_outline', color: color, size: size);
+
+
static Widget bellFilled({required Color color, double size = 28}) =>
+
BlueSkyIcon(iconName: 'bell_filled', color: color, size: size);
+
+
static Widget userCircleOutline({required Color color, double size = 28}) =>
+
BlueSkyIcon(iconName: 'user_circle_outline', color: color, size: size);
+
+
static Widget userCircleFilled({required Color color, double size = 28}) =>
+
BlueSkyIcon(iconName: 'user_circle_filled', color: color, size: size);
+
+
// Simpler versions (inspired by other social apps)
+
static Widget homeSimple({required Color color, double size = 28}) =>
+
BlueSkyIcon(iconName: 'home_simple', color: color, size: size);
+
+
static Widget personSimple({required Color color, double size = 28}) =>
+
BlueSkyIcon(iconName: 'person_simple', color: color, size: size);
+
}
+40
pubspec.lock
···
url: "https://pub.dev"
source: hosted
version: "8.4.1"
args:
dependency: transitive
description:
···
url: "https://pub.dev"
source: hosted
version: "2.0.4"
clock:
dependency: transitive
description:
···
url: "https://pub.dev"
source: hosted
version: "3.4.1"
flutter_lints:
dependency: "direct dev"
description:
···
url: "https://pub.dev"
source: hosted
version: "4.1.2"
io:
dependency: transitive
description:
···
url: "https://pub.dev"
source: hosted
version: "1.5.2"
provider:
dependency: "direct main"
description:
···
url: "https://pub.dev"
source: hosted
version: "8.4.1"
+
archive:
+
dependency: transitive
+
description:
+
name: archive
+
sha256: "2fde1607386ab523f7a36bb3e7edb43bd58e6edaf2ffb29d8a6d578b297fdbbd"
+
url: "https://pub.dev"
+
source: hosted
+
version: "4.0.7"
args:
dependency: transitive
description:
···
url: "https://pub.dev"
source: hosted
version: "2.0.4"
+
cli_util:
+
dependency: transitive
+
description:
+
name: cli_util
+
sha256: ff6785f7e9e3c38ac98b2fb035701789de90154024a75b6cb926445e83197d1c
+
url: "https://pub.dev"
+
source: hosted
+
version: "0.4.2"
clock:
dependency: transitive
description:
···
url: "https://pub.dev"
source: hosted
version: "3.4.1"
+
flutter_launcher_icons:
+
dependency: "direct dev"
+
description:
+
name: flutter_launcher_icons
+
sha256: "10f13781741a2e3972126fae08393d3c4e01fa4cd7473326b94b72cf594195e7"
+
url: "https://pub.dev"
+
source: hosted
+
version: "0.14.4"
flutter_lints:
dependency: "direct dev"
description:
···
url: "https://pub.dev"
source: hosted
version: "4.1.2"
+
image:
+
dependency: transitive
+
description:
+
name: image
+
sha256: "4e973fcf4caae1a4be2fa0a13157aa38a8f9cb049db6529aa00b4d71abc4d928"
+
url: "https://pub.dev"
+
source: hosted
+
version: "4.5.4"
io:
dependency: transitive
description:
···
url: "https://pub.dev"
source: hosted
version: "1.5.2"
+
posix:
+
dependency: transitive
+
description:
+
name: posix
+
sha256: "6323a5b0fa688b6a010df4905a56b00181479e6d10534cecfecede2aa55add61"
+
url: "https://pub.dev"
+
source: hosted
+
version: "6.0.3"
provider:
dependency: "direct main"
description:
+14 -1
pubspec.yaml
···
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
# In Windows, build-name is used as the major, minor, and patch parts
# of the product and file versions while build-number is used as the build suffix.
-
version: 1.0.0+1
environment:
sdk: ^3.7.2
···
http: any
http_mock_adapter: ^0.6.1
# For information on the generic Dart part of this file, see the
# following page: https://dart.dev/tools/pub/pubspec
···
assets:
- assets/logo/coves-shark.svg
- assets/logo/coves-shark-color.svg
# An image asset can refer to one or more resolution-specific "variants", see
# https://flutter.dev/to/resolution-aware-images
···
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
# In Windows, build-name is used as the major, minor, and patch parts
# of the product and file versions while build-number is used as the build suffix.
+
version: 1.0.0+2
environment:
sdk: ^3.7.2
···
http: any
http_mock_adapter: ^0.6.1
+
# Launcher icons
+
flutter_launcher_icons: ^0.14.1
+
+
# Launcher icon configuration
+
flutter_launcher_icons:
+
android: true
+
ios: true
+
image_path: "assets/logo/app-icon.png"
+
adaptive_icon_background: "#0B0F14" # Your app's dark background color
+
adaptive_icon_foreground: "assets/logo/app-icon-foreground.png" # Smaller version with padding
+
remove_alpha_ios: true # Required for App Store submission
+
# For information on the generic Dart part of this file, see the
# following page: https://dart.dev/tools/pub/pubspec
···
assets:
- assets/logo/coves-shark.svg
- assets/logo/coves-shark-color.svg
+
- assets/icons/
# An image asset can refer to one or more resolution-specific "variants", see
# https://flutter.dev/to/resolution-aware-images