【问题标题】:The named parameter 'builder' is required, but there's no corresponding argument and utils命名参数 'builder' 是必需的,但没有相应的参数和 utils
【发布时间】:2021-09-23 09:59:06
【问题描述】:

我正在尝试为语言选择添加一个警告框,但无法弄清楚我面临的构建器错误。 它适用于颤振旧版本,但不适用于 2.2.3 版本的颤振 谢谢

寻求帮助 期待解决方案

命名参数“builder”是必需的,但没有对应的参数。 未定义命名参数“child”。 未定义名称“Utils”。

   Future <void> _languageCheck() async {
    SharedPreferences prefs = await SharedPreferences.getInstance();

    final firstRun = prefs.getBool("firstRunLanguage");
    (firstRun ?? false)
        ? () {}
        : await showDialog(
        barrierDismissible: false,
        context: context,
        child: AlertDialog(content: LanguageDialog()));
    await prefs.setBool('firstRunLanguage', true);
  }

小部件

class LanguageDialog extends StatefulWidget {
  @override
  _LanguageDialogState createState() => _LanguageDialogState();
}

class _LanguageDialogState extends State<LanguageDialog> {
  var langCode = "en";

  void getLanguage() async {
    SharedPreferences prefs = await SharedPreferences.getInstance();
    langCode = prefs.getString("language") ?? kAdvanceConfig['DefaultLanguage'];
    printLog("langCode-->$langCode");
    setState(() {});
  }

  @override
  void initState() {
    super.initState();
    getLanguage();
  }

  @override
  Widget build(BuildContext context) {
    List<Widget> list = [];
    List<Map<String, dynamic>> languages = Utils.getLanguagesList(context);
    for (var i = 0; i < languages.length; i++) {
      // if (langCode == languages[i]["code"]) {
      //   print(languages[i]["code"]);
      // }
      list.add(
        ListTile(
          leading: Image.asset(
            languages[i]["icon"],
            width: 30,
            height: 20,
            fit: BoxFit.cover,
          ),
          title: Text(languages[i]["name"]),
          trailing: langCode == languages[i]["code"]
              ? const Icon(
            Icons.radio_button_checked,
            color: Colors.teal,
          )
              : const Icon(
            Icons.radio_button_off,
            color: Colors.teal,
          ),
          onTap: () async {
            setState(() {
              langCode = languages[i]["code"];
            });
            await Provider.of<AppModel>(context, listen: false)
                .changeLanguage(languages[i]["code"], context);
          },
        ),
      );
      if (i < languages.length - 1) {
        list.add(
          Divider(
            color: Theme.of(context).primaryColorLight,
            height: 1.0,
            indent: 75,
            //endIndent: 20,
          ),
        );
      }
    }
    return SingleChildScrollView(
      child: Column(
        children: [
          ...list,
          const LinearProgressIndicator(),
          FlatButton(
              onPressed: () {
                Navigator.pop(context);
              },
              child: const Text("OK")),
        ],
      ),
    );
  }
}

【问题讨论】:

    标签: flutter dart


    【解决方案1】:

    showDialog 没有child,使用它的builder 喜欢

         await showDialog(
                barrierDismissible: false,
                context: context,
                builder: (context) => // here 
                 AlertDialog(content: LanguageDialog()))
    

    更多关于showDialog

    【讨论】:

    • 谢谢你,还有一个 Utils.getLanguagesList 出了什么问题
    • 我认为这是一个类,或者使用其他包,您可以在您的情况下包含Utils 吗?
    • 列表>?语言 = getLanguages();整理出这是罪魁祸首
    • 它来自一个单独的类吗? getLanguages(); 能否包括该课程以及getLanguages() 如何在Utils 课程中被命名。
    • 是的,它将类与其他文件分开
    【解决方案2】:

    您使用了showDialog() 方法,该方法具有必需的参数调用者builder,因此您必须提供builder 参数,因此请尝试如下

    
    Future <void> _languageCheck(BuildContext context) async {
        SharedPreferences prefs = await SharedPreferences.getInstance();
    
        final firstRun = prefs.getBool("firstRunLanguage");
        (firstRun ?? false)
            ? () {}
            : await showDialog(
            barrierDismissible: false,
            context: context,
            /// this builder parameter is required
            builder:(context) => AlertDialog(content: LanguageDialog()));
        await prefs.setBool('firstRunLanguage', true);
      }
    
    

    【讨论】:

      猜你喜欢
      • 2022-12-04
      • 1970-01-01
      • 2022-10-31
      • 2015-07-05
      • 1970-01-01
      • 2021-03-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多