Apakah ada cara sederhana (non-LayoutBuilder) untuk mengukur elemen relatif terhadap ukuran layar (lebar / tinggi)? Sebagai contoh: bagaimana cara mengatur lebar CardView menjadi 65% dari lebar layar.
Itu tidak dapat dilakukan di dalam build
metode (jelas) sehingga harus ditunda sampai posting dibangun. Apakah ada tempat yang disukai untuk menempatkan logika seperti ini?
Jawaban:
FractionallySizedBox
semoga bermanfaat juga. Anda juga dapat membaca lebar layar langsung dariMediaQuery.of(context).size
dan membuat kotak berukuran berdasarkan itujika Anda benar-benar ingin ukuran sebagai sebagian kecil dari layar terlepas dari apa tata letaknya.
sumber
Ini adalah jawaban tambahan yang menunjukkan implementasi beberapa solusi yang disebutkan.
Kotak pecahan
Jika Anda memiliki satu widget, Anda dapat menggunakan
FractionallySizedBox
widget untuk menentukan persentase ruang yang tersedia untuk diisi. Di sini hijauContainer
diatur untuk mengisi 70% dari lebar yang tersedia dan 30% dari tinggi yang tersedia.Diperluas
The
Expanded
widget memungkinkan widget untuk mengisi ruang yang tersedia, horizontal jika berturut-turut, atau vertikal jika berada dalam kolom. Anda dapat menggunakanflex
properti dengan beberapa widget untuk memberi mereka bobot. Di sini hijauContainer
mengambil 70% dari lebar dan kuningContainer
mengambil 30% dari lebar.Jika Anda ingin melakukannya secara vertikal, maka ganti saja
Row
denganColumn
.Kode tambahan
Ini
main.dart
kode untuk referensi Anda.sumber
Dialog
penataan rambut saya :)Ini mungkin sedikit lebih jelas:
Semoga ini menyelesaikan masalah Anda.
sumber
Anda dapat membuat Kolom / Baris dengan anak Fleksibel atau Diperluas yang memiliki nilai fleksibel yang menambahkan hingga persentase yang Anda inginkan.
Anda juga dapat menemukan widget AspectRatio berguna.
sumber
sumber
Ada banyak cara untuk melakukan ini
1. Menggunakan MediaQuery: Ini mengembalikan layar penuh perangkat Anda termasuk appbar, toolbar
2. Menggunakan Expanded: Anda dapat mengatur rasio lebar / tinggi
3. Lainnya Suka Fleksibel dan AspectRatio dan FractionallySizedBox
sumber
Anda dapat menggunakan MediaQuery dengan konteks widget Anda saat ini dan mendapatkan lebar atau tinggi seperti ini
double width = MediaQuery.of(context).size.width double height = MediaQuery.of(context).size.height
setelah itu, Anda dapat mengalikannya dengan persentase yang Anda inginkansumber
Pertama, dapatkan ukuran layar.
Setelah ini, Anda bisa mendapatkan
width
dan mengalikannya dengan0.5
untuk mendapatkan 50% dari lebar layar.Tapi masalah biasanya muncul
height
, secara default saat kita gunakanKetinggian yang kita dapatkan adalah ketinggian global yang mencakup ketinggian
StatusBar
+notch
+AppBar
. Jadi, untuk mendapatkan ketinggian kiri perangkat, kita perlu mengurangipadding
tinggi (StatusBar
+notch
) danAppBar
tinggi dari tinggi total. Inilah cara kami melakukannya.Sekarang kita bisa menggunakan berikut ini untuk mendapatkan tinggi layar 50%.
sumber
jika Anda menggunakan GridView Anda dapat menggunakan sesuatu seperti solusi Ian Hickson.
sumber
Gunakan Widget LayoutBuilder yang akan memberi Anda batasan yang bisa Anda gunakan untuk mendapatkan ketinggian yang tidak termasuk AppBar dan padding. Kemudian gunakan SizedBox dan berikan lebar dan tinggi menggunakan batasan dari LayoutBuilder
sumber