Как работать с динамическими c изображениями в FittedBox - PullRequest
0 голосов
/ 19 февраля 2020

В настоящее время я использую раскрывающуюся кнопку в качестве заголовка скаффолда.

В этом раскрывающемся списке некоторые параметры не имеют соответствующего изображения, и поэтому отображается только текст. У меня это работает отлично, моя единственная проблема в том, что всегда возникает ошибка, когда приложение запускается (без горячей перезагрузки), потому что изображение не загружается мгновенно, означая, что FittedBox пытается установить пустой виджет, как только он загружается, он в порядке , а затем горячие перезагрузки работают нормально, без ошибок, потому что изображение уже загружено. Вот мой код для моих DropDownMenuItems:

return DropdownMenuItem(
                    value: company.id.toString(),
                    child: Center(
                        child: FittedBox(
                            child: Center(
                                child: Column(
                      mainAxisAlignment: MainAxisAlignment.center,
                      crossAxisAlignment: CrossAxisAlignment.center,
                      children: <Widget>[
                        Container(
                          margin: EdgeInsets.all(10),
                          child: (config.companyLogos[company.id] != null)
                              ? FittedBox(
                                  child: Image.asset(
                                    config.companyLogosPath +
                                        config.companyLogos[company.id],
                                    height: 50,
                                  ),
                                  fit: BoxFit.contain,
                                )
                              : FittedBox(
                                  child: Text(
                                  company.name,
                                  style: TextStyle(fontSize: 30),
                                )),
                        ),
                      ],
                    )))));

А вот ошибка, которая выдается при запуске приложения, я уверен, что это связано с тем, что я описал выше:

flutter: ══╡ EXCEPTION CAUGHT BY RENDERING LIBRARY ╞═════════════════════════════════════════════════════════
flutter: The following assertion was thrown during performLayout():
flutter: 'package:flutter/src/rendering/box.dart': Failed assertion: line 313 pos 12: 'width > 0.0': is not
flutter: true.

Рассмотренные решения:

Возможным решением было бы предоставить ширину изображения, я мог бы включить это в свою карту companyLogos, сделав ее Картой Карт и включив имя файла и ширину в субкарту.

Тем не менее, у меня есть ie это, и это, похоже, не работает, просто делает мои изображения намного меньше, чем если бы я использовал ненастроенную ширину.

Я не являюсь явно определение ширины, чтобы оно сохраняло свое соотношение сторон, в то время как все еще умещается в строке.

Возможно, мне здесь не хватает трюка с обработкой изображений в флаттере / дротике, любая помощь будет принята с благодарностью, спасибо!

1 Ответ

1 голос
/ 19 февраля 2020

Благодаря @pskink я решил проблему.

Я решил ее, полностью очистив FittedBox и используя свойство Image 'fit:'.

Вот мой фиксированный код:

return DropdownMenuItem(
                    value: company.id.toString(),
                    child: Center(
                        child: FittedBox(
                            child: Center(
                                child: Column(
                      mainAxisAlignment: MainAxisAlignment.center,
                      crossAxisAlignment: CrossAxisAlignment.center,
                      children: <Widget>[
                        Container(
                          margin: EdgeInsets.all(10),
                          child: (config.companyLogos[company.id] != null)
                              ? Container(
                                  child: Image.asset(
                                  config.companyLogosPath +
                                      config.companyLogos[company.id],
                                  height: 50,
                                  fit: BoxFit.contain,
                                ))
                              : FittedBox(
                                  child: Text(
                                  company.name,
                                  style: TextStyle(fontSize: 30),
                                )),
                        ),
                      ],
                    )))));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...