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
widget 來提供您自己的本地化設定。
遷移指南
#如果您看到斷言錯誤,請確保 TextField
可以取得本地資訊,方法是透過祖先 MaterialApp
(會自動提供 Localizations
),或是建立您自己的 Localizations
widget。
遷移前的程式碼
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
widget 提供本地化設定)
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。 檢視原始碼 或 回報問題。