В чем разница между 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.