Skip to content

Commit e79ba00

Browse files
committed
Se agregó un menú para cambiar el idioma, y se implementó correctamente la selección del idioma inglés en caso de no ser un dispositivo en español
1 parent 572cf97 commit e79ba00

File tree

6 files changed

+284
-21
lines changed

6 files changed

+284
-21
lines changed

img/english.svg

+61
Loading

img/spanish.svg

+41
Loading

lib/Header.dart

+134-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
1+
import 'package:flutter/cupertino.dart';
12
import 'package:flutter/material.dart';
23
import 'package:eight_queens_game/Theme.dart';
34

5+
import 'package:get/get.dart';
6+
import 'package:flutter_svg/flutter_svg.dart';
7+
import 'generated/l10n.dart';
8+
49
import 'MyTitle.dart';
510

611
import 'dart:js' as js;
@@ -32,5 +37,133 @@ AppBar buildAppBar() => AppBar
3237

3338
backgroundColor: AppColors.closedBox,
3439

40+
actions:
41+
[
42+
LanguagesMenu()
43+
],
44+
3545
elevation: 0
36-
);
46+
);
47+
48+
49+
// IDIOMAS //
50+
changeLanguage(String languageCode)
51+
{
52+
Get.updateLocale(Locale(languageCode));
53+
S.load(Locale(languageCode));
54+
Get.appUpdate();
55+
}
56+
class LanguageItem extends StatelessWidget
57+
{
58+
final String svgPath;
59+
final String text;
60+
final String languageCode;
61+
62+
LanguageItem({Key key, this.svgPath, this.text, this.languageCode}) : super(key: key);
63+
64+
@override
65+
Widget build(BuildContext context)
66+
{
67+
return Row
68+
(
69+
children:
70+
[
71+
Container
72+
(
73+
width: 24.0,
74+
height: 24.0,
75+
child: SvgPicture.asset(svgPath)
76+
),
77+
78+
SizedBox(width: 10.0),
79+
80+
Text
81+
(
82+
text,
83+
style: TextStyle
84+
(
85+
color: Color(0xFF403844)
86+
)
87+
)
88+
]
89+
);
90+
}
91+
}
92+
class LanguagesMenu extends StatefulWidget
93+
{
94+
@override
95+
LanguagesMenuState createState() => LanguagesMenuState();
96+
}
97+
class LanguagesMenuState extends State <LanguagesMenu>
98+
{
99+
// Decide el valor que toma el menú de lenguajes.
100+
String currentLanguage =
101+
Get.deviceLocale.languageCode != "es"? "en": "es";
102+
103+
@override
104+
Widget build(BuildContext context)
105+
{
106+
// Menú de idiomas //
107+
return
108+
PopupMenuButton
109+
(
110+
icon: Icon(Icons.translate),
111+
iconSize: 28.0,
112+
padding: EdgeInsets.only(right: 20.0),
113+
114+
// Desplazamiento de la lista de idiomas //
115+
offset: Offset
116+
(
117+
// Eje x //
118+
0,
119+
120+
// Eje y //
121+
(currentLanguage == "es")
122+
123+
// Si se escogió la primer opción //
124+
? kToolbarHeight + 4
125+
// Se se escogió la segunda (útlima) opción //
126+
: kToolbarHeight + 53
127+
),
128+
129+
shape: RoundedRectangleBorder(),
130+
131+
tooltip: "Idiomas",
132+
initialValue: currentLanguage,
133+
134+
onSelected: (languageCode)
135+
{
136+
changeLanguage(languageCode);
137+
setState(()
138+
{
139+
currentLanguage = languageCode;
140+
});
141+
},
142+
143+
itemBuilder: (context) =>
144+
[
145+
// Español //
146+
PopupMenuItem
147+
(
148+
value: "es",
149+
child: LanguageItem
150+
(
151+
svgPath: "img/spanish.svg",
152+
text: "Español"
153+
)
154+
),
155+
156+
// Inglés //
157+
PopupMenuItem
158+
(
159+
value: "en",
160+
child: LanguageItem
161+
(
162+
svgPath: "img/english.svg",
163+
text: "English"
164+
)
165+
)
166+
]
167+
);
168+
}
169+
}

lib/main.dart

+29-11
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,10 @@ void main()
1515
)
1616
);
1717

18+
// String currentLanguage =
19+
// Get.deviceLocale.languageCode != "es"? "en": "es";
20+
// S.load(Locale(currentLanguage));
21+
1822
runApp(MyApp());
1923
}
2024

@@ -27,6 +31,30 @@ class MyApp extends StatelessWidget
2731
(
2832
debugShowCheckedModeBanner: false,
2933

34+
localeListResolutionCallback: (locales, supportedLocales)
35+
{
36+
print('device locales=$locales supported locales=$supportedLocales');
37+
for (Locale locale in locales)
38+
{
39+
// Si el lenguaje del dispositivo no es español //
40+
if (supportedLocales.contains(locale))
41+
{
42+
return locale;
43+
}
44+
}
45+
return Locale("id");
46+
},
47+
locale: Locale("en"),
48+
49+
localizationsDelegates:
50+
[
51+
S.delegate,
52+
GlobalMaterialLocalizations.delegate,
53+
GlobalCupertinoLocalizations.delegate,
54+
GlobalWidgetsLocalizations.delegate
55+
],
56+
supportedLocales: S.delegate.supportedLocales,
57+
3058
title: '♟ Ocho Reinas | Juego online',
3159
home: Scaffold
3260
(
@@ -46,17 +74,7 @@ class MyApp extends StatelessWidget
4674
)
4775
)
4876
)
49-
),
50-
51-
localizationsDelegates:
52-
[
53-
S.delegate,
54-
GlobalMaterialLocalizations.delegate,
55-
GlobalCupertinoLocalizations.delegate,
56-
GlobalWidgetsLocalizations.delegate
57-
],
58-
59-
supportedLocales: S.delegate.supportedLocales
77+
)
6078
);
6179
}
6280
}

0 commit comments

Comments
 (0)