Flutter:在基于 intl 的 RTL 应用程序中为小部件强制 LTR 方向
Flutter: force LTR direction for widget in a RTL app based on intl
我正在使用具有内置 redux 支持的样板 flutter 应用程序模板,以及使用 flutter_localizations[=31 的希伯来文 RTL 方向=] 和 intl 包。
整个应用程序以及我创建的每个新小部件都正确地具有本机 RTL 方向性。
我有一个文本输入字段来获取用户 phone 号码。我希望这个输入字段及其所有样式和内部功能都以 LTR 方式运行。对于我可能拥有的其他输入字段也是如此,例如电子邮件(始终为英文)..
似乎由应用 intl 配置确定的整体方向性与新的方向性小部件 I 之间存在冲突我试图“强制”我的文本字段以专门交换它们的行为:
child: SizedBox(
width: 250,
child: Directionality(
textDirection: TextDirection.LTR,
child: TextField(
controller: phoneController,
keyboardType: TextInputType.phone,
inputFormatters: [FilteringTextInputFormatter.digitsOnly],
),
),
),
运行 此代码导致以下错误:
lib/modules/login/login_page.dart:54:54: Error: The argument type 'TextDirection/*1*/' can't be assigned to the parameter type 'TextDirection/*2*/'.
- 'TextDirection/*1*/' is from 'package:intl/src/intl/text_direction.dart' ('../../snap/flutter/common/flutter/.pub-cache/hosted/pub.dartlang.org/intl-0.17.0-nullsafety.2/lib/src/intl/text_direction.dart').
- 'TextDirection/*2*/' is from 'dart:ui'.
textDirection: TextDirection.LTR,
^
我在这里错过了什么?我怎样才能完成所需的行为?
我相信您可以通过在 eg 的末尾添加 as <your chosen import name>
来解决这个问题。导入 'intl' 的语句。然后,您必须在所有对该库中方法的调用前加上 <your chosen import name>.
虽然不理想。
问题出在我身上。
我指望 IDE 自动完成导入,结果是 intl 包和常规 flutter:material package expose Directionality
options:
- 使用 intl 选项
textDirection
试图覆盖整体配置,失败:
child: Directionality(
textDirection: TextDirection.LTR,
- 但是,使用
package:flutter/material.dart
选项 可以正常工作 :
child: Directionality(
textDirection: TextDirection.ltr, // notice lower case
如果您想将方向应用到您应用的所有页面,您可以在 MaterialApp
中使用构建器:
void main() {
runApp(DirectionApp());
}
class DirectionApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
builder: (context, child) {
return Directionality(
textDirection: TextDirection.ltr,
child: child!,
);
},
);
}
}
试试这个:
import 'dart:ui' as UI;
UI.TextDirection direction = UI.TextDirection.ltr;
Directionality(
textDirection: direction,
child: widget());
我正在使用具有内置 redux 支持的样板 flutter 应用程序模板,以及使用 flutter_localizations[=31 的希伯来文 RTL 方向=] 和 intl 包。
整个应用程序以及我创建的每个新小部件都正确地具有本机 RTL 方向性。
我有一个文本输入字段来获取用户 phone 号码。我希望这个输入字段及其所有样式和内部功能都以 LTR 方式运行。对于我可能拥有的其他输入字段也是如此,例如电子邮件(始终为英文)..
似乎由应用 intl 配置确定的整体方向性与新的方向性小部件 I 之间存在冲突我试图“强制”我的文本字段以专门交换它们的行为:
child: SizedBox(
width: 250,
child: Directionality(
textDirection: TextDirection.LTR,
child: TextField(
controller: phoneController,
keyboardType: TextInputType.phone,
inputFormatters: [FilteringTextInputFormatter.digitsOnly],
),
),
),
运行 此代码导致以下错误:
lib/modules/login/login_page.dart:54:54: Error: The argument type 'TextDirection/*1*/' can't be assigned to the parameter type 'TextDirection/*2*/'.
- 'TextDirection/*1*/' is from 'package:intl/src/intl/text_direction.dart' ('../../snap/flutter/common/flutter/.pub-cache/hosted/pub.dartlang.org/intl-0.17.0-nullsafety.2/lib/src/intl/text_direction.dart').
- 'TextDirection/*2*/' is from 'dart:ui'.
textDirection: TextDirection.LTR,
^
我在这里错过了什么?我怎样才能完成所需的行为?
我相信您可以通过在 eg 的末尾添加 as <your chosen import name>
来解决这个问题。导入 'intl' 的语句。然后,您必须在所有对该库中方法的调用前加上 <your chosen import name>.
虽然不理想。
问题出在我身上。
我指望 IDE 自动完成导入,结果是 intl 包和常规 flutter:material package expose Directionality
options:
- 使用 intl 选项
textDirection
试图覆盖整体配置,失败:
child: Directionality(
textDirection: TextDirection.LTR,
- 但是,使用
package:flutter/material.dart
选项 可以正常工作 :
child: Directionality(
textDirection: TextDirection.ltr, // notice lower case
如果您想将方向应用到您应用的所有页面,您可以在 MaterialApp
中使用构建器:
void main() {
runApp(DirectionApp());
}
class DirectionApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
builder: (context, child) {
return Directionality(
textDirection: TextDirection.ltr,
child: child!,
);
},
);
}
}
试试这个:
import 'dart:ui' as UI;
UI.TextDirection direction = UI.TextDirection.ltr;
Directionality(
textDirection: direction,
child: widget());