首先我创建了这些单选按钮,它们在中运行良好
Widget buildRadioLanguageListTile(
Languages langvalue, String txt, BuildContext ctx2) {
return RadioListTile(
value: langvalue,
groupValue:
Provider.of<LanguageProvider>(ctx2, listen: true).currentLang,
onChanged: (langvalue) =>
Provider.of<LanguageProvider>(ctx2, listen: false)
.changeLanguage(langvalue),
title: Text(
txt,
style: Theme.of(ctx2).textTheme.bodyText1,
));
}
ListView(
Column(
mainAxisSize: MainAxisSize.min, children: <Widget>[
buildRadioLanguageListTile(
Languages.English, txt.getTexts("english"), context),
buildRadioLanguageListTile(
Languages.Arabic, txt.getTexts("arabic"), context),
buildRadioLanguageListTile(
Languages.Turkish, txt.getTexts("turkish"), context),
]);
到目前为止,一切都很好,但我想把这些按钮放在showSlideDialog中,如下所示:
import 'package:slide_popup_dialog/slide_popup_dialog.dart' as slideDialog;
void _showDialog() { // here the problem begin
slideDialog.showSlideDialog(
context: context,
child: Column(
children: [
buildRadioLanguageListTile(
Languages.English, lan.getTexts("english"), context),
buildRadioLanguageListTile(
Languages.Arabic, lan.getTexts("arabic"), context),
buildRadioLanguageListTile(
Languages.Turkish, lan.getTexts("turkish"), context),
],
),
);}
.
.
.
InkWell(
child: Container(
child: Text("language"),
),
onTap: _showDialog, // calling _showDialog
)
现在我得到这个错误:
Tried to listen to a value exposed with provider, from outside of the widget tree.
This is likely caused by an event handler (like a button's onPressed) that called
Provider.of without passing `listen: false`.
To fix, write:
Provider.of<LanguageProvider>(context, listen: false);
It is unsupported because may pointlessly rebuild the widget associated to the
event handler, when the widget tree doesn't care about the value.
The context used was: GeneralSetting(dependencies: [_InheritedProviderScope<LanguageProvider>, _LocalizationsScope-[GlobalKey#41a3d], _InheritedProviderScope<ThemeProvider>, _InheritedTheme])
我认为在处理提供者或上下文时存在错误。如何解决此问题?
问题出在我的代码部分的上下文上。当然有很多错误,但我通过使用showModalBottomSheet解决了这个问题,它有一个上下文和生成器。
showModalBottomSheet(
context: context,
builder: (context) {
return Column(mainAxisSize: MainAxisSize.min, children: <Widget>[
buildRadioLanguageListTile(
Languages.English, txt.getTexts("english"), context),
buildRadioLanguageListTile(
Languages.Arabic, txt.getTexts("arabic"), context),
buildRadioLanguageListTile(
Languages.Turkish, txt.getTexts("turkish"), context),
]);
});
代码的其余部分是相同的。