Flutter:基于 intl 为 RTL 应用程序中的小部件强制 LTR 方向

问题描述

我正在使用带有内置 redux 支持的样板 Flutter 应用模板,以及使用 Flutter_localizationsintl的希伯来语 RTL 方向强> 包。

整个应用程序以及我创建的每个新小部件都具有本机 RTL 方向性。

我有一个文本输入字段来获取用户电话号码。我希望这个输入字段的所有样式和内部功能都以 LTR 方式运行。对于我可能拥有的其他输入字段也是如此,例如电子邮件(始终为英文)。

似乎由应用intl 配置确定的整体方向性与我试图“强制”使用的新​​方向性小部件之间存在冲突我的文本字段专门交换他们的行为:

                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,^

在这里错过了什么?我怎样才能完成所需的行为?

解决方法

问题出在我身上。 我指望 IDE 自动完成导入,结果发现 intl 包和常规的 flutter:material 包公开 Directionality 选项。

textDirection 使用 intl 选项会尝试覆盖整体配置,但失败

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!,);
      },);
  }
}
,

我相信您可以通过在 eg 的末尾添加 as <your chosen import name> 来解决此问题。导入'intl'的语句。然后,您必须使用 <your chosen import name>.

作为对该库中方法的所有调用的前缀

虽然不理想。