Di Android match_parent
dan wrap_content
digunakan untuk mengubah ukuran widget secara otomatis relatif terhadap induknya untuk konten yang berisi widget.
Di Flutter, tampaknya secara default semua widget disetel ke wrap_content
, bagaimana cara mengubahnya sehingga saya bisa mengisi widgetnya width
dan widget height
induknya?
Tautan Artikel asli
sumber
crossAxisAlignment
bidang pada Baris dan Kolom yang dapat diaturCrossAxisAlignment.stretch
untuk diperluas secara horizontal dalam Kolom misalnyaJawaban singkatnya adalah bahwa orang tua tidak memiliki ukuran sampai anak tersebut memiliki ukuran.
Cara kerja tata letak di Flutter adalah setiap widget memberikan batasan untuk setiap turunannya, seperti "Anda bisa sampai selebar ini, Anda harus setinggi ini, Anda harus setidaknya selebar ini", atau apa pun (khususnya, mereka dapatkan lebar minimum, lebar maksimum, tinggi minimum, dan tinggi maksimum). Setiap anak mengambil batasan tersebut, melakukan sesuatu, dan memilih ukuran (lebar dan tinggi) yang cocok dengan batasan tersebut. Kemudian, setelah setiap anak menyelesaikan tugasnya, widget dapat memilih ukurannya sendiri.
Beberapa widget mencoba menjadi sebesar yang diizinkan oleh induknya. Beberapa widget mencoba sekecil yang diizinkan induknya. Beberapa widget mencoba menyesuaikan dengan ukuran "alami" tertentu (mis. Teks, gambar).
Beberapa widget memberi tahu anak-anak mereka bahwa mereka dapat berukuran berapa pun yang mereka inginkan. Beberapa memberi anak mereka kendala yang sama seperti yang mereka dapatkan dari orang tua mereka.
sumber
PageView
dalam aColumn
, dengan yang lainColumn
di dalam aruspage
, saya mendapatkan kesalahan rendering, tetapi saya dapat memperbaikinya dengan membungkus bagianPageView
dalamExpanded
atau aFlexible
. Masalahnya, 2 opsi tersebut hanya mengembangkan anaknya. Mengapa tidak ada widget terkait untuk menyusutkan go fit, seperti "wrap content", untuk mengatasi masalah rendering semacam ini?Sebenarnya ada beberapa opsi yang tersedia:
Anda dapat menggunakan SizedBox.expand untuk membuat widget Anda sesuai dengan dimensi orang tua, atau SizedBox (width: double.infinity) untuk mencocokkan hanya lebarnya atau SizedBox (heigth: double.infinity) untuk mencocokkan hanya tinggi.
Jika Anda menginginkan perilaku wrap_content, itu bergantung pada widget induk yang Anda gunakan, misalnya jika Anda meletakkan tombol pada kolom, tombol tersebut akan berperilaku seperti wrap_content dan untuk menggunakannya seperti match_parent Anda dapat membungkus tombol dengan widget yang Diperluas atau kotak ukuran.
Dengan ListView, tombol mendapatkan perilaku match_parent dan untuk mendapatkan perilaku wrap_content Anda bisa membungkusnya dengan widget Flex seperti Row.
Menggunakan widget yang Diperluas membuat anak dari Baris, Kolom, atau Lentur meluas untuk mengisi ruang yang tersedia di sumbu utama (misalnya, secara horizontal untuk Baris atau vertikal untuk Kolom). https://docs.flutter.io/flutter/widgets/Expanded-class.html
Menggunakan widget Fleksibel memberi anak Baris, Kolom, atau Lentur fleksibilitas untuk memperluas untuk mengisi ruang yang tersedia di sumbu utama (misalnya, horizontal untuk Baris atau vertikal untuk Kolom), tetapi, tidak seperti Diperluas, Fleksibel tidak meminta anak untuk mengisi ruang yang tersedia. https://docs.flutter.io/flutter/widgets/Flexible-class.html
sumber
Solusi sederhana:
Jika sebuah penampung hanya memiliki satu turunan tingkat atas, Anda dapat menentukan properti penyelarasan untuk anak tersebut dan memberikan nilai yang tersedia. itu akan mengisi semua ruang di wadah.
Cara lain:
sumber
BoxConstraints.expand(height: 100.0)
berfungsi dengan baik sebagaiwidth="match_parent"
padanan AndroidSaya menggunakan solusi ini, Anda harus menentukan tinggi dan lebar layar Anda menggunakan MediaQuery:
sumber
sumber
Gunakan widget
Wrap
.Untuk
Column
perilaku serupa coba:Untuk
Row
perilaku serupa coba:Untuk informasi lebih lanjut: Wrap (Flutter Widget)
sumber
Gunakan baris kode ini di dalam Kolom. Untuk wrap_content:
mainAxisSize: MainAxisSize.min
Untuk match_parent:mainAxisSize: MainAxisSize.max
sumber
Sebenarnya ada cara yang sangat mudah dan rapi untuk melakukan ini.
Gunakan
FractionallySizedBox
widget.Widget ini juga sangat berguna ketika Anda ingin mengukur anak Anda pada pecahan dari ukuran induknya.
sumber
Untuk membuat seorang anak mengisi induknya, cukup bungkus ke dalam FittedBox
sumber