Skip to content

Commit c34731d

Browse files
committed
Merge branch 'develop'
2 parents a5fe54a + 3d83357 commit c34731d

22 files changed

Lines changed: 168 additions & 172 deletions

.github/workflows/flatpak.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ jobs:
9090
draft: false
9191
prerelease: false
9292
title: "Latest Release"
93-
automatic_release_tag: "v5.0.189"
93+
automatic_release_tag: "v5.0.190"
9494
files: |
9595
${{ github.workspace }}/artifacts/Invoice-Ninja-Archive
9696
${{ github.workspace }}/artifacts/Invoice-Ninja-Hash

.github/workflows/snapcraft.yml

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ jobs:
1818
- name: Install Flutter dependencies
1919
run: |
2020
sudo apt-get update
21-
sudo apt-get install -y libgtk-3-dev libx11-dev pkg-config cmake ninja-build libblkid-dev libcurl4-openssl-dev
21+
sudo apt-get install -y libgtk-3-dev libx11-dev pkg-config cmake ninja-build libblkid-dev libcurl4-openssl-dev execstack
2222
2323
- name: Setup Flutter
2424
uses: subosito/flutter-action@v2
@@ -34,14 +34,22 @@ jobs:
3434
echo ";" >> lib/flutter_version.dart
3535
flutter pub get
3636
flutter config --enable-linux-desktop
37+
flutter build linux --release -t lib/main.dart
38+
execstack --clear-execstack build/linux/x64/release/bundle/lib/crashpad_handler
39+
execstack --clear-execstack build/linux/x64/release/bundle/lib/libsentry.so
3740
3841
- name: Install Snapcraft
39-
run: sudo snap install snapcraft --classic --channel=7.x/stable
42+
run: |
43+
sudo snap install snapcraft --classic --channel=7.x/stable
44+
sudo snap install core22
45+
sudo snap install gnome-42-2204
46+
sudo snap install gnome-42-2204-sdk
47+
sudo snap install gtk-common-themes
4048
4149
- name: Build Snap
4250
env:
4351
SNAPCRAFT_BUILD_ENVIRONMENT: host
44-
run: snapcraft snap --output invoiceninja.snap
52+
run: snapcraft pack --output invoiceninja.snap
4553

4654
- name: Publish to Snap Store
4755
env:

flatpak/com.invoiceninja.InvoiceNinja.metainfo.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@
5050
</screenshots>
5151
<content_rating type="oars-1.1"/>
5252
<releases>
53+
<release version="5.0.190" date="2026-05-04"/>
5354
<release version="5.0.189" date="2026-04-19"/>
5455
<release version="5.0.188" date="2026-04-15"/>
5556
<release version="5.0.187" date="2026-04-14"/>

ios/Podfile.lock

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ PODS:
5353
- FlutterMacOS
5454
- GoogleSignIn (~> 9.0)
5555
- GTMSessionFetcher (>= 3.4.0)
56-
- GoogleSignIn (9.0.0):
56+
- GoogleSignIn (9.1.0):
5757
- AppAuth (~> 2.0)
5858
- AppCheckCore (~> 11.0)
5959
- GTMAppAuth (~> 5.0)
@@ -235,8 +235,8 @@ SPEC CHECKSUMS:
235235
DKPhotoGallery: b3834fecb755ee09a593d7c9e389d8b5d6deed60
236236
file_picker: b159e0c068aef54932bb15dc9fd1571818edaf49
237237
Flutter: cabc95a1d2626b1b06e7179b784ebcf0c0cde467
238-
google_sign_in_ios: 4bb0e529b167cadc6ac785b6ed943c0a0a4cc1c9
239-
GoogleSignIn: c7f09cfbc85a1abf69187be091997c317cc33b77
238+
google_sign_in_ios: 7336a3372ea93ea56a21e126a0055ffca3723601
239+
GoogleSignIn: fcee2257188d5eda57a5e2b6a715550ffff9206d
240240
GoogleUtilities: 00c88b9a86066ef77f0da2fab05f65d7768ed8e1
241241
GTMAppAuth: 217a876b249c3c585a54fd6f73e6b58c4f5c4238
242242
GTMSessionFetcher: 5aea5ba6bd522a239e236100971f10cb71b96ab6

ios/Runner.xcodeproj/project.pbxproj

