flutter - 调用 showSlideDialog 时上下文和提供程序出错
问题描述
首先,我创建了这些单选按钮,它们运行良好
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])
我认为在处理提供者或上下文时存在错误。我该如何解决这个问题?
解决方案
问题在于我的代码部分的上下文。surly 有很多错误,但我通过使用具有上下文和构建器的 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),
]);
});
其余代码相同。
推荐阅读
- javascript - React JS:检查对象上的每个项目是否为真,然后添加图标
- java - 我收到一个错误,因为“void 是变量 setAge 的无效类型”
- teiid - 在 Teiid 12.x 中使用子查询执行选择返回空指针异常
- javascript - 如何使用 prisma 过滤多个相关记录?
- indexing - 如何自动索引 BigQuery 表中的行?
- python - 为什么 on_command() 事件滞后于实际命令?
- sublimetext3 - 从 Sublime 中删除无序号
- flutter - 如何使用 Future 返回的字符串
颤振中的方法? - php - 如何从本地存储中获取阵列图像到刀片文件
- android - 在谷歌地图中实现 UI 组件,如 imageviews、recyclerviews
安卓中的标签