我正在使用sliding_up_panel小部件和頁腳屬性在底部顯示一些底部。問題是面板的內容隱藏在頁腳內容后面。我試著按照文檔中的建議添加填充,但這似乎并沒有得到理想的結果。
以下是小部件文檔的摘要。
頁腳:浮動在面板上方并附著到面板底部的可選持久控件。面板底部的內容將被此小部件覆蓋。在面板底部添加襯墊以避免覆蓋。
SlidingUpPanel(
backdropEnabled: true,
color: Colors.transparent,
minHeight: 140,
maxHeight: 300,
parallaxEnabled: true,
footer: SizedBox(
width: MediaQuery.of(context).size.width,
child: Padding(
padding: const EdgeInsets.all(10.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
SizedBox(
width: double.infinity,
child: ElevatedButton(
onPressed: () {},
child: Text("Subscribe"),
),
),
Row(
children: [
Expanded(
child: ElevatedButton(
onPressed: () {},
child: Text("Chat"),
),
),
SizedBox(width: 10),
Expanded(
child: ElevatedButton(
onPressed: () {},
child: Text("Learn More"),
))
],
),
],
),
),
),
panel: Padding(
padding: const EdgeInsets.only(bottom: 90.0),
child: Container(
decoration: const BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.only(
topLeft: Radius.circular(30),
topRight: Radius.circular(30),
),
),
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
Padding(
padding: const EdgeInsets.all(20),
child: Container(
width: 40,
height: 3,
decoration: const BoxDecoration(
color: Colors.black,
borderRadius: BorderRadius.all(
Radius.circular(10),
),
),
),
),
Align(
alignment: Alignment.topLeft,
child: Padding(
padding: const EdgeInsets.only(
left: 20,
right: 20,
),
child: Column(
crossAxisAlignment:
CrossAxisAlignment.start,
children: [
Text("Main Heading"),
Text("Sub Heading"),
Text(
"Text area 1 Text area 1 Text area 1 Text area 1 Text area 1 Text area 1 Text area 1 Text area 1 Text area 1 Text area 1 Text area 1 Text area 1 Text area 1"),
Text("Text area 2"),
Text("Text area 3"),
],
),
),
),
],
),
),
),
)
輸出如下圖所示:
Panel Closed
您可以注意到文本隱藏在按鈕后面。
Panel Open
我嘗試在面板上添加底部填充。當面板打開時,在面板底部增加了灰色區域。
請幫助防止將此文本隱藏在按鈕后面。
我認為底部填充物只能在面板打開時幫助使內容可見。當它關閉時,你需要一個頂部填充物——你可以添加它,但在這種情況下,當你打開面板時,填充物也會在那里。
因此,您可以嘗試保持面板的打開/關閉狀態,并根據該狀態調整內容。
在state類中創建成員變量:
向
SlidingUpPanel
添加回調函數以跟蹤狀態:現在,您可以根據面板位置顯示/隱藏內容,將包含“主標題、子標題”等的
Column
包裝到Visibility
小部件中:或者您可以使用
AnimatedOpacity
來使其更平滑:或者使用動態變化的頂部填充,如果面板打開,該填充將達到0(使用
Expanded
和SingleChildScrollView
以避免溢出):您可以微調上述版本以控制何時開始顯示內容等。
注意:在打開面板期間,上述代碼將導致多次重建。如果要避免這種情況,可以使用
bool
變量而不是double
,并且只跟蹤完全關閉(position == 0
)和完全打開({%27})狀態。當然,在這種情況下不能使用AnimatedOpacity
。