Автоматическое масштабирование изображения в строке в соответствии с другими виджетами

#flutter #dart #flutter-layout

Вопрос:

В моем макете у меня есть Row . С левой стороны от этого Row у меня есть Column два Text объекта с разными размерами шрифта. На правой стороне Row , у меня есть Image . Я хочу Image , чтобы масштаб сам по себе равномерно имел высоту, равную внутренней высоте Column с левой стороны Row . Я хочу , чтобы это работало независимо Image от того, меньше или больше высота пикселя, чем внутренняя высота Column , независимо от размеров шрифта, используемых в Text виджетах, и коэффициента масштабирования текста, используемого операционной системой. (То есть я не хочу жестко кодировать Image размер.)

Как я могу это сделать? Я подозреваю, что мне может потребоваться скрыть Image виджет в каком-либо виджете, чтобы его родитель думал, что он имеет внутреннюю высоту 0, потому Image что s имеют внутреннюю высоту, равную их высоте пикселей.

Вот какой-то неработающий код, который я попробовал в DartPad:

(Примечание: сетевой образ-это тот же образ, который используется в документации @ https://flutter.dev/docs/cookbook/images/network-image . У меня нет на это никаких прав.)

 import 'package:flutter/material.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
        home: Scaffold(
            body: IntrinsicHeight(
      child: Container(
        color: Colors.green,
        width: 600,
        height: 600,
        child: Row(crossAxisAlignment: CrossAxisAlignment.end, children: [
          Column(children: [
            Text("Larger", style: TextStyle(fontSize: 36)),
            Text("Smaller", style: TextStyle(fontSize: 18))
          ]),
          Expanded(
              child: Image.network(
            "https://picsum.photos/250?image=9",
            alignment: Alignment.bottomRight,
            fit: BoxFit.scaleDown,
          ))
        ]),
      ),
    )));
  }
}
 

Комментарии:

1. Эй, дай мне знать, правильно ли я понял, ты пытаешься заполнить изображение на всю высоту контейнера, верно? Это сократит часть ширины изображения из-за того, насколько оно увеличено, это нормально?

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

3. ока, итак, вы хотите, чтобы изображение было центрировано в вашем контейнере, но как можно выше, верно?

4. @JaisonThomas В идеале я бы выровнял изображение по правому краю и по вертикали по центру в строке. И я хочу, чтобы высота изображения соответствовала высоте текстового столбца (т. Е. Общей высоте текстовых виджетов). Поэтому, если изображение окажется слишком высоким, оно будет неподходящим.

5. Ока, итак, вы хотите изображение, которое имеет высоту 2 текстовых полей и выровнено по правому краю? нормально ли, если текст тоже центрирован?