调用 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])

我认为在处理提供者或上下文时存在错误。如何解决此问题?

问题出在我的代码部分的上下文上。当然有很多错误,但我通过使用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),
        ]);
      });

代码的其余部分是相同的。

最新更新