Skip to content

Commit 21f8ba1

Browse files
Merge pull request #94 from solguruz/develop
Bump version 1.0.6+6 into main
2 parents e182978 + af162bf commit 21f8ba1

484 files changed

Lines changed: 10652 additions & 1910 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.fvmrc

Lines changed: 0 additions & 3 deletions
This file was deleted.

.github/workflows/main.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ jobs:
4949
- name: 2.1 Set up Flutter SDK
5050
uses: subosito/flutter-action@v2.18.0
5151
with:
52-
flutter-version: '3.35.7'
52+
flutter-version: '3.41.9'
5353

5454
# 2.2 Tool Sanity Check
5555
# Confirm Flutter and Dart are installed properly (fail early)

README.md

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@
55
![Quality gate](https://sonarqube.solz.me/api/project_badges/quality_gate?project=Skelter-Flutter&token=sqb_85d4c55a7bc25fe595483b116c4cf8f58723cb10)
66
<br/>
77

8-
![Flutter](https://img.shields.io/badge/Flutter-v3.35.7-blue?logo=flutter)
9-
![Dart](https://img.shields.io/badge/Dart-3.9.2-blue?logo=dart)
8+
![Flutter](https://img.shields.io/badge/Flutter-v3.41.9-blue?logo=flutter)
9+
![Dart](https://img.shields.io/badge/Dart-3.11.5-blue?logo=dart)
1010
![Version](https://img.shields.io/badge/Version-1.0.4-blue)
1111
![Apache](https://img.shields.io/badge/license-Apache-purple.svg)
1212
<br/>
@@ -32,8 +32,8 @@ boiler plate code for rapid application development.
3232

3333
## Technology Stack
3434

35-
- **Flutter Version:** ^3.35.7
36-
- **Dart SDK:** ^3.9.2
35+
- **Flutter Version:** ^3.41.9
36+
- **Dart SDK:** ^3.11.5
3737
- **State Management:** BLoC
3838
- **Navigation:** Auto Route
3939
- **Backend Integration:** Firebase (Core, Analytics, Crashlytics, Auth)
@@ -86,7 +86,7 @@ flutter build ipa --export-method=ad-hoc --flavor prod --dart-define=APP_FLAVOR=
8686
Follow these steps to configure SSL pinning in your Flutter project.
8787

8888
1. **Add Certificate Hash Variables to `.env`**
89-
Add the SHA-256 SSL public key fingerprints for each flavor:
89+
Add the SHA-256 certificate fingerprints (hex, lowercase, no separators) for each flavor:
9090

9191
```
9292
CERT_HASH_DEV="add_your_dev_hash_here"
@@ -95,14 +95,17 @@ Follow these steps to configure SSL pinning in your Flutter project.
9595
```
9696

9797
2. **Get Your Certificate Hash**
98-
Run the following command (replace `yourdomain.com` with your API domain):
98+
Run the following command (replace `yourdomain.com` with your API domain).
99+
The `http_certificate_pinning` package expects the SHA-256 of the leaf
100+
certificate, encoded as a 64-character lowercase hex string with no
101+
separators:
99102

100103
```bash
101-
openssl s_client -connect yourdomain.com:443 -servername yourdomain.com </dev/null 2>/dev/null \
102-
| openssl x509 -pubkey -noout \
103-
| openssl pkey -pubin -outform DER \
104-
| openssl dgst -sha256 -binary \
105-
| openssl enc -base64
104+
echo | openssl s_client -servername yourdomain.com -connect yourdomain.com:443 2>/dev/null \
105+
| openssl x509 -fingerprint -sha256 -noout \
106+
| cut -d'=' -f2 \
107+
| tr -d ':' \
108+
| tr 'A-Z' 'a-z'
106109
```
107110

108111
**Example output:**
@@ -111,6 +114,8 @@ Follow these steps to configure SSL pinning in your Flutter project.
111114
```
112115
Copy this value into the matching `CERT_HASH_*` variable in your `.env` file.
113116

117+
> **Note:** This pins the leaf certificate. Public certificates (e.g. Let's Encrypt) rotate every 60–90 days, after which you must regenerate the hash. For longer-lived pinning, consider hashing an intermediate CA certificate instead.
118+
114119
3. **Use the Certificate Hash in Code**
115120
Add a method to fetch the correct hash for the current flavor:
116121

android/app/build.gradle

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ plugins {
1313
android {
1414
namespace = "com.solguruz.skelter"
1515
compileSdk = flutter.compileSdkVersion
16-
ndkVersion = "27.0.12077973"
16+
ndkVersion = "28.2.13676358"
1717

1818
compileOptions {
1919
sourceCompatibility = JavaVersion.VERSION_1_8
@@ -43,6 +43,7 @@ android {
4343
// TODO: Add your own signing config for the release build.
4444
// Signing with the debug keys for now, so `flutter run --release` works.
4545
signingConfig = signingConfigs.debug
46+
proguardFiles getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro"
4647
}
4748
}
4849

android/app/proguard-rules.pro

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
# Keep Flutter utility classes accessed reflectively by JNI-based plugins.
2+
# Without these rules R8 strips io.flutter.util.PathUtils in release builds,
3+
# which causes path_provider and similar plugins to throw ClassNotFoundException.
4+
-keep class io.flutter.util.** { *; }
5+
-keep class io.flutter.embedding.** { *; }
6+
-dontwarn io.flutter.embedding.**

lib/common/theme/text_style/app_text_styles.dart

Lines changed: 29 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -4,211 +4,211 @@ import 'package:skelter/gen/fonts.gen.dart';
44
class AppTextStyles {
55
static TextStyle h1 = const TextStyle(
66
fontSize: 29,
7-
fontWeight: FontWeight.w900,
7+
fontWeight: .w900,
88
fontFamily: FontFamily.inter,
99
height: 1.5,
1010
letterSpacing: -0.28,
1111
);
1212

1313
static TextStyle h2 = const TextStyle(
1414
fontSize: 24,
15-
fontWeight: FontWeight.w900,
15+
fontWeight: .w900,
1616
fontFamily: FontFamily.inter,
1717
height: 1.5,
1818
letterSpacing: -0.24,
1919
);
2020

2121
static TextStyle h2Bold = const TextStyle(
2222
fontSize: 24,
23-
fontWeight: FontWeight.w700,
23+
fontWeight: .w700,
2424
fontFamily: FontFamily.inter,
2525
height: 1.5,
2626
letterSpacing: -0.24,
2727
);
2828

2929
static TextStyle h3 = const TextStyle(
3030
fontSize: 18,
31-
fontWeight: FontWeight.w900,
31+
fontWeight: .w900,
3232
fontFamily: FontFamily.inter,
3333
height: 1.5,
3434
letterSpacing: -0.24,
3535
);
3636

3737
static TextStyle h3Medium = const TextStyle(
3838
fontSize: 20,
39-
fontWeight: FontWeight.w500,
39+
fontWeight: .w500,
4040
fontFamily: FontFamily.inter,
4141
height: 1.5,
4242
letterSpacing: -0.24,
4343
);
4444

4545
static TextStyle h5Bold = const TextStyle(
4646
fontSize: 24,
47-
fontWeight: FontWeight.w700,
47+
fontWeight: .w700,
4848
fontFamily: FontFamily.inter,
4949
height: 1.33,
5050
letterSpacing: -0.24,
5151
);
5252

5353
static TextStyle h6Medium = const TextStyle(
5454
fontSize: 18,
55-
fontWeight: FontWeight.w500,
55+
fontWeight: .w500,
5656
fontFamily: FontFamily.inter,
5757
height: 1.5,
5858
letterSpacing: -1,
5959
);
6060
static TextStyle h6Bold = const TextStyle(
6161
fontSize: 20,
62-
fontWeight: FontWeight.w700,
62+
fontWeight: .w700,
6363
fontFamily: FontFamily.inter,
6464
height: 1.5,
6565
letterSpacing: -1,
6666
);
6767

6868
static TextStyle h4SemiBold = const TextStyle(
6969
fontSize: 28,
70-
fontWeight: FontWeight.w600,
70+
fontWeight: .w600,
7171
fontFamily: FontFamily.inter,
7272
height: 36 / 28,
7373
letterSpacing: -0.28,
7474
);
7575

7676
static TextStyle h6SemiBold = const TextStyle(
7777
fontSize: 20,
78-
fontWeight: FontWeight.w600,
78+
fontWeight: .w600,
7979
fontFamily: FontFamily.inter,
8080
height: 1.5,
8181
letterSpacing: -1,
8282
);
8383

8484
static TextStyle p3Regular = const TextStyle(
8585
fontSize: 14,
86-
fontWeight: FontWeight.w400,
86+
fontWeight: .w400,
8787
fontFamily: FontFamily.inter,
8888
height: 1.5,
8989
);
9090

9191
static TextStyle p1Medium = const TextStyle(
9292
fontSize: 18,
93-
fontWeight: FontWeight.w500,
93+
fontWeight: .w500,
9494
fontFamily: FontFamily.inter,
9595
height: 1.5,
9696
);
9797

9898
static TextStyle p1SemiBold = const TextStyle(
9999
fontSize: 18,
100-
fontWeight: FontWeight.w600,
100+
fontWeight: .w600,
101101
fontFamily: FontFamily.inter,
102102
height: 1.5,
103103
);
104104

105105
static TextStyle p2Medium = const TextStyle(
106106
fontSize: 16,
107-
fontWeight: FontWeight.w500,
107+
fontWeight: .w500,
108108
fontFamily: FontFamily.inter,
109109
height: 1.5,
110110
);
111111

112112
static TextStyle p2Regular = const TextStyle(
113113
fontSize: 16,
114-
fontWeight: FontWeight.w400,
114+
fontWeight: .w400,
115115
fontFamily: FontFamily.inter,
116116
height: 1.5,
117117
);
118118

119119
static TextStyle p3Medium = const TextStyle(
120120
fontSize: 14,
121-
fontWeight: FontWeight.w500,
121+
fontWeight: .w500,
122122
fontFamily: FontFamily.inter,
123123
height: 1.5,
124124
);
125125

126126
static TextStyle p3SemiBold = const TextStyle(
127127
fontSize: 14,
128-
fontWeight: FontWeight.w600,
128+
fontWeight: .w600,
129129
fontFamily: FontFamily.inter,
130130
height: 1.5,
131131
);
132132

133133
static TextStyle p4Medium = const TextStyle(
134134
fontSize: 12,
135-
fontWeight: FontWeight.w500,
135+
fontWeight: .w500,
136136
fontFamily: FontFamily.inter,
137137
height: 1.5,
138138
);
139139

140140
static TextStyle p4Regular = const TextStyle(
141141
fontSize: 12,
142-
fontWeight: FontWeight.w400,
142+
fontWeight: .w400,
143143
fontFamily: FontFamily.inter,
144144
height: 1.5,
145145
);
146146

147147
static TextStyle p1Bold = const TextStyle(
148148
fontSize: 18,
149-
fontWeight: FontWeight.bold,
149+
fontWeight: .bold,
150150
fontFamily: FontFamily.inter,
151151
height: 1.5,
152152
);
153153

154154
static TextStyle p2Bold = const TextStyle(
155155
fontSize: 16,
156-
fontWeight: FontWeight.bold,
156+
fontWeight: .bold,
157157
fontFamily: FontFamily.inter,
158158
height: 1.5,
159159
);
160160

161161
static TextStyle p2SemiBold = const TextStyle(
162162
fontSize: 16,
163-
fontWeight: FontWeight.w600,
163+
fontWeight: .w600,
164164
fontFamily: FontFamily.inter,
165165
height: 1.5,
166166
);
167167

168168
static TextStyle p3Bold = const TextStyle(
169169
fontSize: 14,
170-
fontWeight: FontWeight.bold,
170+
fontWeight: .bold,
171171
fontFamily: FontFamily.inter,
172172
height: 1.5,
173173
);
174174
static TextStyle p4SemiBold = const TextStyle(
175175
fontSize: 12,
176-
fontWeight: FontWeight.w600,
176+
fontWeight: .w600,
177177
fontFamily: FontFamily.inter,
178178
height: 1.5,
179179
);
180180

181181
static TextStyle p4Bold = const TextStyle(
182182
fontSize: 12,
183-
fontWeight: FontWeight.bold,
183+
fontWeight: .bold,
184184
fontFamily: FontFamily.inter,
185185
height: 1.5,
186186
);
187187

188188
static TextStyle c1SemiBold = const TextStyle(
189189
fontSize: 10,
190-
fontWeight: FontWeight.w600,
190+
fontWeight: .w600,
191191
fontFamily: FontFamily.inter,
192192
height: 1.4,
193193
);
194194

195195
static TextStyle c2Regular = const TextStyle(
196196
fontSize: 10,
197-
fontWeight: FontWeight.w400,
197+
fontWeight: .w400,
198198
fontFamily: FontFamily.inter,
199199
height: 1.5,
200200
);
201201

202202
static TextStyle c2Medium = const TextStyle(
203203
fontSize: 10,
204-
fontWeight: FontWeight.w500,
204+
fontWeight: .w500,
205205
fontFamily: FontFamily.inter,
206206
height: 1.5,
207207
);
208208

209209
static TextStyle c2SemiBold = const TextStyle(
210210
fontSize: 10,
211-
fontWeight: FontWeight.w600,
211+
fontWeight: .w600,
212212
fontFamily: FontFamily.inter,
213213
height: 1.5,
214214
);

lib/constants/constants.dart

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,14 @@
11
const String kLogFileName = 'app.log';
22

3+
/// Play Store applicationId of the published Android app.
4+
/// Used by the in-app review flow to deep-link to the store listing.
5+
const String kGooglePlayIdentifier = 'com.solguruz.skelter';
6+
7+
/// Numeric App Store ID from App Store Connect (e.g. `'1234567890'`).
8+
/// Placeholder — replace before iOS release. Not read by the native review
9+
/// dialog (StoreKit uses bundle id); only consumed by `launchStore()`.
10+
const String kAppStoreIdentifier = '0000000000';
11+
312
const kMimeTypeVideo = 'video/';
413
const kMimeTypeImage = 'image/';
514
const kSVGWithDot = '.svg';

lib/core/services/app_tour_service.dart

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -78,8 +78,8 @@ class AppTourService {
7878
return Container(
7979
padding: const EdgeInsets.all(20),
8080
child: Column(
81-
mainAxisSize: MainAxisSize.min,
82-
crossAxisAlignment: CrossAxisAlignment.start,
81+
mainAxisSize: .min,
82+
crossAxisAlignment: .start,
8383
children: [
8484
Text(
8585
context.localization.tour_search_title,
@@ -96,7 +96,7 @@ class AppTourService {
9696
),
9797
const SizedBox(height: 20),
9898
Row(
99-
mainAxisAlignment: MainAxisAlignment.end,
99+
mainAxisAlignment: .end,
100100
children: [
101101
AppButton(
102102
onPressed: () => controller.skip(),
@@ -132,8 +132,8 @@ class AppTourService {
132132
return Container(
133133
padding: const EdgeInsets.all(20),
134134
child: Column(
135-
mainAxisSize: MainAxisSize.min,
136-
crossAxisAlignment: CrossAxisAlignment.start,
135+
mainAxisSize: .min,
136+
crossAxisAlignment: .start,
137137
children: [
138138
Text(
139139
context.localization.tour_nav_title,
@@ -150,7 +150,7 @@ class AppTourService {
150150
),
151151
const SizedBox(height: 20),
152152
Row(
153-
mainAxisAlignment: MainAxisAlignment.end,
153+
mainAxisAlignment: .end,
154154
children: [
155155
AppButton(
156156
onPressed: () => controller.next(),

0 commit comments

Comments
 (0)