You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 09:26:18