我是Flutter的新手,正在使用easy_localizations软件包开发本地化功能。我创建了一个下拉列表,显示您可以切换到的语言,当下拉列表直接在页面上时,效果非常好。但由于它将出现在每个页面上,我想将下拉列表作为一个自定义小部件,然后在页面上导入它,如下所示:
const Padding(
padding: xPadding25,
child: DropDown(),
),
然而,这是行不通的。我仍然可以点击下拉菜单并选择一种语言,但它不再翻译页面。我认为它必须与翻译的上下文有关,但我不知道如何制作它,这样它就会采用页面的上下文,而不是自己的上下文,如果它有意义的话。
以下是DropDown小部件的代码:
class DropDown extends StatefulWidget {
const DropDown({Key? key}) : super(key: key);
@override
State<DropDown> createState() => _DropDownState();
}
String dropdownValue = 'English';
class _DropDownState extends State<DropDown> {
@override
Widget build(BuildContext context) {
return (DropdownButton<String>(
icon: const Icon(
Icons.language,
color: scTealColor,
),
value: dropdownValue,
elevation: 16,
style: smBodyStyle,
underline: Container(
height: 2,
color: scTealColor,
),
onChanged: (String? newValue) {
setState(() {
dropdownValue = newValue ?? "";
if (dropdownValue == 'French') {
context.setLocale(const Locale('fr'));
} else {
context.setLocale(const Locale('en'));
}
});
},
items: <String>['English', 'French']
.map<DropdownMenuItem<String>>((String value) {
return DropdownMenuItem<String>(
value: value,
child: Text(value),
);
}).toList(),
));
}
}
关于如何实现它,使翻译在作为自定义小部件导入页面时发挥作用,有什么想法吗?谢谢
您是否尝试将上下文传递到下拉类中?例如
const Padding(
padding: xPadding25,
child: DropDown(context),
),