Czy istnieje prosty (inny niż LayoutBuilder) sposób określania rozmiaru elementu względem rozmiaru ekranu (szerokość / wysokość)? Na przykład: jak ustawić szerokość CardView na 65% szerokości ekranu.
Nie można tego zrobić wewnątrz build
metody (oczywiście), więc musiało zostać odłożone do czasu kompilacji. Czy jest jakieś preferowane miejsce na taką logikę?
Odpowiedzi:
FractionallySizedBox
może być również przydatne. Możesz także odczytać szerokość ekranu bezpośrednio zMediaQuery.of(context).size
i na tej podstawie utworzyć odpowiednie polejeśli naprawdę chcesz mieć ułamek ekranu, niezależnie od układu.
źródło
To jest odpowiedź uzupełniająca pokazująca implementację kilku z wymienionych rozwiązań.
FractionallySizedBox
Jeśli masz pojedynczy widżet, możesz użyć
FractionallySizedBox
widżetu, aby określić procent dostępnego miejsca do wypełnienia. Tutaj zielonyContainer
jest ustawiony na wypełnienie 70% dostępnej szerokości i 30% dostępnej wysokości.Rozszerzony
Expanded
Widget pozwala widget wypełnić dostępną przestrzeń, w poziomie, jeśli jest w rzędzie, albo pionowo, gdy znajduje się on w kolumnie. Możesz użyć tejflex
właściwości z wieloma widżetami, aby nadać im wagi. Tutaj zielonyContainer
zajmuje 70% szerokości, a żółtyContainer
30% szerokości.Jeśli chcesz to zrobić w pionie, a potem po prostu wymienić
Row
sięColumn
.Kod dodatkowy
Oto
main.dart
kod w celach informacyjnych.źródło
Dialog
stylizacji :)To może być trochę bardziej jasne:
Mam nadzieję, że to rozwiązało Twój problem.
źródło
Możesz zbudować kolumnę / wiersz z elementami podrzędnymi elastycznymi lub rozwiniętymi, które mają wartości flex, które sumują się do żądanych wartości procentowych.
Przydatny może być również widżet AspectRatio .
źródło
źródło
Można to zrobić na wiele sposobów
1. Korzystanie z MediaQuery: powrót do pełnego ekranu urządzenia, w tym paska aplikacji, paska narzędzi
2. Korzystanie z rozszerzenia: Możesz ustawić stosunek szerokości do wysokości
3. Inne, takie jak Flexible i AspectRatio oraz FractionallySizedBox
źródło
możesz użyć MediaQuery z bieżącym kontekstem twojego widżetu i uzyskać szerokość lub wysokość w ten sposób
double width = MediaQuery.of(context).size.width double height = MediaQuery.of(context).size.height
, możesz pomnożyć go przez żądany procentźródło
Najpierw uzyskaj rozmiar ekranu.
Po tym możesz go pobrać
width
i pomnożyć przez,0.5
aby uzyskać 50% szerokości ekranu.Ale problem pojawia się na ogół
height
, domyślnie, gdy używamyWysokość, którą otrzymujemy, to wysokość globalna, która obejmuje
StatusBar
+notch
+AppBar
wysokość. Aby więc uzyskać lewą wysokość urządzenia, musimy odjąćpadding
wysokość (StatusBar
+notch
) iAppBar
wysokość od całkowitej wysokości. Oto jak to robimy.Teraz możemy użyć następujących, aby uzyskać 50% wysokości naszego ekranu.
źródło
jeśli używasz GridView, możesz użyć czegoś takiego jak rozwiązanie Iana Hicksona.
źródło
Użyj widgetu LayoutBuilder, który zapewni ograniczenia, których możesz użyć do uzyskania wysokości, która wyklucza AppBar i wypełnienie. Następnie użyj SizedBox i podaj szerokość i wysokość przy użyciu ograniczeń z LayoutBuilder
źródło