Toggle navigation
Toggle navigation
This project
Loading...
Sign in
flutter_package
/
fluttertpc_get
Go to a project
Toggle navigation
Projects
Groups
Snippets
Help
Toggle navigation pinning
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Network
Create a new issue
Builds
Commits
Authored by
Jonny Borges
2021-11-29 12:20:38 -0300
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit
5b058b1c7682b58736463464ee484d87ffbd892a
5b058b1c
1 parent
12b92549
fix internationalization and add tests to tr
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
202 additions
and
54 deletions
lib/get_utils/src/extensions/internacionalization.dart
test/internationalization/internationalization_test.dart
test/navigation/utils/wrapper.dart
test/utils/extensions/context_extensions_test.dart
lib/get_utils/src/extensions/internacionalization.dart
View file @
5b058b1
import
'dart:ui'
;
import
'../../../get_core/get_core.dart'
;
class
_IntlHost
{
Locale
?
locale
;
Locale
?
fallbackLocale
;
Map
<
String
,
Map
<
String
,
String
>>
translations
=
{};
}
extension
FirstWhereExt
<
T
>
on
List
<
T
>
{
/// The first element satisfying [test], or `null` if there are none.
T
?
firstWhereOrNull
(
bool
Function
(
T
element
)
test
)
{
for
(
var
element
in
this
)
{
if
(
test
(
element
))
return
element
;
}
return
null
;
}
}
extension
LocalesIntl
on
GetInterface
{
static
final
_intlHost
=
_IntlHost
();
Locale
?
get
locale
=>
_intlHost
.
locale
;
Locale
?
get
fallbackLocale
=>
_intlHost
.
fallbackLocale
;
set
locale
(
Locale
?
newLocale
)
=>
_intlHost
.
locale
=
newLocale
;
set
fallbackLocale
(
Locale
?
newLocale
)
=>
_intlHost
.
fallbackLocale
=
newLocale
;
Map
<
String
,
Map
<
String
,
String
>>
get
translations
=>
_intlHost
.
translations
;
void
addTranslations
(
Map
<
String
,
Map
<
String
,
String
>>
tr
)
{
translations
.
addAll
(
tr
);
}
void
clearTranslations
()
{
translations
.
clear
();
}
void
appendTranslations
(
Map
<
String
,
Map
<
String
,
String
>>
tr
)
{
tr
.
forEach
((
key
,
map
)
{
if
(
translations
.
containsKey
(
key
))
{
translations
[
key
]!.
addAll
(
map
);
}
else
{
translations
[
key
]
=
map
;
}
});
}
}
extension
Trans
on
String
{
// Checks whether the language code and country code are present, and
// whether the key is also present.
bool
get
_fullLocaleAndKey
{
return
Get
.
translations
.
containsKey
(
"
${Get.locale!.languageCode}
_
${Get.locale!.countryCode}
"
)
&&
Get
.
translations
[
"
${Get.locale!.languageCode}
_
${Get.locale!.countryCode}
"
]!
.
containsKey
(
this
);
}
// Checks if there is a callback language in the absence of the specific
// country, and if it contains that key.
Map
<
String
,
String
>?
get
_getSimilarLanguageTranslation
{
final
translationsWithNoCountry
=
Get
.
translations
.
map
((
key
,
value
)
=>
MapEntry
(
key
.
split
(
"_"
).
first
,
value
));
final
containsKey
=
translationsWithNoCountry
.
containsKey
(
Get
.
locale
!.
languageCode
);
if
(!
containsKey
)
{
return
null
;
}
return
translationsWithNoCountry
[
Get
.
locale
!.
languageCode
];
}
String
get
tr
{
// print('language');
// print(Get.locale!.languageCode);
// print('contains');
// print(Get.translations.containsKey(Get.locale!.languageCode));
// print(Get.translations.keys);
// Returns the key if locale is null.
if
(
Get
.
locale
?.
languageCode
==
null
)
return
this
;
// Checks whether the language code and country code are present, and
// whether the key is also present.
if
(
Get
.
translations
.
containsKey
(
"
${Get.locale!.languageCode}
_
${Get.locale!.countryCode}
"
)
&&
Get
.
translations
[
"
${Get.locale!.languageCode}
_
${Get.locale!.countryCode}
"
]!
.
containsKey
(
this
))
{
if
(
_fullLocaleAndKey
)
{
return
Get
.
translations
[
"
${Get.locale!.languageCode}
_
${Get.locale!.countryCode}
"
]![
this
]!;
// Checks if there is a callback language in the absence of the specific
// country, and if it contains that key.
}
else
if
(
Get
.
translations
.
containsKey
(
Get
.
locale
!.
languageCode
)
&&
Get
.
translations
[
Get
.
locale
!.
languageCode
]!.
containsKey
(
this
))
{
return
Get
.
translations
[
Get
.
locale
!.
languageCode
]![
this
]!;
}
final
similarTranslation
=
_getSimilarLanguageTranslation
;
if
(
similarTranslation
!=
null
&&
similarTranslation
.
containsKey
(
this
))
{
return
similarTranslation
[
this
]!;
// If there is no corresponding language or corresponding key, return
// the key.
}
else
if
(
Get
.
fallbackLocale
!=
null
)
{
...
...
@@ -70,43 +143,3 @@ extension Trans on String {
return
i
==
1
?
trParams
(
params
)
:
pluralKey
!.
trParams
(
params
);
}
}
class
_IntlHost
{
Locale
?
locale
;
Locale
?
fallbackLocale
;
Map
<
String
,
Map
<
String
,
String
>>
translations
=
{};
}
extension
LocalesIntl
on
GetInterface
{
static
final
_intlHost
=
_IntlHost
();
Locale
?
get
locale
=>
_intlHost
.
locale
;
Locale
?
get
fallbackLocale
=>
_intlHost
.
fallbackLocale
;
set
locale
(
Locale
?
newLocale
)
=>
_intlHost
.
locale
=
newLocale
;
set
fallbackLocale
(
Locale
?
newLocale
)
=>
_intlHost
.
fallbackLocale
=
newLocale
;
Map
<
String
,
Map
<
String
,
String
>>
get
translations
=>
_intlHost
.
translations
;
void
addTranslations
(
Map
<
String
,
Map
<
String
,
String
>>
tr
)
{
translations
.
addAll
(
tr
);
}
void
clearTranslations
()
{
translations
.
clear
();
}
void
appendTranslations
(
Map
<
String
,
Map
<
String
,
String
>>
tr
)
{
tr
.
forEach
((
key
,
map
)
{
if
(
translations
.
containsKey
(
key
))
{
translations
[
key
]!.
addAll
(
map
);
}
else
{
translations
[
key
]
=
map
;
}
});
}
}
...
...
test/internationalization/internationalization_test.dart
0 → 100644
View file @
5b058b1
import
'package:flutter/material.dart'
;
import
'package:flutter_test/flutter_test.dart'
;
import
'package:get/get.dart'
;
import
'../navigation/utils/wrapper.dart'
;
void
main
(
)
{
testWidgets
(
"Get.defaultDialog smoke test"
,
(
tester
)
async
{
await
tester
.
pumpWidget
(
Wrapper
(
child:
Container
()),
);
await
tester
.
pumpAndSettle
();
expect
(
'covid'
.
tr
,
'Corona Virus'
);
expect
(
'total_confirmed'
.
tr
,
'Total Confirmed'
);
expect
(
'total_deaths'
.
tr
,
'Total Deaths'
);
Get
.
updateLocale
(
Locale
(
'pt'
,
'BR'
));
await
tester
.
pumpAndSettle
();
expect
(
'covid'
.
tr
,
'Corona Vírus'
);
expect
(
'total_confirmed'
.
tr
,
'Total confirmado'
);
expect
(
'total_deaths'
.
tr
,
'Total de mortes'
);
Get
.
updateLocale
(
Locale
(
'en'
,
'EN'
));
await
tester
.
pumpAndSettle
();
expect
(
'covid'
.
tr
,
'Corona Virus'
);
expect
(
'total_confirmed'
.
tr
,
'Total Confirmed'
);
expect
(
'total_deaths'
.
tr
,
'Total Deaths'
);
});
}
...
...
test/navigation/utils/wrapper.dart
View file @
5b058b1
...
...
@@ -20,6 +20,8 @@ class Wrapper extends StatelessWidget {
return
GetMaterialApp
(
defaultTransition:
defaultTransition
,
initialRoute:
initialRoute
,
translations:
WrapperTranslations
(),
locale:
WrapperTranslations
.
locale
,
getPages:
namedRoutes
,
home:
Scaffold
(
body:
child
,
...
...
@@ -51,3 +53,21 @@ class WrapperNamed extends StatelessWidget {
);
}
}
class
WrapperTranslations
extends
Translations
{
static
final
fallbackLocale
=
Locale
(
'en'
,
'US'
);
static
Locale
?
get
locale
=>
Locale
(
'en'
,
'US'
);
@override
Map
<
String
,
Map
<
String
,
String
>>
get
keys
=>
{
'en_US'
:
{
'covid'
:
'Corona Virus'
,
'total_confirmed'
:
'Total Confirmed'
,
'total_deaths'
:
'Total Deaths'
,
},
'pt_BR'
:
{
'covid'
:
'Corona Vírus'
,
'total_confirmed'
:
'Total confirmado'
,
'total_deaths'
:
'Total de mortes'
,
},
};
}
...
...
test/utils/extensions/context_extensions_test.dart
View file @
5b058b1
import
'package:flutter/material.dart'
;
import
'package:flutter_test/flutter_test.dart'
;
import
'package:get/get.dart'
;
import
'../../navigation/utils/wrapper.dart'
;
void
main
(
)
{
test
(
''
,
()
{});
testWidgets
(
"Get.defaultDialog smoke test"
,
(
tester
)
async
{
await
tester
.
pumpWidget
(
Wrapper
(
child:
Container
()));
final
BuildContext
context
=
tester
.
element
(
find
.
byType
(
Container
));
var
mediaQuery
=
MediaQuery
.
of
(
context
);
expect
(
mediaQuery
,
context
.
mediaQuery
);
var
mediaQuerySize
=
mediaQuery
.
size
;
expect
(
mediaQuerySize
,
context
.
mediaQuerySize
);
var
theme
=
Theme
.
of
(
context
);
expect
(
theme
,
context
.
theme
);
var
textTheme
=
theme
.
textTheme
;
expect
(
textTheme
,
context
.
textTheme
);
var
devicePixelRatio
=
mediaQuery
.
devicePixelRatio
;
expect
(
devicePixelRatio
,
context
.
devicePixelRatio
);
var
height
=
mediaQuerySize
.
height
;
expect
(
height
,
context
.
height
);
final
heightTransformer
=
(
mediaQuerySize
.
height
-
((
mediaQuerySize
.
height
/
100
)
*
0
))
/
1
;
expect
(
heightTransformer
,
context
.
heightTransformer
());
var
iconColor
=
theme
.
iconTheme
.
color
;
expect
(
iconColor
,
context
.
iconColor
);
var
isDarkMode
=
(
theme
.
brightness
==
Brightness
.
dark
);
expect
(
isDarkMode
,
context
.
isDarkMode
);
var
orientation
=
mediaQuery
.
orientation
;
expect
(
orientation
,
context
.
orientation
);
var
isLandscape
=
orientation
==
Orientation
.
landscape
;
expect
(
isLandscape
,
context
.
isLandscape
);
var
mediaQueryShortestSide
=
mediaQuerySize
.
shortestSide
;
expect
(
mediaQueryShortestSide
,
context
.
mediaQueryShortestSide
);
var
isLargeTablet
=
(
mediaQueryShortestSide
>=
720
);
expect
(
isLargeTablet
,
context
.
isLargeTablet
);
var
isPhone
=
(
mediaQueryShortestSide
<
600
);
expect
(
isPhone
,
context
.
isPhone
);
var
isPortrait
=
orientation
==
Orientation
.
portrait
;
expect
(
isPortrait
,
context
.
isPortrait
);
var
isSmallTablet
=
(
mediaQueryShortestSide
>=
600
);
expect
(
isSmallTablet
,
context
.
isSmallTablet
);
var
isTablet
=
isSmallTablet
||
isLargeTablet
;
expect
(
isTablet
,
context
.
isTablet
);
var
mediaQueryPadding
=
mediaQuery
.
padding
;
expect
(
mediaQueryPadding
,
context
.
mediaQueryPadding
);
var
mediaQueryViewInsets
=
mediaQuery
.
viewInsets
;
expect
(
mediaQueryViewInsets
,
context
.
mediaQueryViewInsets
);
var
mediaQueryViewPadding
=
mediaQuery
.
viewPadding
;
expect
(
mediaQueryViewPadding
,
context
.
mediaQueryViewPadding
);
var
widthTransformer
=
(
mediaQuerySize
.
width
-
((
mediaQuerySize
.
width
/
100
)
*
0
))
/
1
;
expect
(
widthTransformer
,
context
.
widthTransformer
());
var
ratio
=
heightTransformer
/
widthTransformer
;
expect
(
ratio
,
context
.
ratio
());
var
width
=
mediaQuerySize
.
width
;
expect
(
width
,
context
.
width
);
var
showNavbar
=
(
width
>
800
);
expect
(
showNavbar
,
context
.
showNavbar
);
var
textScaleFactor
=
mediaQuery
.
textScaleFactor
;
expect
(
textScaleFactor
,
context
.
textScaleFactor
);
});
}
...
...
Please
register
or
login
to post a comment