В чем разница между double.infinity и MediaQuery?

Чтобы занять всю ширину или высоту, я использую double.infinity, но пройдя некоторые образцы флаттера, я заметил, что многие люди используют MediaQuery.of(context).size.width или же height, Я просмотрел документы, но нет никаких различий, упомянутых между этими двумя и когда использовать тот, который оба позволяют одну и ту же функцию. Они специфичны для определенных виджетов?

2 ответа

Решение

Разница может быть сведена к:

  • Я хочу быть настолько большим, насколько позволяет мой родитель (double.infinity)
  • Я хочу быть размером с экран (MediaQuery).

Обычно вы хотите использовать double.infinity, но это не всегда возможно.

Некоторые виджеты позволяют своим детям быть такими большими, какими они хотят (Column, ListView, OverflowBox...). В этой ситуации, используя double.infinity создает парадокс:

  • Родитель допускает любой размер
  • Ребенок хочет самого большого размера, разрешенного родителем

С помощью MediaQuery в этих ситуациях все же плохо. Вы редко захотите сделать это, если вы не создаете виджет, похожий на Scaffold,

Вот где виджеты, такие как IntrinsincHeight пригодится. Эти виджеты способны решить парадокс, и, следовательно, имеют действительный макет.

MediaQuery занимает пространство в соответствии с размером экрана, тогда как double.infinity занимает пространство в соответствии с размером родительского элемента. Его можно сопоставить с match-parent в Android.

Другие вопросы по тегам