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