Flutter에서 사용자 지정 드롭 다운 메뉴를 만들려고합니다.이 메뉴는 탭시 스크롤 가능한 제품 행을 표시하는 간단한 버튼입니다. 내가 말하는 것을 더 잘 보여주는 이미지를 첨부했습니다. IconButton과 AnimatedContainer를 사용하려고했지만 작동하지 않는 것 같습니다. 나는 누군가가 이와 같은 일을하는 방법에 대해 더 나은 아이디어를 가지기를 바랬습니다.
지금까지 내 코드는 다음과 같습니다.
class ModelsDropdown extends StatefulWidget {
final List<Phone> phones;
ModelsDropdown({@required this.phones});
@override
_ModelsDropdownState createState() => _ModelsDropdownState();
}
class _ModelsDropdownState extends State<ModelsDropdown> {
bool _droppedDown;
@override
void initState() {
_droppedDown = false;
super.initState();
}
@override
Widget build(BuildContext context) {
return AnimatedContainer(
duration: Duration(milliseconds: 300),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(100.0),
border: Border.all(width: 2.0)
),
width: 32.0,
height: 32.0,
child: Column(
children: [
IconButton(
padding: const EdgeInsets.only(right: 0.0),
icon: Icon(
_droppedDown ? Icons.expand_more : Icons.expand_less
),
color: Colors.black,
onPressed: () {
setState(() {
_droppedDown = !_droppedDown;
});
}
),
_droppedDown ?
Container(
width: MediaQuery.of(context).size.width,
height: 300.0,
color: Colors.orangeAccent,
) :
SizedBox.shrink()
],
),
);
}
}
용기가 바닥에 있으면 작동하지 않습니다. 오버플로 오류가 발생합니다. 어떤 도움이라도 대단히 감사합니다. 모두 감사합니다.
AnimatedCrossFade로 아래 컨테이너를 변경해야한다고 생각합니다. 애니메이션 크로스 페이드에는 첫 번째와 두 번째 자식이 있습니다 ... https://api.flutter.dev/flutter/widgets/AnimatedCrossFade-class.html
자녀의 키를 설정하지 마십시오 ... 완벽하게 작동합니다 ...
AnimatedCrossFade(
duration: const Duration(seconds: 3),
firstChild: Container(), // When you don't want to show menu..
secondChild: menu,
crossFadeState: _first ? CrossFadeState.showFirst : CrossFadeState.showSecond,
)
이 방법을 사용하면 상단에 Animated Container가 필요하지 않습니다 ... 제거합니다. (return Column) ... with Animated cross Fade를 사용하면 위젯의 높이를 알 필요가 없습니다.
-------------- 코드를 사용하고 고정 높이를 사용하려는 경우 ----------------
width: _droppedDown ? YourWidth : 32.0,
height: _droppedDown ? 300 : 32.0,
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다