Flutter自定义按钮传入ARB getter获取多语言文本报错求助
解决Flutter自定义组件传入国际化getter的报错问题
你代码里有几个明确的问题,导致了这个报错,一步步修正即可:
1. 参数名不匹配
类里声明的参数是arbGetter,但构造函数里写的是arbKey,参数名不统一,先把构造函数里的arbKey改成arbGetter。
2. 错误的getter调用逻辑
你试图直接访问AppLocalizations的arbGetter属性,但arbGetter是你自定义的函数参数,并非AppLocalizations的内置属性。正确的做法是让arbGetter接收AppLocalizations实例,返回对应的国际化字符串。
3. 按钮回调写法错误
原来的onPressed: () => callback只是返回函数对象,不会触发回调逻辑,要改成直接传callback或者显式调用它。
修正后的完整代码
import 'package:flutter/material.dart'; import 'package:getwidget/getwidget.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart'; class ExtendableMenuNavigationEntry extends StatelessWidget { final Widget child; final VoidCallback callback; final String Function(AppLocalizations) arbGetter; const ExtendableMenuNavigationEntry({ super.key, required this.child, required this.callback, required this.arbGetter, }); @override Widget build(BuildContext context) { final loc = AppLocalizations.of(context)!; return GFButton( onPressed: callback, text: arbGetter(loc), shape: GFButtonShape.pills, fullWidthButton: true, ); } }
使用示例
假设你的ARB文件里定义了home、settings这类国际化key,使用组件时传入对应getter函数即可:
ExtendableMenuNavigationEntry( child: const SizedBox(), callback: () { /* 点击逻辑 */ }, arbGetter: (loc) => loc.home, )
这样就能正确获取对应语言的文本,不会再报找不到getter的错误了。
内容的提问来源于stack exchange,提问作者dsjfhlj
相关产品推荐
相关产品推荐

