하단 시트 외부에서 탭을 활성화 할 수 있습니까?
Nov 28 2020
사용자가 하단 시트 외부에서도 조치 를 취할 수 있도록하고 싶습니다 . 예를 들어 아래 이미지에서 사용자가 재생 버튼을 탭하기를 원합니다 . 하단 시트의 장벽이 재생 버튼 클릭을 차단하고 있기 때문에 지금은 그렇게 할 수 없습니다.

- 내 연구에 따르면 하단 시트는 전체 화면 구성 요소입니다. 높이 반 화면 인 것 같은 속임수입니다. (배리어 색상을 투명하게 만들고 높이 제한을 추가하여).
showModalBottomSheet(
context: context,
isDismissible: false,
barrierColor: Colors.transparent,
builder: (_) {
return GestureDetector(
behavior: HitTestBehavior.translucent,
child: Container(
constraints: BoxConstraints(maxHeight: height),
color: Theme.of(context).cardColor,
child: child.....
),
);
},
isScrollControlled: true,
);
답변
3 MuhammetÖmer Nov 28 2020 at 04:23
나는 그것을 바닥 시트처럼 해결했지만 다른 방법으로 해결했습니다. 질문이 맞았 으면합니다.

import 'package:flutter/material.dart';
class BottomSheetOutside extends StatefulWidget {
@override
_BottomSheetOutsideState createState() => _BottomSheetOutsideState();
}
class _BottomSheetOutsideState extends State<BottomSheetOutside> with SingleTickerProviderStateMixin {
AnimationController _controller;
Animation<Offset> offset;
@override
void initState() {
super.initState();
_controller = AnimationController(vsync: this, duration: Duration(seconds: 1));
offset = Tween<Offset>(begin: Offset(0.0, 1.0), end: Offset.zero).animate(_controller);
}
@override
void dispose() {
super.dispose();
_controller.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Column(
children: [
Expanded(flex: 4, child: buildTop),
Expanded(flex: 6, child: buildBottom),
],
),
);
}
Container get buildTop {
return Container(
width: double.infinity,
color: Colors.red,
child: IconButton(
icon: Icon(Icons.play_circle_fill_rounded),
onPressed: () {
switch (_controller.status) {
case AnimationStatus.dismissed:
_controller.forward();
break;
case AnimationStatus.forward:
break;
case AnimationStatus.reverse:
break;
case AnimationStatus.completed:
_controller.reverse();
break;
}
},
),
);
}
Stack get buildBottom {
return Stack(children: [
Container(color: Colors.blue),
buildBottomSlide,
]);
}
Widget get buildBottomSlide {
return SlideTransition(
position: offset,
child: Card(
child: ListView.builder(
itemCount: 10,
itemBuilder: (context, index) => ListTile(
leading: Icon(Icons.comment),
title: Text("Test $index"),
),
),
),
);
}
}