在当前的SearchDelegate实现中,没有更改提示文本的选项.当查询为空时,搜索屏幕在查询字段中显示"Search"作为提示文本.

提示文本当前在行395上定义如下:

final String searchFieldLabel = MaterialLocalizations.of(context).searchFieldLabel;

然而,有existing issue to this subject reported分.

我想不出任何解决办法. 您知道此问题的解决方法吗?

推荐答案

可以通过创建您自己的DefaultMaterialLocalizations类并将其传递到MaterialApp小部件来解决此问题:

void main() => runApp(SearchApp());

class SearchApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      localizationsDelegates: [
        CustomLocalizationDelegate(),
      ],
      home: Scaffold(
        appBar: AppBar(
          title: Text('Search demo'),
        ),
        body: Center(
          child: Builder(
            builder: (context) => MaterialButton(
              child: Text('Search'),
              onPressed: () => showSearch(
                context: context,
                delegate: DummyDelegate(),
              ),
            ),
          ),
        ),
      ),
    );
  }
}

class DummyDelegate extends SearchDelegate<String> {
  @override
  List<Widget> buildActions(BuildContext context) => [];

  @override
  Widget buildLeading(BuildContext context) => IconButton(
    icon: Icon(Icons.close),
    onPressed: () => Navigator.of(context).pop(),
  );

  @override
  Widget buildResults(BuildContext context) => Text('Result');

  @override
  Widget buildSuggestions(BuildContext context) => Text('Suggestion');
}

class CustomLocalizationDelegate extends LocalizationsDelegate<MaterialLocalizations> {
  const CustomLocalizationDelegate();

  @override
  bool isSupported(Locale locale) => locale.languageCode == 'en';

  @override
  Future<MaterialLocalizations> load(Locale locale) => SynchronousFuture<MaterialLocalizations>(const CustomLocalization());

  @override
  bool shouldReload(CustomLocalizationDelegate old) => false;

  @override
  String toString() => 'CustomLocalization.delegate(en_US)';
}

class CustomLocalization extends DefaultMaterialLocalizations {
  const CustomLocalization();

  @override
  String get searchFieldLabel => "My hint text";
}

Flutter相关问答推荐

如何刷新future 的构建器时,没有OBS变量的内部在Ffltter?

如何在Firebase项目中更改包名称和包ID

Flutter 布局-全屏幕容器

Flutter AppBar Animation反向调试

遇到图像路径格式问题

如何处理Flutter Riverpod异步通知器中的状态和数据库

如何删除使用isscllable时出现的左边距?

GetConnect Post API调用在Flutter Web中不起作用说:415不支持的媒体类型

在 flutter 吧蜂巢中拯救主题

按一下按钮即可更新 fl_chart

Flutter:我应该使用哪种应用内购买服务?

Flutter: pie_chart 插件动画滚动问题

如何更改中心的圆形进度指示器

如何在 Flutter 中将 ScaffoldMessenger 中的 Snackbar 显示为 Widget?

如何按键在 map 列表中搜索

Flutter 用户过滤器

更新未知文档 ID firebase\flutter 中的字段

Flutter:滚动一个ListWheelScrollView,无法获取选中项的状态

如何在 Flutter 中创建类似箭头标签的设计

如何从 Firebase Firestore 中获取具有特定字段值的文档?