Skip to content

Commit e1e91bc

Browse files
author
maru
committed
refactor: Introduce AppOpenPlatform
1 parent d8f517d commit e1e91bc

File tree

8 files changed

+75
-30
lines changed

8 files changed

+75
-30
lines changed

example/lib/main.dart

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import 'package:flutter/material.dart';
2+
23
import 'nstack.dart';
34

45
void main() {
@@ -18,17 +19,18 @@ class MainScreen extends StatelessWidget {
1819
@override
1920
Widget build(BuildContext context) {
2021
return NStackAppOpen(
21-
platformOverride: "android",
22+
platformOverride: AppOpenPlatform.android,
2223
child: Scaffold(
2324
appBar: AppBar(
2425
title: Text(context.localization.test.testDollarSign),
2526
),
2627
body: Center(
27-
child: MaterialButton(onPressed: () async => {
28-
NStackScope.of(context).changeLanguage(Locale("de-DE"))
29-
},
30-
child: Text("Selected locale: ${NStackScope.of(context).nstack.activeLanguage.name}")
31-
,),
28+
child: MaterialButton(
29+
onPressed: () async =>
30+
{NStackScope.of(context).changeLanguage(Locale("de-DE"))},
31+
child: Text(
32+
"Selected locale: ${NStackScope.of(context).nstack.activeLanguage.name}"),
33+
),
3234
),
3335
),
3436
);

example/lib/nstack.dart

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,15 @@
22
33
import 'package:flutter/foundation.dart';
44
import 'package:flutter/widgets.dart';
5+
import 'package:nstack/models/app_open_platform.dart';
56
import 'package:nstack/models/language.dart';
67
import 'package:nstack/models/localize_index.dart';
78
import 'package:nstack/models/nstack_config.dart';
89
import 'package:nstack/nstack.dart';
910
import 'package:nstack/partial/section_key_delegate.dart';
1011

12+
export 'package:nstack/models/app_open_platform.dart';
13+
1114
// Update this file by running:
1215
// - `flutter pub run build_runner build`, if your package depends on Flutter
1316
// - `pub run build_runner build` otherwise
@@ -29,7 +32,7 @@ class _DefaultSection extends SectionKeyDelegate {
2932
class _Test extends SectionKeyDelegate {
3033
const _Test(): super('test');
3134

32-
String get testDollarSign => get('testDollarSign', "\$testing again");
35+
String get testDollarSign => get('testDollarSign', "\$testing again sdfsdf");
3336
String get testSingleQuotationMark => get('testSingleQuotationMark', "\'testing\'");
3437
String get testDoubleQuotationMark => get('testDoubleQuotationMark', "\"testing\"");
3538
String get testMultipleLines => get('testMultipleLines', "testing\nmultiple\nlines");
@@ -43,7 +46,7 @@ final _languages = [
4346
];
4447

4548
const _bundledTranslations = {
46-
'en-EN': r'''{"data":{"default":{"title":"NStack SDK Demo","test":"test"},"test":{"testDollarSign":"$testing again","testSingleQuotationMark":"'testing'","testDoubleQuotationMark":"\"testing\"","testMultipleLines":"testing\nmultiple\nlines"}},"meta":{"language":{"id":56,"name":"English","locale":"en-EN","direction":"LRM","is_default":false,"is_best_fit":false},"platform":{"id":515,"slug":"mobile"}}}''',
49+
'en-EN': r'''{"data":{"default":{"title":"NStack SDK Demo","test":"test"},"test":{"testDollarSign":"$testing again sdfsdf","testSingleQuotationMark":"'testing'","testDoubleQuotationMark":"\"testing\"","testMultipleLines":"testing\nmultiple\nlines"}},"meta":{"language":{"id":56,"name":"English","locale":"en-EN","direction":"LRM","is_default":false,"is_best_fit":false},"platform":{"id":515,"slug":"mobile"}}}''',
4750
'de-AT': r'''{"data":{"default":{"title":"NStack SDK Demo","test":"test"},"test":{"testDollarSign":"__testDollarSign","testSingleQuotationMark":"__testSingleQuotationMark","testDoubleQuotationMark":"__testDoubleQuotationMark","testMultipleLines":"__testMultipleLines"}},"meta":{"language":{"id":7,"name":"German (Austria)","locale":"de-AT","direction":"LRM","is_default":false,"is_best_fit":false},"platform":{"id":515,"slug":"mobile"}}}''',
4851
};
4952

@@ -90,7 +93,7 @@ class NStackState extends State<NStackWidget> {
9093
await _nstack.changeLocalization(locale).whenComplete(() => setState(() {}));
9194
}
9295

93-
Future<void> appOpen(Locale locale, {String? platformOverride}) async {
96+
Future<void> appOpen(Locale locale, {AppOpenPlatform? platformOverride}) async {
9497
await _nstack.appOpen(locale, platformOverride: platformOverride).whenComplete(() => setState(() {}));
9598
}
9699

@@ -110,7 +113,7 @@ class NStackAppOpen extends StatefulWidget {
110113

111114
final Widget child;
112115
final VoidCallback? onComplete;
113-
final String? platformOverride;
116+
final AppOpenPlatform? platformOverride;
114117

115118
@override
116119
_NStackAppOpenState createState() => _NStackAppOpenState();

example/pubspec.lock

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -302,7 +302,7 @@ packages:
302302
path: ".."
303303
relative: true
304304
source: path
305-
version: "0.4.0"
305+
version: "0.4.1"
306306
package_config:
307307
dependency: transitive
308308
description:

lib/models/app_open_platform.dart

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
/// See https://github.com/nstack-io/nstack-server/blob/master/project/Models/AppOpens/Validation/AppOpenValidator.php
2+
enum AppOpenPlatform {
3+
ios,
4+
android,
5+
windows,
6+
web,
7+
unknown,
8+
}
9+
10+
extension AppOpenPlatformExtensions on AppOpenPlatform {
11+
String get slug {
12+
switch (this) {
13+
case AppOpenPlatform.ios:
14+
return 'ios';
15+
case AppOpenPlatform.android:
16+
return 'android';
17+
case AppOpenPlatform.windows:
18+
return 'windows';
19+
case AppOpenPlatform.web:
20+
return 'web';
21+
case AppOpenPlatform.unknown:
22+
return 'unknown';
23+
}
24+
}
25+
}

lib/models/nstack_appopen_data.dart

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
1+
import 'package:nstack/models/app_open_platform.dart';
2+
13
class NStackAppOpenData {
2-
final String platform;
4+
final AppOpenPlatform platform;
35
final String guid;
46
final String version;
57
final String oldVersion;

lib/nstack.dart

Lines changed: 24 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import 'dart:io';
44
import 'package:flutter/foundation.dart' as Foundation;
55
import 'package:flutter/widgets.dart';
66
import 'package:nstack/models/app_open.dart';
7+
import 'package:nstack/models/app_open_platform.dart';
78
import 'package:nstack/models/language.dart';
89
import 'package:nstack/models/language_response.dart';
910
import 'package:nstack/models/localize_index.dart';
@@ -28,7 +29,8 @@ class NStack<T> {
2829
late NStackAppOpenData _appOpenData;
2930
final bool debug;
3031

31-
List<Language> get availableLanguages => LocalizationRepository().availableLanguages;
32+
List<Language> get availableLanguages =>
33+
LocalizationRepository().availableLanguages;
3234

3335
Language get activeLanguage => LocalizationRepository().pickedLanguage;
3436

@@ -59,13 +61,13 @@ class NStack<T> {
5961
);
6062
}
6163

62-
Future<void> _setupAppOpenData(String? platformOverride) async {
64+
Future<void> _setupAppOpenData(AppOpenPlatform? platformOverride) async {
6365
WidgetsFlutterBinding.ensureInitialized();
6466
final prefs = await SharedPreferences.getInstance();
6567
String projectVersion;
6668
String guid;
6769
String lastUpdated;
68-
String platform;
70+
AppOpenPlatform platform;
6971

7072
projectVersion = await PackageInfo.fromPlatform()
7173
.then((PackageInfo info) => info.version)
@@ -85,15 +87,14 @@ class NStack<T> {
8587

8688
if (!Foundation.kIsWeb) {
8789
if (Platform.isAndroid) {
88-
platform = 'android';
90+
platform = AppOpenPlatform.android;
8991
} else if (Platform.isIOS) {
90-
platform = 'ios';
92+
platform = AppOpenPlatform.ios;
9193
} else {
92-
//need to update when new platforms come
93-
platform = 'unknown';
94+
platform = AppOpenPlatform.unknown;
9495
}
9596
} else {
96-
platform = 'web';
97+
platform = AppOpenPlatform.web;
9798
}
9899

99100
_appOpenData = NStackAppOpenData(
@@ -171,7 +172,10 @@ class NStack<T> {
171172
}
172173
}
173174

174-
Future<AppOpenResult> appOpen(Locale locale, {String? platformOverride}) async {
175+
Future<AppOpenResult> appOpen(
176+
Locale locale, {
177+
AppOpenPlatform? platformOverride,
178+
}) async {
175179
try {
176180
if (_appOpenCalled) {
177181
_log("NStack.appOpen() has already been called, returning early...");
@@ -183,8 +187,9 @@ class NStack<T> {
183187
// Has user selected a language in the app?
184188
final prefs = await SharedPreferences.getInstance();
185189
var languageTag = locale.toLanguageTag();
186-
if(prefs.containsKey(_prefsSelectedLocale)) {
187-
languageTag = prefs.getString(_prefsSelectedLocale) ?? locale.toLanguageTag();
190+
if (prefs.containsKey(_prefsSelectedLocale)) {
191+
languageTag =
192+
prefs.getString(_prefsSelectedLocale) ?? locale.toLanguageTag();
188193
_log("NStack --> User has overwritten device locale to: $languageTag");
189194
}
190195

@@ -206,7 +211,8 @@ class NStack<T> {
206211
final nstackKey = 'nstack_lang_${bestFitLanguage?.language?.locale}';
207212

208213
// Fetch from the server or use the cache?
209-
if (bestFitLanguage?.shouldUpdate == true || !prefs.containsKey(nstackKey)) {
214+
if (bestFitLanguage?.shouldUpdate == true ||
215+
!prefs.containsKey(nstackKey)) {
210216
// Fetch best fit language from the server
211217
_log(
212218
'NStack --> Fetching best fit language: ${bestFitLanguage!.language!.locale}');
@@ -241,8 +247,10 @@ class NStack<T> {
241247
);
242248
// No cache, default values (this shouldn't happen, should_update should be true)
243249
} else {
244-
_log('NStack --> WARNING: No cache found for best fit language: ${bestFitLanguage?.language?.locale}');
245-
LocalizationRepository().switchBundledLocalization(bestFitLanguage!.language!.locale!);
250+
_log(
251+
'NStack --> WARNING: No cache found for best fit language: ${bestFitLanguage?.language?.locale}');
252+
LocalizationRepository()
253+
.switchBundledLocalization(bestFitLanguage!.language!.locale!);
246254
}
247255
}
248256

@@ -251,7 +259,8 @@ class NStack<T> {
251259
return AppOpenResult.success;
252260
} catch (e, s) {
253261
_appOpenCalled = true;
254-
LocalizationRepository().switchBundledLocalization(locale.toLanguageTag());
262+
LocalizationRepository()
263+
.switchBundledLocalization(locale.toLanguageTag());
255264
_log('NStack --> App Open failed because of: ${e.toString()}');
256265
_log(s.toString());
257266
return AppOpenResult.failed;

lib/src/nstack_builder.dart

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -90,12 +90,15 @@ class NstackBuilder implements Builder {
9090
9191
import 'package:flutter/foundation.dart';
9292
import 'package:flutter/widgets.dart';
93+
import 'package:nstack/models/app_open_platform.dart';
9394
import 'package:nstack/models/language.dart';
9495
import 'package:nstack/models/localize_index.dart';
9596
import 'package:nstack/models/nstack_config.dart';
9697
import 'package:nstack/nstack.dart';
9798
import 'package:nstack/partial/section_key_delegate.dart';
9899
100+
export 'package:nstack/models/app_open_platform.dart';
101+
99102
// Update this file by running:
100103
// - `flutter pub run build_runner build`, if your package depends on Flutter
101104
// - `pub run build_runner build` otherwise
@@ -262,7 +265,7 @@ class NStackState extends State<NStackWidget> {
262265
await _nstack.changeLocalization(locale).whenComplete(() => setState(() {}));
263266
}
264267
265-
Future<void> appOpen(Locale locale, {String? platformOverride}) async {
268+
Future<void> appOpen(Locale locale, {AppOpenPlatform? platformOverride}) async {
266269
await _nstack.appOpen(locale, platformOverride: platformOverride).whenComplete(() => setState(() {}));
267270
}
268271
@@ -282,7 +285,7 @@ class NStackAppOpen extends StatefulWidget {
282285
283286
final Widget child;
284287
final VoidCallback? onComplete;
285-
final String? platformOverride;
288+
final AppOpenPlatform? platformOverride;
286289
287290
@override
288291
_NStackAppOpenState createState() => _NStackAppOpenState();

lib/src/nstack_repository.dart

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import 'dart:convert';
22

33
import 'package:http/http.dart' as http;
4+
import 'package:nstack/models/app_open_platform.dart';
45
import 'package:nstack/models/localize_index.dart';
56
import 'package:nstack/models/nstack_appopen_data.dart';
67
import 'package:nstack/models/nstack_config.dart';
@@ -29,7 +30,7 @@ class NStackRepository {
2930
mutableHeaders['Accept-Language'] = acceptHeader;
3031

3132
final requestBody = <String, String>{
32-
'platform': appOpenData.platform,
33+
'platform': appOpenData.platform.slug,
3334
'guid': appOpenData.guid,
3435
'version': appOpenData.version,
3536
'old_version': appOpenData.oldVersion,

0 commit comments

Comments
 (0)