1
+ import 'package:flutter/cupertino.dart' ;
1
2
import 'package:flutter/material.dart' ;
2
3
import 'package:eight_queens_game/Theme.dart' ;
3
4
5
+ import 'package:get/get.dart' ;
6
+ import 'package:flutter_svg/flutter_svg.dart' ;
7
+ import 'generated/l10n.dart' ;
8
+
4
9
import 'MyTitle.dart' ;
5
10
6
11
import 'dart:js' as js;
@@ -32,5 +37,133 @@ AppBar buildAppBar() => AppBar
32
37
33
38
backgroundColor: AppColors .closedBox,
34
39
40
+ actions:
41
+ [
42
+ LanguagesMenu ()
43
+ ],
44
+
35
45
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
+ }
0 commit comments