Size: a a a

Dart & Flutter по-русски

2020 November 29

V

Vadim in Dart & Flutter по-русски
Evgeny Cherkasov
У меня был виджет с двумя состояниями, в первом он отрисовывается с ограничениями родителя, а во втором должен сохранить размеры, которые получил в первом состоянии. Кроме как взять размеры из рендер объекта в постфрейм коллбэке не нашел варианта, хотя были подозрения что может как то ещё можно.
может можно было подняться на уровень выше по дереву?
например, CustomSingleChildLayout,  все знает о своих внешних размерах получаемых от родителя и может в рамках этого управлять размерами и позицией чайлда своего (который с 2мя стейтами)
источник

AZ

Alexey Z in Dart & Flutter по-русски
Evgeny Cherkasov
У меня был виджет с двумя состояниями, в первом он отрисовывается с ограничениями родителя, а во втором должен сохранить размеры, которые получил в первом состоянии. Кроме как взять размеры из рендер объекта в постфрейм коллбэке не нашел варианта, хотя были подозрения что может как то ещё можно.
LayoutBuilder не?
источник

EC

Evgeny Cherkasov in Dart & Flutter по-русски
Alexey Z
LayoutBuilder не?
Он даёт только constraints
источник

EC

Evgeny Cherkasov in Dart & Flutter по-русски
Vadim
может можно было подняться на уровень выше по дереву?
например, CustomSingleChildLayout,  все знает о своих внешних размерах получаемых от родителя и может в рамках этого управлять размерами и позицией чайлда своего (который с 2мя стейтами)
Думал о нем, но не понял как он мне сможет помочь, и сможет ли вообще. Насколько помню он свой размер не может по дочернему виджету устанавливать.
источник

AZ

Alexey Z in Dart & Flutter по-русски
Он как раз по дочерним и строит constains
источник

V

Vadim in Dart & Flutter по-русски
Evgeny Cherkasov
Думал о нем, но не понял как он мне сможет помочь, и сможет ли вообще. Насколько помню он свой размер не может по дочернему виджету устанавливать.
это типа "прокси" виджет, он получает размер, которые ему дает родитель, а уже он управляет чайлдом, вот который у тебя в 2-х стейтах должен быть. Т.е. не чайлд определяет свой размер для 2-х состояний, а customsinglechildlayout командует ему
источник

EC

Evgeny Cherkasov in Dart & Flutter по-русски
Alexey Z
Он как раз по дочерним и строит constains
Layout builder даёт constraints, на основании которых можно строить то или иное дерево. Это не то что нужно.
источник

EC

Evgeny Cherkasov in Dart & Flutter по-русски
Vadim
это типа "прокси" виджет, он получает размер, которые ему дает родитель, а уже он управляет чайлдом, вот который у тебя в 2-х стейтах должен быть. Т.е. не чайлд определяет свой размер для 2-х состояний, а customsinglechildlayout командует ему
Ну это немного другая логика получается. Мне как раз нужно чтобы в первом состоянии виджет сам определял свой размер, а во втором использовал первый.
источник

M

Mitai in Dart & Flutter по-русски
как у флаттер фор веб обстоят дела с всевозможными читалками? для людей с ограниченными возможностями
источник

EC

Evgeny Cherkasov in Dart & Flutter по-русски
Конкретно, в первом состоянии виджет показывает стандартную кнопку. Она сама свои размеры определяет по своему контенту. А во втором мне нужно было заменить контент в кнопке, но так чтобы размеры сохранились.
источник

V

Vadim in Dart & Flutter по-русски
Evgeny Cherkasov
Ну это немного другая логика получается. Мне как раз нужно чтобы в первом состоянии виджет сам определял свой размер, а во втором использовал первый.
вот синглчайл дает сначала один размер который нужно, а затем ограничивает другим, а чайлд с 2мя стейтами "тупой" берет, всегда от родителя. Может я несовсем понял, когда один, а затем другой размер и когда происходит "переключение"
источник

V

Vadim in Dart & Flutter по-русски
Evgeny Cherkasov
Конкретно, в первом состоянии виджет показывает стандартную кнопку. Она сама свои размеры определяет по своему контенту. А во втором мне нужно было заменить контент в кнопке, но так чтобы размеры сохранились.
а снаруже кто ее ограничивает? она же не может быть больше экрана например
источник

EC

Evgeny Cherkasov in Dart & Flutter по-русски
Vadim
а снаруже кто ее ограничивает? она же не может быть больше экрана например
Неявные ограничения есть конечно. Но стандартно кнопка же сама размеры определяет, в зависимости от текста и размера шрифта. Фиксированных ограничений нужно было избежать.
источник

