Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
72 changes: 72 additions & 0 deletions .github/workflows/flutter-ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@

name: Flutter CI

on:
push:
branches:
- main
- feat/polish
pull_request:
branches:
- main

permissions:
contents: read

jobs:
dart-analyze:
name: dart analyze
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Set up Flutter
uses: subosito/flutter-action@v2
with:
channel: stable
cache: true

- name: Install dependencies
run: flutter pub get

- name: Analyze Dart
run: dart analyze

flutter-analyze:
name: flutter analyze
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Set up Flutter
uses: subosito/flutter-action@v2
with:
channel: stable
cache: true

- name: Install dependencies
run: flutter pub get

- name: Analyze Flutter project
run: flutter analyze

flutter-test:
name: flutter test
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Set up Flutter
uses: subosito/flutter-action@v2
with:
channel: stable
cache: true

- name: Install dependencies
run: flutter pub get

- name: Run tests
run: flutter test
4 changes: 2 additions & 2 deletions android/app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ plugins {
}

android {
namespace = "com.example.playmate"
namespace = "com.sundramdotdev.playmate"
compileSdk = flutter.compileSdkVersion
ndkVersion = flutter.ndkVersion

Expand All @@ -21,7 +21,7 @@ android {

defaultConfig {
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
applicationId = "com.example.playmate"
applicationId = "com.sundramdotdev.playmate"
// You can update the following values to match your application needs.
// For more information, see: https://flutter.dev/to/review-gradle-config.
minSdk = flutter.minSdkVersion
Expand Down
2 changes: 1 addition & 1 deletion android/app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<application
android:label="playmate"
android:label="PlayMate"
android:name="${applicationName}"
android:icon="@mipmap/ic_launcher">
<activity
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.example.playmate
package com.sundramdotdev.playmate

import io.flutter.embedding.android.FlutterActivity

Expand Down
Binary file modified android/app/src/main/res/drawable-hdpi/android12splash.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified android/app/src/main/res/drawable-hdpi/ic_launcher_foreground.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified android/app/src/main/res/drawable-hdpi/splash.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified android/app/src/main/res/drawable-mdpi/android12splash.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified android/app/src/main/res/drawable-mdpi/ic_launcher_foreground.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified android/app/src/main/res/drawable-mdpi/splash.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified android/app/src/main/res/drawable-night-hdpi/android12splash.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified android/app/src/main/res/drawable-night-hdpi/splash.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified android/app/src/main/res/drawable-night-mdpi/android12splash.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified android/app/src/main/res/drawable-night-mdpi/splash.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified android/app/src/main/res/drawable-night-xhdpi/android12splash.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified android/app/src/main/res/drawable-night-xhdpi/splash.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified android/app/src/main/res/drawable-night-xxhdpi/android12splash.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified android/app/src/main/res/drawable-night-xxhdpi/splash.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified android/app/src/main/res/drawable-night-xxxhdpi/splash.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified android/app/src/main/res/drawable-xhdpi/android12splash.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified android/app/src/main/res/drawable-xhdpi/ic_launcher_foreground.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified android/app/src/main/res/drawable-xhdpi/splash.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified android/app/src/main/res/drawable-xxhdpi/android12splash.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified android/app/src/main/res/drawable-xxhdpi/ic_launcher_foreground.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified android/app/src/main/res/drawable-xxhdpi/splash.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified android/app/src/main/res/drawable-xxxhdpi/android12splash.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified android/app/src/main/res/drawable-xxxhdpi/splash.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified android/app/src/main/res/mipmap-hdpi/ic_launcher.png
Binary file modified android/app/src/main/res/mipmap-mdpi/ic_launcher.png
Binary file modified android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
Binary file modified android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
Binary file modified android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
Binary file removed assets/icons/app_icon.png
Diff not rendered.
Binary file added assets/icons/playmate_logo.png
4 changes: 2 additions & 2 deletions docs/APP_INFO.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@ This document defines the authoritative system configuration, software platform
| :--- | :--- | :--- |
| **Application Name** | **PlayMate** | Official brand identity |
| **Tagline** | *Everything you need for offline games.* | Global product marketing tagline |
| **Android Application ID** | `com.example.playmate` | Package namespace registered in Gradle |
| **iOS Bundle Identifier** | `com.example.playmate` | App bundle ID configured in Xcode |
| **Android Application ID** | `com.sundramdotdev.playmate` | Package namespace registered in Gradle |
| **iOS Bundle Identifier** | `com.sundramdotdev.playmate` | App bundle ID configured in Xcode |
| **Minimum Android Version** | **Android 6.0 (API Level 23)** | Covers $>99.5\%$ of active global Android devices |
| **Target Android Version** | **Android 14 / 15 (API Level 34/35)**| Complies with Google Play API target requirements |
| **Minimum iOS Version** | **iOS 14.0** | Compatible with iPhone 6s through current iPhone generation |
Expand Down
2 changes: 1 addition & 1 deletion docs/DEPLOYMENT.md
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ build/app/outputs/bundle/release/app-release.aab
## 🍎 iOS Deployment Pipeline

### 1. Apple Developer Portal Setup
1. Create App Identifier: `com.example.playmate` (or commercial bundle ID `com.playmate.offline`).
1. Create App Identifier: `com.sundramdotdev.playmate` (matching application bundle ID).
2. Generate an **Apple Distribution Certificate** in Xcode or Apple Developer Portal.
3. Create an **App Store Provisioning Profile** tied to the App ID and Certificate.

Expand Down
4 changes: 2 additions & 2 deletions docs/FIREBASE_SETUP.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ Create two distinct Firebase projects:
- `playmate-app-prod` (Official Production release)

### 2. Configure Android App
1. Register Android Package: `com.example.playmate` (or custom commercial package e.g. `com.playmate.offline`).
1. Register Android Package: `com.sundramdotdev.playmate` (or custom commercial package e.g. `com.playmate.offline`).
2. Add your **SHA-1** and **SHA-256** fingerprint hashes (for debug and production keystores).
3. Download the generated `google-services.json`.
4. Place the file at:
Expand All @@ -58,7 +58,7 @@ Create two distinct Firebase projects:
```

### 3. Configure iOS App
1. Register iOS Bundle Identifier: `com.example.playmate` (or `com.playmate.offline`).
1. Register iOS Bundle Identifier: `com.sundramdotdev.playmate` (or `com.playmate.offline`).
2. Add your App Store ID and Team ID.
3. Download `GoogleService-Info.plist`.
4. Open the Xcode workspace (`ios/Runner.xcworkspace`) and drag `GoogleService-Info.plist` into `Runner/` (ensure *Copy items if needed* is checked).
Expand Down
2 changes: 1 addition & 1 deletion docs/SECURITY_POLICY.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ We actively provide security patches for the following versions:

### 1. OS-Level Application Sandboxing
PlayMate operates entirely within the native sandboxed storage boundaries enforced by Android and iOS:
- **Android:** App data is written to private internal storage (`/data/data/com.example.playmate/`), preventing access by other installed applications without root privileges.
- **Android:** App data is written to private internal storage (`/data/data/com.sundramdotdev.playmate/`), preventing access by other installed applications without root privileges.
- **iOS:** Storage is restricted to the private application container (`Application Support` and `Documents` directory), shielded by iOS hardware encryption.

### 2. Local Database Security & Hive Encryption
Expand Down
1 change: 1 addition & 0 deletions docs/SEO.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@

# Search Engine Optimization (SEO) & Web Discovery Strategy

This document establishes the strategic search engine optimization (SEO) architecture and web discovery framework for **PlayMate**.
Expand Down
12 changes: 6 additions & 6 deletions ios/Runner.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -372,7 +372,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
PRODUCT_BUNDLE_IDENTIFIER = com.example.playmate;
PRODUCT_BUNDLE_IDENTIFIER = com.sundramdotdev.playmate;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_VERSION = 5.0;
Expand All @@ -388,7 +388,7 @@
CURRENT_PROJECT_VERSION = 1;
GENERATE_INFOPLIST_FILE = YES;
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = com.example.playmate.RunnerTests;
PRODUCT_BUNDLE_IDENTIFIER = com.sundramdotdev.playmate.RunnerTests;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
Expand All @@ -405,7 +405,7 @@
CURRENT_PROJECT_VERSION = 1;
GENERATE_INFOPLIST_FILE = YES;
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = com.example.playmate.RunnerTests;
PRODUCT_BUNDLE_IDENTIFIER = com.sundramdotdev.playmate.RunnerTests;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_VERSION = 5.0;
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner";
Expand All @@ -420,7 +420,7 @@
CURRENT_PROJECT_VERSION = 1;
GENERATE_INFOPLIST_FILE = YES;
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = com.example.playmate.RunnerTests;
PRODUCT_BUNDLE_IDENTIFIER = com.sundramdotdev.playmate.RunnerTests;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_VERSION = 5.0;
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner";
Expand Down Expand Up @@ -551,7 +551,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
PRODUCT_BUNDLE_IDENTIFIER = com.example.playmate;
PRODUCT_BUNDLE_IDENTIFIER = com.sundramdotdev.playmate;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
Expand All @@ -573,7 +573,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
PRODUCT_BUNDLE_IDENTIFIER = com.example.playmate;
PRODUCT_BUNDLE_IDENTIFIER = com.sundramdotdev.playmate;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_VERSION = 5.0;
Expand Down
Binary file modified ios/Runner/Assets.xcassets/AppIcon.appiconset/[email protected]
Binary file modified ios/Runner/Assets.xcassets/AppIcon.appiconset/[email protected]
Binary file modified ios/Runner/Assets.xcassets/AppIcon.appiconset/[email protected]
Binary file modified ios/Runner/Assets.xcassets/AppIcon.appiconset/[email protected]
Binary file modified ios/Runner/Assets.xcassets/AppIcon.appiconset/[email protected]
Binary file modified ios/Runner/Assets.xcassets/AppIcon.appiconset/[email protected]
Binary file modified ios/Runner/Assets.xcassets/AppIcon.appiconset/[email protected]
Binary file modified ios/Runner/Assets.xcassets/AppIcon.appiconset/[email protected]
Binary file modified ios/Runner/Assets.xcassets/AppIcon.appiconset/[email protected]
Binary file modified ios/Runner/Assets.xcassets/AppIcon.appiconset/[email protected]
Binary file modified ios/Runner/Assets.xcassets/AppIcon.appiconset/[email protected]
Binary file modified ios/Runner/Assets.xcassets/AppIcon.appiconset/[email protected]
Binary file modified ios/Runner/Assets.xcassets/AppIcon.appiconset/[email protected]
Binary file modified ios/Runner/Assets.xcassets/AppIcon.appiconset/[email protected]
Binary file modified ios/Runner/Assets.xcassets/AppIcon.appiconset/[email protected]
Binary file modified ios/Runner/Assets.xcassets/AppIcon.appiconset/[email protected]
Binary file modified ios/Runner/Assets.xcassets/AppIcon.appiconset/[email protected]
Binary file modified ios/Runner/Assets.xcassets/AppIcon.appiconset/[email protected]
Binary file modified ios/Runner/Assets.xcassets/AppIcon.appiconset/[email protected]
Binary file modified ios/Runner/Assets.xcassets/AppIcon.appiconset/[email protected]
Binary file modified ios/Runner/Assets.xcassets/AppIcon.appiconset/[email protected]
Binary file modified ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png
Binary file modified ios/Runner/Assets.xcassets/LaunchImage.imageset/[email protected]
Binary file modified ios/Runner/Assets.xcassets/LaunchImage.imageset/[email protected]
Binary file modified ios/Runner/Assets.xcassets/LaunchImage.imageset/[email protected]
Binary file modified ios/Runner/Assets.xcassets/LaunchImage.imageset/[email protected]
100 changes: 68 additions & 32 deletions lib/features/about/about_screen.dart
Original file line number Diff line number Diff line change
Expand Up @@ -8,26 +8,21 @@ import 'package_info_provider.dart';
class AboutScreen extends ConsumerWidget {
const AboutScreen({super.key});

static const String githubUrl = 'https://github.com/sundramdotdev';
static const String linkedinUrl = 'https://linkedin.com/in/sundramdotdev';
static const String instagramUrl =
'https://www.instagram.com/devsundram_?stkn=dXBva2IwMzZxbHY1';

@override
Widget build(BuildContext context, WidgetRef ref) {
final theme = Theme.of(context);
final packageInfoAsync = ref.watch(packageInfoProvider);

final String versionText = packageInfoAsync.when(
data: (info) => info.version,
loading: () => '1.0.0',
error: (err, stack) => '1.0.0',
loading: () => '1.1.0',
error: (err, stack) => '1.1.0',
);

final String buildText = packageInfoAsync.when(
data: (info) => info.buildNumber,
loading: () => '1',
error: (err, stack) => '1',
loading: () => '2',
error: (err, stack) => '2',
);

return Scaffold(
Expand All @@ -41,32 +36,55 @@ class AboutScreen extends ConsumerWidget {
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
// Header Card
// Header Brand Card
Card(
child: Padding(
padding: const EdgeInsets.all(AppSpacing.l),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
'PlayMate',
style: theme.textTheme.headlineLarge?.copyWith(
fontWeight: FontWeight.w900,
letterSpacing: -0.5,
),
),
const SizedBox(height: AppSpacing.xs),
Text(
'Everything you need for offline games.',
style: theme.textTheme.titleMedium?.copyWith(
color: theme.colorScheme.secondary,
fontWeight: FontWeight.w500,
),
Row(
children: [
Container(
padding: const EdgeInsets.all(10),
decoration: BoxDecoration(
color: theme.colorScheme.primary.withValues(alpha: 0.1),
borderRadius: BorderRadius.circular(12),
),
child: Icon(
Icons.sports_esports,
size: 36,
color: theme.colorScheme.primary,
),
),
const SizedBox(width: AppSpacing.m),
Expanded(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
'PlayMate',
style: theme.textTheme.headlineLarge?.copyWith(
fontWeight: FontWeight.w900,
letterSpacing: -0.5,
),
),
Text(
'Everything you need for offline games.',
style: theme.textTheme.titleMedium?.copyWith(
color: theme.colorScheme.secondary,
fontWeight: FontWeight.w500,
),
),
],
),
),
],
),
const SizedBox(height: AppSpacing.m),
Text(
'PlayMate combines common physical-game utilities into one seamless, ad-free toolkit. '
'Never worry about missing dice, lost scorepads, disputed coin tosses, or unorganized teams during game nights and sports matches.',
'PlayMate combines physical tabletop and outdoor sports utilities into one seamless, ad-free toolkit. '
'Never worry about missing dice, lost scorepads, disputed coin tosses, or unorganized teams during game nights.',
style: theme.textTheme.bodyMedium?.copyWith(
height: 1.5,
),
Expand Down Expand Up @@ -111,7 +129,7 @@ class AboutScreen extends ConsumerWidget {
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
'Developed by',
'DESIGNED & DEVELOPED BY',
style: theme.textTheme.bodySmall?.copyWith(
color: theme.colorScheme.secondary,
fontWeight: FontWeight.bold,
Expand All @@ -120,20 +138,29 @@ class AboutScreen extends ConsumerWidget {
),
const SizedBox(height: AppSpacing.xs),
Text(
'Sundramdotdev',
ExternalLinks.developerName,
style: theme.textTheme.titleLarge?.copyWith(
fontWeight: FontWeight.bold,
),
),
const SizedBox(height: AppSpacing.m),
const Divider(height: 1),
ListTile(
contentPadding: EdgeInsets.zero,
leading: const Icon(Icons.language),
title: const Text('Official Website'),
subtitle: const Text('sundramdotdev.xyz'),
trailing: const Icon(Icons.open_in_new, size: 18),
onTap: () => ExternalLinks.openUrl(ExternalLinks.websiteUrl),
),
const Divider(height: 1),
ListTile(
contentPadding: EdgeInsets.zero,
leading: const Icon(Icons.code),
title: const Text('GitHub'),
subtitle: const Text('github.com/sundramdotdev'),
trailing: const Icon(Icons.open_in_new, size: 18),
onTap: () => openExternalUrl(githubUrl),
onTap: () => ExternalLinks.openUrl(ExternalLinks.githubUrl),
),
const Divider(height: 1),
ListTile(
Expand All @@ -142,7 +169,16 @@ class AboutScreen extends ConsumerWidget {
title: const Text('LinkedIn'),
subtitle: const Text('linkedin.com/in/sundramdotdev'),
trailing: const Icon(Icons.open_in_new, size: 18),
onTap: () => openExternalUrl(linkedinUrl),
onTap: () => ExternalLinks.openUrl(ExternalLinks.linkedinUrl),
),
const Divider(height: 1),
ListTile(
contentPadding: EdgeInsets.zero,
leading: const Icon(Icons.folder_zip_outlined),
title: const Text('PlayMate Repository'),
subtitle: const Text('github.com/sundramdotdev/playmate'),
trailing: const Icon(Icons.open_in_new, size: 18),
onTap: () => ExternalLinks.openUrl(ExternalLinks.repositoryUrl),
),
const Divider(height: 1),
ListTile(
Expand All @@ -151,7 +187,7 @@ class AboutScreen extends ConsumerWidget {
title: const Text('Instagram'),
subtitle: const Text('@devsundram_'),
trailing: const Icon(Icons.open_in_new, size: 18),
onTap: () => openExternalUrl(instagramUrl),
onTap: () => ExternalLinks.openUrl(ExternalLinks.instagramUrl),
),
],
),
Expand All @@ -165,7 +201,7 @@ class AboutScreen extends ConsumerWidget {
children: [
ListTile(
leading: const Icon(Icons.new_releases_outlined),
title: const Text('What\'s New'),
title: const Text('What\'s New in 1.1.0'),
trailing: const Icon(Icons.chevron_right),
onTap: () => context.push('/changelog'),
),
Expand Down
Loading
Loading