Lines changed: 43 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
/* Begin PBXBuildFile section */
1010
1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; };
11-
266B0F2DBA9D63371752809D /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FEF7E630FCCD255CC1144C6A /* Pods_Runner.framework */; };
11+
1A9820653713EE44C3FEAD4F /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 532B492690D46AEB489DEA74 /* Pods_Runner.framework */; };
1212
3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; };
1313
74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; };
1414
97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; };
@@ -33,8 +33,9 @@
3333
/* Begin PBXFileReference section */
3434
1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = "<group>"; };
3535
1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = "<group>"; };
36+
21CDC821E3FDC1BA02C7E968 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = "<group>"; };
3637
3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = "<group>"; };
37-
4D1F62D518B01FB6E5D0DB36 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = "<group>"; };
38+
532B492690D46AEB489DEA74 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; };
3839
74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = "<group>"; };
3940
74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
4041
7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = "<group>"; };
@@ -45,19 +46,18 @@
4546
97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
4647
97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
4748
97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
48-
B6E088FA6EC5C3F99930EEA1 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = "<group>"; };
49-
E6FC37E3F94A42E7F3EBB5F4 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = "<group>"; };
49+
E016049FDD88CC93F9B6C32C /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = "<group>"; };
50+
F00ED32CA6336863F258E97F /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = "<group>"; };
5051
F94D2F3628E01FAB009B40A4 /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = "<group>"; };
5152
F9F733A7287AF09B0070ACD5 /* Runner.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Runner.entitlements; sourceTree = "<group>"; };
52-
FEF7E630FCCD255CC1144C6A /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; };
5353
/* End PBXFileReference section */
5454

5555
/* Begin PBXFrameworksBuildPhase section */
5656
97C146EB1CF9000F007C117D /* Frameworks */ = {
5757
isa = PBXFrameworksBuildPhase;
5858
buildActionMask = 2147483647;
5959
files = (
60-
266B0F2DBA9D63371752809D /* Pods_Runner.framework in Frameworks */,
60+
1A9820653713EE44C3FEAD4F /* Pods_Runner.framework in Frameworks */,
6161
);
6262
runOnlyForDeploymentPostprocessing = 0;
6363
};
@@ -67,13 +67,21 @@
6767
1A98CB7A56015335E2549464 /* Pods */ = {
6868
isa = PBXGroup;
6969
children = (
70-
E6FC37E3F94A42E7F3EBB5F4 /* Pods-Runner.debug.xcconfig */,
71-
B6E088FA6EC5C3F99930EEA1 /* Pods-Runner.release.xcconfig */,
72-
4D1F62D518B01FB6E5D0DB36 /* Pods-Runner.profile.xcconfig */,
70+
E016049FDD88CC93F9B6C32C /* Pods-Runner.debug.xcconfig */,
71+
F00ED32CA6336863F258E97F /* Pods-Runner.release.xcconfig */,
72+
21CDC821E3FDC1BA02C7E968 /* Pods-Runner.profile.xcconfig */,
7373
);
7474
path = Pods;
7575
sourceTree = "<group>";
7676
};
77+
4496B776D5FACA5328EFEAE7 /* Frameworks */ = {
78+
isa = PBXGroup;
79+
children = (
80+
532B492690D46AEB489DEA74 /* Pods_Runner.framework */,
81+
);
82+
name = Frameworks;
83+
sourceTree = "<group>";
84+
};
7785
9740EEB11CF90186004384FC /* Flutter */ = {
7886
isa = PBXGroup;
7987
children = (
@@ -92,7 +100,7 @@
92100
97C146F01CF9000F007C117D /* Runner */,
93101
97C146EF1CF9000F007C117D /* Products */,
94102
1A98CB7A56015335E2549464 /* Pods */,
95-
C3BC3D0BB5E16DE83E011CCE /* Frameworks */,
103+
4496B776D5FACA5328EFEAE7 /* Frameworks */,
96104
);
97105
sourceTree = "<group>";
98106
};
@@ -121,30 +129,22 @@
121129
path = Runner;
122130
sourceTree = "<group>";
123131
};
124-
C3BC3D0BB5E16DE83E011CCE /* Frameworks */ = {
125-
isa = PBXGroup;
126-
children = (
127-
FEF7E630FCCD255CC1144C6A /* Pods_Runner.framework */,
128-
);
129-
name = Frameworks;
130-
sourceTree = "<group>";
131-
};
132132
/* End PBXGroup section */
133133

