Skip to content

Commit b1942c5

Browse files
authored
Merge pull request #142 from ryanaidilp/feature/table-webview-improvement
feat(example): implement dynamic height webview for static tables
2 parents 04ded3e + 0fac1a1 commit b1942c5

File tree

35 files changed

+6445
-4848
lines changed

35 files changed

+6445
-4848
lines changed

app/example/analysis_options.yaml

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
# The following line activates a set of recommended lints for Flutter apps,
99
# packages, and plugins designed to encourage good coding practices.
10-
include: package:flutter_lints/flutter.yaml
10+
include: package:very_good_analysis/analysis_options.yaml
1111

1212
linter:
1313
# The lint rules applied to this project can be customized in the
@@ -31,5 +31,14 @@ analyzer:
3131
errors:
3232
unused_element_parameter: ignore
3333
constant_identifier_names: ignore
34+
# treat missing required parameters as an error (not a hint)
35+
missing_required_param: error
36+
# treat missing returns as an error (not a hint)
37+
missing_return: error
38+
# Reassignment should be treated as warning (not a hint)
39+
parameter_assignments: warning
40+
invalid_annotation_target: ignore
41+
one_member_abstracts: ignore
42+
public_member_api_docs: ignore
3443
exclude:
3544
- "**/*.g.dart"

app/example/lib/core/generated/strings.g.dart

Lines changed: 152 additions & 109 deletions
Original file line numberDiff line numberDiff line change
@@ -27,66 +27,70 @@ part 'strings_en.g.dart';
2727
/// - Locale locale = AppLocale.en.flutterLocale // get flutter locale from enum
2828
/// - if (LocaleSettings.currentLocale == AppLocale.en) // locale check
2929
enum AppLocale with BaseAppLocale<AppLocale, Translations> {
30-
en(languageCode: 'en'),
31-
id(languageCode: 'id');
32-
33-
const AppLocale({
34-
required this.languageCode,
35-
this.scriptCode, // ignore: unused_element, unused_element_parameter
36-
this.countryCode, // ignore: unused_element, unused_element_parameter
37-
});
38-
39-
@override final String languageCode;
40-
@override final String? scriptCode;
41-
@override final String? countryCode;
42-
43-
@override
44-
Future<Translations> build({
45-
Map<String, Node>? overrides,
46-
PluralResolver? cardinalResolver,
47-
PluralResolver? ordinalResolver,
48-
}) async {
49-
switch (this) {
50-
case AppLocale.en:
51-
return TranslationsEn(
52-
overrides: overrides,
53-
cardinalResolver: cardinalResolver,
54-
ordinalResolver: ordinalResolver,
55-
);
56-
case AppLocale.id:
57-
await l_id.loadLibrary();
58-
return l_id.TranslationsId(
59-
overrides: overrides,
60-
cardinalResolver: cardinalResolver,
61-
ordinalResolver: ordinalResolver,
62-
);
63-
}
64-
}
65-
66-
@override
67-
Translations buildSync({
68-
Map<String, Node>? overrides,
69-
PluralResolver? cardinalResolver,
70-
PluralResolver? ordinalResolver,
71-
}) {
72-
switch (this) {
73-
case AppLocale.en:
74-
return TranslationsEn(
75-
overrides: overrides,
76-
cardinalResolver: cardinalResolver,
77-
ordinalResolver: ordinalResolver,
78-
);
79-
case AppLocale.id:
80-
return l_id.TranslationsId(
81-
overrides: overrides,
82-
cardinalResolver: cardinalResolver,
83-
ordinalResolver: ordinalResolver,
84-
);
85-
}
86-
}
87-
88-
/// Gets current instance managed by [LocaleSettings].
89-
Translations get translations => LocaleSettings.instance.getTranslations(this);
30+
en(languageCode: 'en'),
31+
id(languageCode: 'id');
32+
33+
const AppLocale({
34+
required this.languageCode,
35+
this.scriptCode, // ignore: unused_element, unused_element_parameter
36+
this.countryCode, // ignore: unused_element, unused_element_parameter
37+
});
38+
39+
@override
40+
final String languageCode;
41+
@override
42+
final String? scriptCode;
43+
@override
44+
final String? countryCode;
45+
46+
@override
47+
Future<Translations> build({
48+
Map<String, Node>? overrides,
49+
PluralResolver? cardinalResolver,
50+
PluralResolver? ordinalResolver,
51+
}) async {
52+
switch (this) {
53+
case AppLocale.en:
54+
return TranslationsEn(
55+
overrides: overrides,
56+
cardinalResolver: cardinalResolver,
57+
ordinalResolver: ordinalResolver,
58+
);
59+
case AppLocale.id:
60+
await l_id.loadLibrary();
61+
return l_id.TranslationsId(
62+
overrides: overrides,
63+
cardinalResolver: cardinalResolver,
64+
ordinalResolver: ordinalResolver,
65+
);
66+
}
67+
}
68+
69+
@override
70+
Translations buildSync({
71+
Map<String, Node>? overrides,
72+
PluralResolver? cardinalResolver,
73+
PluralResolver? ordinalResolver,
74+
}) {
75+
switch (this) {
76+
case AppLocale.en:
77+
return TranslationsEn(
78+
overrides: overrides,
79+
cardinalResolver: cardinalResolver,
80+
ordinalResolver: ordinalResolver,
81+
);
82+
case AppLocale.id:
83+
return l_id.TranslationsId(
84+
overrides: overrides,
85+
cardinalResolver: cardinalResolver,
86+
ordinalResolver: ordinalResolver,
87+
);
88+
}
89+
}
90+
91+
/// Gets current instance managed by [LocaleSettings].
92+
Translations get translations =>
93+
LocaleSettings.instance.getTranslations(this);
9094
}
9195

