TextField 需要 MaterialLocalizations 组件
概述
#TextField
的实例必须在组件树中存在 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