134134
/* Begin PBXNativeTarget section */
135135
97C146ED1CF9000F007C117D /* Runner */ = {
136136
isa = PBXNativeTarget;
137137
buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */;
138138
buildPhases = (
139-
99B6FA8AAAAE209258FB3DDF /* [CP] Check Pods Manifest.lock */,
139+
63B695FC289553C8761887E0 /* [CP] Check Pods Manifest.lock */,
140140
9740EEB61CF901F6004384FC /* Run Script */,
141141
97C146EA1CF9000F007C117D /* Sources */,
142142
97C146EB1CF9000F007C117D /* Frameworks */,
143143
97C146EC1CF9000F007C117D /* Resources */,
144144
9705A1C41CF9048500538489 /* Embed Frameworks */,
145145
3B06AD1E1E4923F5004D2608 /* Thin Binary */,
146-
BF7C1F8639D4505C503E67EF /* [CP] Embed Pods Frameworks */,
147-
3E0BA3A20B86A31EC1FC163D /* [CP] Copy Pods Resources */,
146+
93D7F417B8C6836EC9C879DF /* [CP] Embed Pods Frameworks */,
147+
31FCD542DBE953BC437EE30D /* [CP] Copy Pods Resources */,
148148
);
149149
buildRules = (
150150
);
@@ -204,23 +204,7 @@
204204
/* End PBXResourcesBuildPhase section */
205205

206206
/* Begin PBXShellScriptBuildPhase section */
207-
3B06AD1E1E4923F5004D2608 /* Thin Binary */ = {
208-
isa = PBXShellScriptBuildPhase;
209-
alwaysOutOfDate = 1;
210-
buildActionMask = 2147483647;
211-
files = (
212-
);
213-
inputPaths = (
214-
"${TARGET_BUILD_DIR}/${INFOPLIST_PATH}",
215-
);
216-
name = "Thin Binary";
217-
outputPaths = (
218-
);
219-
runOnlyForDeploymentPostprocessing = 0;
220-
shellPath = /bin/sh;
221-
shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin";
222-
};
223-
3E0BA3A20B86A31EC1FC163D /* [CP] Copy Pods Resources */ = {
207+
31FCD542DBE953BC437EE30D /* [CP] Copy Pods Resources */ = {
224208
isa = PBXShellScriptBuildPhase;
225209
buildActionMask = 2147483647;
226210
files = (
@@ -237,22 +221,23 @@
237221
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n";
238222
showEnvVarsInLog = 0;
239223
};
240-
9740EEB61CF901F6004384FC /* Run Script */ = {
224+
3B06AD1E1E4923F5004D2608 /* Thin Binary */ = {
241225
isa = PBXShellScriptBuildPhase;
242226
alwaysOutOfDate = 1;
243227
buildActionMask = 2147483647;
244228
files = (
245229
);
246230
inputPaths = (
231+
"${TARGET_BUILD_DIR}/${INFOPLIST_PATH}",
247232
);
248-
name = "Run Script";
233+
name = "Thin Binary";
249234
outputPaths = (
250235
);
251236
runOnlyForDeploymentPostprocessing = 0;
252237
shellPath = /bin/sh;
253-
shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build";
238+
shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin";
254239
};
255-
99B6FA8AAAAE209258FB3DDF /* [CP] Check Pods Manifest.lock */ = {
240+
63B695FC289553C8761887E0 /* [CP] Check Pods Manifest.lock */ = {
256241
isa = PBXShellScriptBuildPhase;
257242
buildActionMask = 2147483647;
258243
files = (
@@ -274,7 +259,7 @@
274259
shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
275260
showEnvVarsInLog = 0;
276261
};
277-
BF7C1F8639D4505C503E67EF /* [CP] Embed Pods Frameworks */ = {
262+
93D7F417B8C6836EC9C879DF /* [CP] Embed Pods Frameworks */ = {
278263
isa = PBXShellScriptBuildPhase;
279264
buildActionMask = 2147483647;
280265
files = (
@@ -291,6 +276,21 @@
291276
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n";
292277
showEnvVarsInLog = 0;
293278
};
279+
9740EEB61CF901F6004384FC /* Run Script */ = {
280+
isa = PBXShellScriptBuildPhase;
281+
alwaysOutOfDate = 1;
282+
buildActionMask = 2147483647;
283+
files = (
284+
);
285+
inputPaths = (
286+
);
287+
name = "Run Script";
288+
outputPaths = (
289+
);
290+
runOnlyForDeploymentPostprocessing = 0;
291+
shellPath = /bin/sh;
292+
shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build";
293+
};
294294
/* End PBXShellScriptBuildPhase section */
295295

296296
/* Begin PBXSourcesBuildPhase section */

lib/constants.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ class Constants {
66
}
77

88
// TODO remove version once #46609 is fixed
9-
const String kClientVersion = '5.0.189';
9+
const String kClientVersion = '5.0.190';
1010
const String kMinServerVersion = '5.0.4';
1111

1212
const String kAppName = 'Invoice Ninja';

lib/data/models/transaction_rule_model.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,8 @@ abstract class TransactionRuleCriteriaEntity
201201

202202
static const SEARCH_KEY_DESCRIPTION = 'description';
203203
static const SEARCH_KEY_AMOUNT = 'amount';
204+
static const SEARCH_KEY_PARTICIPANT = 'participant';
205+
static const SEARCH_KEY_PARTICIPANT_NAME = 'participant_name';
204206

205207
static const SEARCH_KEY_CLIENT_EMAIL = 'client.email';
206208
static const SEARCH_KEY_CLIENT_ID_NUMBER = 'client.id_number';

lib/data/repositories/auth_repository.dart

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -60,18 +60,23 @@ class AuthRepository {
6060
String? lastName = '',
6161
String? email = '',
6262
}) async {
63-
final credentials = {
63+
final credentials = <String, dynamic>{
6464
'terms_of_service': true,
6565
'privacy_policy': true,
6666
'token_name': _tokenName,
67-
'id_token': idToken,
6867
'access_token': accessToken,
6968
'provider': provider,
7069
'platform': getPlatformName(),
7170
'first_name': firstName,
7271
'last_name': lastName,
7372
'email': email,
7473
};
74+
// Only send id_token when populated. Laravel's request()->has() returns
75+
// true for null/empty values too, so an absent key is the only way to
76+
// route the backend through the access_token branch.
77+
if (idToken != null && idToken.isNotEmpty) {
78+
credentials['id_token'] = idToken;
79+
}
7580

7681
return sendRequest(
7782
url: formatApiUrl(url) + '/oauth_login?create=true&rc=$referralCode',
@@ -114,13 +119,16 @@ class AuthRepository {
114119
required String? email,
115120
required String? authCode,
116121
}) async {
117-
final credentials = {
118-
'id_token': idToken,
122+
final credentials = <String, dynamic>{
119123
'provider': provider,
120124
'access_token': accessToken,
121125
'email': email,
122126
'auth_code': authCode,
123127
};
128+
// Only send id_token when populated; see oauthSignUp for rationale.
129+
if (idToken != null && idToken.isNotEmpty) {
130+
credentials['id_token'] = idToken;
131+
}
124132
url = formatApiUrl(url) + '/oauth_login';
125133

126134
return sendRequest(url: url, data: credentials, secret: secret);

lib/data/repositories/transaction_rule_repository.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ class TransactionRuleRepository {
2828

2929
Future<BuiltList<TransactionRuleEntity>> loadList(
3030
Credentials credentials) async {
31-
final String url = credentials.url + '/bnak_transaction_rules?';
31+
final String url = credentials.url + '/bank_transaction_rules?';
3232
final dynamic response = await webClient.get(url, credentials.token);
3333

3434
final TransactionRuleListResponse transactionRuleResponse = serializers

lib/ui/auth/login_vm.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,7 @@ class LoginVM {
174174
try {
175175
await GoogleOAuth.signOut();
176176
final signedIn = await GoogleOAuth.signIn((idToken, accessToken) {
177-
if (idToken.isEmpty || accessToken.isEmpty) {
177+
if (accessToken.isEmpty) {
178178
GoogleOAuth.signOut();
179179
completer.completeError(
180180
AppLocalization.of(context)!.anErrorOccurredTryAgain);
@@ -208,7 +208,7 @@ class LoginVM {
208208
try {
209209
await GoogleOAuth.signOut();
210210
final signedIn = await GoogleOAuth.signUp((idToken, accessToken) {
211-
if (idToken.isEmpty || accessToken.isEmpty) {
211+
if (accessToken.isEmpty) {
212212
GoogleOAuth.signOut();
213213
completer.completeError(
214214
AppLocalization.of(context)!.anErrorOccurredTryAgain);

0 commit comments

Comments
 (0)