9296
/// Method A: Simple
@@ -115,10 +119,14 @@ Translations get t => LocaleSettings.instance.currentTranslations;
115119
/// final t = Translations.of(context); // Get t variable.
116120
/// String a = t.someKey.anotherKey; // Use t variable.
117121
/// String b = t['someKey.anotherKey']; // Only for edge cases!
118-
class TranslationProvider extends BaseTranslationProvider<AppLocale, Translations> {
119-
TranslationProvider({required super.child}) : super(settings: LocaleSettings.instance);
120-
121-
static InheritedLocaleData<AppLocale, Translations> of(BuildContext context) => InheritedLocaleData.of<AppLocale, Translations>(context);
122+
class TranslationProvider
123+
extends BaseTranslationProvider<AppLocale, Translations> {
124+
TranslationProvider({required super.child})
125+
: super(settings: LocaleSettings.instance);
126+
127+
static InheritedLocaleData<AppLocale, Translations> of(
128+
BuildContext context,
129+
) => InheritedLocaleData.of<AppLocale, Translations>(context);
122130
}
123131

124132
/// Method B shorthand via [BuildContext] extension method.
@@ -127,56 +135,91 @@ class TranslationProvider extends BaseTranslationProvider<AppLocale, Translation
127135
/// Usage (e.g. in a widget's build method):
128136
/// context.t.someKey.anotherKey
129137
extension BuildContextTranslationsExtension on BuildContext {
130-
Translations get t => TranslationProvider.of(this).translations;
138+
Translations get t => TranslationProvider.of(this).translations;
131139
}
132140

133141
/// Manages all translation instances and the current locale
134-
class LocaleSettings extends BaseFlutterLocaleSettings<AppLocale, Translations> {
135-
LocaleSettings._() : super(
136-
utils: AppLocaleUtils.instance,
137-
lazy: true,
138-
);
139-
140-
static final instance = LocaleSettings._();
141-
142-
// static aliases (checkout base methods for documentation)
143-
static AppLocale get currentLocale => instance.currentLocale;
144-
static Stream<AppLocale> getLocaleStream() => instance.getLocaleStream();
145-
static Future<AppLocale> setLocale(AppLocale locale, {bool? listenToDeviceLocale = false}) => instance.setLocale(locale, listenToDeviceLocale: listenToDeviceLocale);
146-
static Future<AppLocale> setLocaleRaw(String rawLocale, {bool? listenToDeviceLocale = false}) => instance.setLocaleRaw(rawLocale, listenToDeviceLocale: listenToDeviceLocale);
147-
static Future<AppLocale> useDeviceLocale() => instance.useDeviceLocale();
148-
static Future<void> setPluralResolver({String? language, AppLocale? locale, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver}) => instance.setPluralResolver(
149-
language: language,
150-
locale: locale,
151-
cardinalResolver: cardinalResolver,
152-
ordinalResolver: ordinalResolver,
153-
);
154-
155-
// synchronous versions
156-
static AppLocale setLocaleSync(AppLocale locale, {bool? listenToDeviceLocale = false}) => instance.setLocaleSync(locale, listenToDeviceLocale: listenToDeviceLocale);
157-
static AppLocale setLocaleRawSync(String rawLocale, {bool? listenToDeviceLocale = false}) => instance.setLocaleRawSync(rawLocale, listenToDeviceLocale: listenToDeviceLocale);
158-
static AppLocale useDeviceLocaleSync() => instance.useDeviceLocaleSync();
159-
static void setPluralResolverSync({String? language, AppLocale? locale, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver}) => instance.setPluralResolverSync(
160-
language: language,
161-
locale: locale,
162-
cardinalResolver: cardinalResolver,
163-
ordinalResolver: ordinalResolver,
164-
);
142+
class LocaleSettings
143+
extends BaseFlutterLocaleSettings<AppLocale, Translations> {
144+
LocaleSettings._() : super(utils: AppLocaleUtils.instance, lazy: true);
145+
146+
static final instance = LocaleSettings._();
147+
148+
// static aliases (checkout base methods for documentation)
149+
static AppLocale get currentLocale => instance.currentLocale;
150+
static Stream<AppLocale> getLocaleStream() => instance.getLocaleStream();
151+
static Future<AppLocale> setLocale(
152+
AppLocale locale, {
153+
bool? listenToDeviceLocale = false,
154+
}) => instance.setLocale(locale, listenToDeviceLocale: listenToDeviceLocale);
155+
static Future<AppLocale> setLocaleRaw(
156+
String rawLocale, {
157+
bool? listenToDeviceLocale = false,
158+
}) => instance.setLocaleRaw(
159+
rawLocale,
160+
listenToDeviceLocale: listenToDeviceLocale,
161+
);
162+
static Future<AppLocale> useDeviceLocale() => instance.useDeviceLocale();
163+
static Future<void> setPluralResolver({
164+
String? language,
165+
AppLocale? locale,
166+
PluralResolver? cardinalResolver,
167+
PluralResolver? ordinalResolver,
168+
}) => instance.setPluralResolver(
169+
language: language,
170+
locale: locale,
171+
cardinalResolver: cardinalResolver,
172+
ordinalResolver: ordinalResolver,
173+
);
174+
175+
// synchronous versions
176+
static AppLocale setLocaleSync(
177+
AppLocale locale, {
178+
bool? listenToDeviceLocale = false,
179+
}) => instance.setLocaleSync(
180+
locale,
181+
listenToDeviceLocale: listenToDeviceLocale,
182+
);
183+
static AppLocale setLocaleRawSync(
184+
String rawLocale, {
185+
bool? listenToDeviceLocale = false,
186+
}) => instance.setLocaleRawSync(
187+
rawLocale,
188+
listenToDeviceLocale: listenToDeviceLocale,
189+
);
190+
static AppLocale useDeviceLocaleSync() => instance.useDeviceLocaleSync();
191+
static void setPluralResolverSync({
192+
String? language,
193+
AppLocale? locale,
194+
PluralResolver? cardinalResolver,
195+
PluralResolver? ordinalResolver,
196+
}) => instance.setPluralResolverSync(
197+
language: language,
198+
locale: locale,
199+
cardinalResolver: cardinalResolver,
200+
ordinalResolver: ordinalResolver,
201+
);
165202
}
166203

167204
/// Provides utility functions without any side effects.
168205
class AppLocaleUtils extends BaseAppLocaleUtils<AppLocale, Translations> {
169-
AppLocaleUtils._() : super(
170-
baseLocale: AppLocale.en,
171-
locales: AppLocale.values,
172-
);
173-
174-
static final instance = AppLocaleUtils._();
175-
176-
// static aliases (checkout base methods for documentation)
177-
static AppLocale parse(String rawLocale) => instance.parse(rawLocale);
178-
static AppLocale parseLocaleParts({required String languageCode, String? scriptCode, String? countryCode}) => instance.parseLocaleParts(languageCode: languageCode, scriptCode: scriptCode, countryCode: countryCode);
179-
static AppLocale findDeviceLocale() => instance.findDeviceLocale();
180-
static List<Locale> get supportedLocales => instance.supportedLocales;
181-
static List<String> get supportedLocalesRaw => instance.supportedLocalesRaw;
206+
AppLocaleUtils._()
207+
: super(baseLocale: AppLocale.en, locales: AppLocale.values);
208+
209+
static final instance = AppLocaleUtils._();
210+
211+
// static aliases (checkout base methods for documentation)
212+
static AppLocale parse(String rawLocale) => instance.parse(rawLocale);
213+
static AppLocale parseLocaleParts({
214+
required String languageCode,
215+
String? scriptCode,
216+
String? countryCode,
217+
}) => instance.parseLocaleParts(
218+
languageCode: languageCode,
219+
scriptCode: scriptCode,
220+
countryCode: countryCode,
221+
);
222+
static AppLocale findDeviceLocale() => instance.findDeviceLocale();
223+
static List<Locale> get supportedLocales => instance.supportedLocales;
224+
static List<String> get supportedLocalesRaw => instance.supportedLocalesRaw;
182225
}

0 commit comments

Comments
 (0)