SM

Serge Matveenko in Dart & Flutter по-русски
Евгений Баладжа
Привет всем! Вроде типичная задача - отобразить фотку на экране. Перед этим проверить соотношение сторон, если вертикальная - отобразить как есть, а если горизонтальная - повернуть на 90%. Как такое решается? Я попробовал сначала создать виджет Image.memory(..), а потом проверить его ширину/высоту, но они null. Пробовал использовать пакет image, но функция decodeImage()  жутко тормознутая - на телефоне 3 секунды (!!). Но ведь эту же задачу сам Андроид решает мгновенно, почему Dart не может? Какие у меня еще варианты?
1. Кто сказал, что соотношение сторон тождественно ориентации?
2. Андроид это делает не сам, если вы про просмотр изображения, а приложением просмотра изображений, которое читает данные exif об ориентации использованной во время съёмки из файла.
Думаю, кто-то уже написал виджет, который умеет так же.
Гуглите flutter exif rotate widget
источник

ЕБ

Евгений Баладжа... in Dart & Flutter по-русски
Serge Matveenko
1. Кто сказал, что соотношение сторон тождественно ориентации?
2. Андроид это делает не сам, если вы про просмотр изображения, а приложением просмотра изображений, которое читает данные exif об ориентации использованной во время съёмки из файла.
Думаю, кто-то уже написал виджет, который умеет так же.
Гуглите flutter exif rotate widget
Да я уже написал, тут все просто, главное было - перед рендером получить размеры изображения и сравнить с размерами медиа. Все работает мгновенно. Работает даже в Stateless виджетах!

        body: Center(
         child: Builder(builder: (context) {
           var completer = Completer<bool>();
           Image.memory(_photoData)
               .image
               .resolve(new ImageConfiguration())
               .addListener(ImageStreamListener(
             (info, sync) {
               var image = info.image;
               var media = MediaQuery.of(context).size;
               completer.complete(
                   media.width < media.height && image.width > image.height);
             },
           ));
           return FutureBuilder(
               future: completer.future,
               builder: (context, snapshot) {
                 if (snapshot.hasData) {
                   if (snapshot.data == true) {
                     return RotatedBox(
                         quarterTurns: 1, child: Image.memory(_photoData));
                   } else {
                     return Image.memory(_photoData);
                   }
                 } else {
                   return Container();
                 }
               });
         }),
       ),
источник

SM

Serge Matveenko in Dart & Flutter по-русски
Евгений Баладжа
Да я уже написал, тут все просто, главное было - перед рендером получить размеры изображения и сравнить с размерами медиа. Все работает мгновенно. Работает даже в Stateless виджетах!

        body: Center(
         child: Builder(builder: (context) {
           var completer = Completer<bool>();
           Image.memory(_photoData)
               .image
               .resolve(new ImageConfiguration())
               .addListener(ImageStreamListener(
             (info, sync) {
               var image = info.image;
               var media = MediaQuery.of(context).size;
               completer.complete(
                   media.width < media.height && image.width > image.height);
             },
           ));
           return FutureBuilder(
               future: completer.future,
               builder: (context, snapshot) {
                 if (snapshot.hasData) {
                   if (snapshot.data == true) {
                     return RotatedBox(
                         quarterTurns: 1, child: Image.memory(_photoData));
                   } else {
                     return Image.memory(_photoData);
                   }
                 } else {
                   return Container();
                 }
               });
         }),
       ),
Мой первый вопрос остаётся валидным
источник

V

Vadim in Dart & Flutter по-русски
Evgeny Cherkasov
Неявные ограничения есть конечно. Но стандартно кнопка же сама размеры определяет, в зависимости от текста и размера шрифта. Фиксированных ограничений нужно было избежать.
ну тот же самый лэйаут билдер? в первом состоянии мы игнорируем constraints получаемые от родителя или используем их как есть, при "переключении" во второе состояние оборачиваем виджет в constrainedbox c constraints полученные при билде
источник

SS

Stefan Stefan in Dart & Flutter по-русски
всем привет, возникла идея, при пуше на гитхаб собирать апку и деплоить уже на сервак. Кто-то такое делал?
источник

ЕБ

Евгений Баладжа... in Dart & Flutter по-русски
Serge Matveenko
Мой первый вопрос остаётся валидным
Не понял. Мы проверяем И соотношение сторон фото И соотношение сторон медиа, и принимам решение - поворачивать или нет.
источник

S

Sapar in Dart & Flutter по-русски
Stefan Stefan
всем привет, возникла идея, при пуше на гитхаб собирать апку и деплоить уже на сервак. Кто-то такое делал?
источник