반응형
떨림: 드롭다운 항목과 드롭다운 단추 선택 항목에 대해 다른 색상을 설정하는 방법은 무엇입니까?
나는 내 프로젝트에 포함시켰지만 이 문제를 고수했다.
테마를 사용해봤는데 색상도 둘 다 달라져요. 드롭다운의 배경색은 변경할 수 있지만 흰색에 검은색 텍스트를 사용하고 싶었습니다.
텍스트 색상도 흰색이므로 드롭다운이 흰색입니다
AccentColorOverride(
child: Theme(
data: ThemeData(
hintColor: Colors.white,
selectedRowColor: Colors.white),
child: DropdownButton<String>(
value: selectedRegion,
hint: Text(hint_label_region, style: white18),
isExpanded: true,
underline: Container(
height: 1.0,
decoration: const BoxDecoration(
border: Border(
bottom: BorderSide(
color: Color(0xFFBDBDBD),
width: 2))),
),
items: <String>[
'A',
'B',
'C',
'D'
].map<DropdownMenuItem<String>>((String value) {
return DropdownMenuItem<String>(
value: value,
child: new Text(
value,
style: TextStyle(color: Colors.white),
),
);
}).toList(),
onChanged: (String newValue) {
setState(() {
selectedRegion = newValue;
});
},
),
),
)
앞서 Leo가 언급했듯이, 당신은 선택한 Item Builder를 사용하고 새로 생성된 목록을 전달해야 하며, 당신은 두 목록을 만들고 당신이 변경하고 싶은 것을 취하는 기능을 만들 수 있다.. 코드는 다음과 같습니다:
List<DropdownMenuItem<String>> _createChildrenList(Color textColor) =>typesOfPayments
.map<DropdownMenuItem<String>>((String value) {
return DropdownMenuItem<String>(
value: value,
child: CustomText(
color: textColor,
padding: const EdgeInsets.symmetric(horizontal: 10),
text: value,
fontFamily: HelperCubit.getFontFamilyByLanguage(context),
),
); }).toList();
드롭다운 버튼에서 생성된 기능을 사용합니다
items: _createChildrenList(Colors.white),
selectedItemBuilder: (context) =>_createChildrenList(MaterialData.kPrimaryColor),
이것이 작동해야 한다고 생각합니다. '_selected'와 같은 상태를 정의합니다ItemValue', 사용자가 항목을 탭할 때 SetState를 호출하고 이 상태를 기준으로 드롭다운 메뉴 항목을 렌더링합니다.
.
.
.
].map<DropdownMenuItem<String>>((String value) {
return GestureDetector(
onTap: () {
setState() {
_selectedItemValue = value;
}
} ,
child:DropdownMenuItem<String>(
value: value,
child: Container(
color: value == _selectedItemValue ? Colors.blue : Colors.white,
child: new Text(
value,
style: TextStyle(color: Colors.white),
),),
),);
}).toList(),
여전히 필요한 사용자가 있는 경우 선택한 사용자 정의 Item Builder를 설정할 수 있습니다. 즉, 기본적으로 목록 유형과 관련하여 원하는 모든 항목을 표시할 수 있습니다. 다음은 예입니다:
var listSorted = list.map((dropdownItem) {
return DropdownMenuItem<dynamic>(
child: Text("${dropdownItem.label}",
style: TextStyle(color: Colors.black)),
value: dropdownItem.value);
}).toList();
return Container(
child: DropdownButton(
isExpanded: true,
iconEnabledColor: Colors.white,
underline: Container(
width: 200,
height: 1,
color: Colors.white,
),
value: valueToUpdate,
items: listSorted,
onChanged: onChanged,
selectedItemBuilder: (BuildContext ctxt) {
return list.map<Widget>((item) {
return DropdownMenuItem(
child: Text("${item.label}",
style: TextStyle(color: Colors.white)),
value: item.value);
}).toList();
},
dropdownColor: backgroundColor,
)));
반응형
'개발하자' 카테고리의 다른 글
Python에서 중첩된 데이터 구조의 소수점 반올림 (0) | 2023.03.11 |
---|---|
카운트가 있는 리소스에 대한 테라폼 출력 (0) | 2023.03.10 |
Kubernetes 리소스에 사용자 지정 최종 사용자 구현 (0) | 2023.03.09 |
어떻게 yaml에 의해 비밀 파일을 쿠버네티스 비밀로 설정합니까? (0) | 2023.03.08 |
플러터에서 텍스트를 수직 및 수평으로 중앙에 배치하려면 어떻게 해야 합니까? (0) | 2023.03.08 |