TextField 需要一个 MaterialLocalizations 组件
摘要
#TextField
的实例必须在 widget 树中包含一个 MaterialLocalizations
。尝试在没有正确本地化的前提下实例化 TextField
会导致以下断言错误
No MaterialLocalizations found.
TextField widgets require MaterialLocalizations to be provided by a Localizations widget ancestor.
The material library uses Localizations to generate messages, labels, and abbreviations.
To introduce a MaterialLocalizations, either use a MaterialApp at the root of your application to
include them automatically, or add a Localization widget with a MaterialLocalizations delegate.
The specific widget that could not find a MaterialLocalizations ancestor was:
TextField
上下文
#如果 TextField
是从 MaterialApp
派生的,则 DefaultMaterialLocalizations
已经实例化,不需要对现有代码进行任何更改。
如果 TextField
不是从 MaterialApp
派生的,则可以使用 Localizations
组件来提供您自己的本地化。
迁移指南
#如果看到断言错误,请确保区域信息可用于 TextField
,可以通过祖先 MaterialApp
(自动提供 Localizations
)或通过创建自己的 Localizations
组件来实现。
迁移前的代码
dart
import 'package:flutter/material.dart';
void main() => runApp(Foo());
class Foo extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MediaQuery(
data: const MediaQueryData(),
child: Directionality(
textDirection: TextDirection.ltr,
child: Material(
child: TextField(),
),
),
);
}
}
迁移后的代码(使用 MaterialApp
提供本地化)
dart
import 'package:flutter/material.dart';
void main() => runApp(Foo());
class Foo extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Material(
child: TextField(),
),
);
}
}
迁移后的代码(通过 Localizations
组件提供本地化)
dart
import 'package:flutter/material.dart';
void main() => runApp(Foo());
class Foo extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Localizations(
locale: const Locale('en', 'US'),
delegates: const <LocalizationsDelegate<dynamic>>[
DefaultWidgetsLocalizations.delegate,
DefaultMaterialLocalizations.delegate,
],
child: MediaQuery(
data: const MediaQueryData(),
child: Directionality(
textDirection: TextDirection.ltr,
child: Material(
child: TextField(),
),
),
),
);
}
}
时间线
#包含于版本:1.20.0-1.0.pre
稳定版本:1.20
参考
#API 文档
相关 PR
除非另有说明,否则本网站上的文档反映了 Flutter 的最新稳定版本。页面上次更新于 2024-04-04。 查看源代码 或 报告问题.