Интервалы флаттера различаются в зависимости от языка - PullRequest
0 голосов
/ 02 ноября 2018

Как заставить Флаттер соблюдать заданный интервал строки с помощью Text виджета?

Я заметил, что в зависимости от языка интервалы могут различаться, что делает высоту виджета непредсказуемой. Например, на арабском языке интервалы больше.

Я сравнил Flutter и Android и заметил, что Android TextView отображает арабский текст с тем же интервалом строки (он также автоматически отображает его справа налево, а Flutter - нет, что также подозрительно).

Примеры.

Детонация enter image description here Android enter image description here

Код флаттера

class IneterlineExample extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    final style = TextStyle(
        fontSize: 32.0,
      height: 1.0,
        );
    return Scaffold(
        appBar: AppBar(
          title: Text('Interline example'),

        ),
        body: Row(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: <Widget>[
            Container(
              width: 200.0,
              child: Text("This is a multiline text with English letters",
                  maxLines: 4,
                  overflow: TextOverflow.ellipsis,
                style: style,
              ),
            ),
            Container(
              width: 200.0,
              child: Text("آموزش کامل طرز تهیه پودینگ شکلاتی موز دسر مجلسی",
                  maxLines: 4,
                  overflow: TextOverflow.ellipsis,
                style: style,
              ),
            ),
            Container(
              width: 200.0,
              child: Text("В русском языке интервалы тоже ок Russian",
                  maxLines: 4,
                  overflow: TextOverflow.ellipsis,
                style: style,
              ),
            ),
          ],
        ));
  }
}

Код Android

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".ExampleActivity">

  <LinearLayout
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      app:layout_constraintBottom_toBottomOf="parent"
      app:layout_constraintLeft_toLeftOf="parent"
      app:layout_constraintRight_toRightOf="parent"
      app:layout_constraintTop_toTopOf="parent"
      >
    <TextView
        android:layout_width="200dp"
        android:layout_height="wrap_content"
        android:text="This is a multiline text with English letters"
        android:textSize="32dp"
        android:maxLines="4"
        android:ellipsize="end"
        />
    <TextView
        android:layout_width="200dp"
        android:layout_height="wrap_content"
        android:text="آموزش کامل طرز تهیه پودینگ شکلاتی موز دسر مجلسی"
        android:textSize="32dp"
        android:maxLines="4"
        android:ellipsize="end"
        />
    <TextView
        android:layout_width="200dp"
        android:layout_height="wrap_content"
        android:text="В русском языке интервалы тоже ок Russian"
        android:textSize="32dp"
        android:maxLines="4"
        android:ellipsize="end"
        />

  </LinearLayout>


</android.support.constraint.ConstraintLayout>

Исходная проблема, которую я пытаюсь решить, заключается в том, чтобы подогнать текст (язык неизвестен) к заданной высоте.

т.е. У меня есть текст, может быть длинный и коробка, WxH фиксированного размера. Я подсчитал, что с учетом размера шрифта и масштаба height я могу разместить L строк текста. Поэтому я поставил maxLines и ellipsize, и это работает в приложении для Android (так как высота строки предсказуема), но не в приложении Flutter. Я также был бы в порядке, если бы текст Flutter мог иметь многоточие при переполнении данного поля, но не уверен, как этого добиться.

1 Ответ

0 голосов
/ 02 апреля 2019

Я также опубликовал эту проблему на github: https://github.com/flutter/flutter/issues/23875

Теперь это исправлено (https://github.com/flutter/flutter/commit/c6cc3cdedafee41822ce832d7d73000f2e77b183), решение состоит в том, чтобы использовать strutStyle свойство Text

Text("Some Arabic text",
  strutStyle: StrutStyle(
    fontFamily: 'FontName',
    forceStrutHeight: true,
  ),
)

https://docs.flutter.io/flutter/painting/StrutStyle/forceStrutHeight.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...