【问题标题】:Flutter: SearchBar hint text with internationalizationFlutter:具有国际化的 SearchBar 提示文本
【发布时间】:2019-08-06 18:32:39
【问题描述】:

我想在应用栏中放置一个搜索栏。所以我声明了 Appbar 给它一个 TextField 作为标题,并在控制器上放置了一个监听器:

class _SearchView extends State<SearchView> {

      TextField appBarTitle;
      final TextEditingController _filterController = new TextEditingController();

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

      TextField buildAppBarTitle() {
        return appBarTitle = new TextField(
            controller: _filterController,
            decoration: new InputDecoration(
                hintText: AppLocalization.of(context).search
            )
        );
      }


    @override
      Widget build(BuildContext context) {
        return Scaffold(
           appBar: AppBar(title: appBarTitle,),
    }
 }

问题是:hintText: AppLocalization.of(context).search。由于在 Widget 构建之外,它没有上下文。如何设置此提示文本?

【问题讨论】:

  • 您是否尝试将上下文从“build”方法发送到“buildAppBarTitle”方法作为参数?
  • 你的意思是做这样的事情: TextField buildAppBarTitle(BuildContrext context){ return appBarTitle.... } 然后在构建中: appBar: AppBar(title:buildAppBarTitle(context)) ?
  • 是的,就像那样。
  • 它中断:堆栈溢出
  • 是完整的代码吗?您在哪里将 buildAppBarTitle() 结果分配给 appBarTitle 变量?

标签: flutter internationalization searchbar appbar


【解决方案1】:

您没有正确分配 appBarTitle 变量。试试下面的代码:

class _SearchView extends State<SearchView> {

final TextEditingController _filterController = new TextEditingController();

TextField buildAppBarTitle(BuildContext context) {
    return new TextField(
        controller: _filterController,
        decoration: new InputDecoration(
        hintText: AppLocalization.of(context).search
        )
    );
}

@override
Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(title: buildAppBarTitle(context),),
    }
}

【讨论】:

  • 不,这会造成堆栈溢出
  • return appBarTitle = new TextField.. 这里有语法错误。它应该像return new TextField..
  • 不行,这样也会有栈溢出。它只是调用了数百次 AppLocalization.of(context).search
  • 这不仅仅是这个类。我需要有关该问题的更多信息。现在,您可以检查一下; flutter.dev/docs/development/accessibility-and-localization/…
【解决方案2】:

最后我发现真正的问题不是这段代码,而是我如何在语言环境文件中声明字符串:

  String get search => Intl.message("Search", name: search);

我忘了把“搜索”放在名称参数中,所以:

String get search => Intl.message("Search", name: "search");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-23
    • 2021-03-21
    • 1970-01-01
    • 1970-01-01
    • 2020-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多