Raj*_*eep 10 dart flutter flutter-layout
我有一个下拉按钮,它有圆形边缘。现在,如何使单击下拉列表时弹出的列表也具有圆形边缘?
下拉图片:
单击下拉菜单时弹出的列表图像(我想让这些边缘像我的下拉按钮一样变圆):
我的代码:
return Theme(
data: ThemeData(canvasColor: cardBlueColor, brightness: Brightness.dark),
child:Container(
width:MediaQuery.of(context).size.width/1.25,
child:Card(
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(15.0)),
color: cardBlueColor,
elevation: 8.0,
child:DropdownButtonHideUnderline(
child: ButtonTheme(
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(15.0)),
alignedDropdown: true,
child: DropdownButton(
elevation: 8,
icon: Icon(Icons.keyboard_arrow_down),
value: _dateSelected,
hint: AutoSizeText(NA_FLIGHT_PAGE_DROPDOWN, style: TextStyle(color: white,),textAlign: TextAlign.center,),
isDense: false,
onChanged: (String newValue){
setState(() {
_dateSelected = newValue;
dropdownMap = _getDropdownMap(snapshot);
});
},
items: dropdownList.map((key){
return DropdownMenuItem<String>(
value: key.toString(),
child: AutoSizeText(key.toString(), style: TextStyle(color: white,),textAlign: TextAlign.center,),
);
}).toList(),
),
),
)
)
)
);
Run Code Online (Sandbox Code Playgroud)
我试过的:
// adding a shape to the button theme
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(15.0))
Run Code Online (Sandbox Code Playgroud)
// adding a shape to the button theme
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(15.0))
Run Code Online (Sandbox Code Playgroud)
建议使用透明画布颜色方法的容器图像:
我能够为下拉菜单列表创建圆角,如下所示,
我是这样做的,
我从Flutter Material 包Dropdown复制了widget 代码,将ClipRRect添加到widget 的构建方法中。_DropdownMenu
您可以在存储库中下载此文件并将代码从第270行到第302行更改为
child: ClipRRect(
borderRadius: BorderRadius.all(Radius.circular(20)),
child: CustomPaint(
painter: _DropdownMenuPainter(
color: widget.dropdownColor ?? Theme.of(context).canvasColor,
elevation: route.elevation,
selectedIndex: route.selectedIndex,
resize: _resize,
// This offset is passed as a callback, not a value, because it must
// be retrieved at paint time (after layout), not at build time.
getSelectedItemOffset: () =>
route.getItemOffset(route.selectedIndex),
),
child: Semantics(
scopesRoute: true,
namesRoute: true,
explicitChildNodes: true,
label: localizations.popupMenuLabel,
child: Material(
type: MaterialType.transparency,
textStyle: route.style,
child: ScrollConfiguration(
behavior: const _DropdownScrollBehavior(),
child: Scrollbar(
child: ListView(
controller: widget.route.scrollController,
padding: kMaterialListPadding,
shrinkWrap: true,
children: children,
),
),
),
),
),
),
),
Run Code Online (Sandbox Code Playgroud)
import 'package:flutter/material.dart'
hide
DropdownButton,
DropdownButtonFormField,
DropdownButtonHideUnderline,
DropdownMenuItem;
Run Code Online (Sandbox Code Playgroud)
确保设置BorderRadius为所需的大小,如果您想制作圆形列表,请查看ClipOval并更改ClipRRect为ClipOval。
当您从此修改的文件导入此小部件时,还请确保您hide使用Dropdown或其他相关小部件。package:flutter/material.dartDropdown
首先,我认为您需要将其更改ThemeData.canvasColor为透明。然后尝试类似这样的事情:
items: <DropdownMenuItem>[
DropdownMenuItem(
child: Container(
decoration: BoxDecoration(
color: Colors.green,
borderRadius: BorderRadius.only(
topLeft: Radius.circular(15.0),
topRight: Radius.circular(15.0),
),
),
),
),
DropdownMenuItem(
child: Container(
decoration: BoxDecoration(
color: Colors.green,
),
),
),
DropdownMenuItem(
child: Container(
decoration: BoxDecoration(
color: Colors.green,
borderRadius: BorderRadius.only(
bottomLeft: Radius.circular(15.0),
bottomRight: Radius.circular(15.0),
),
),
),
),
],
Run Code Online (Sandbox Code Playgroud)
因此,第一个项目在顶部圆形,最后一个项目在底部圆形,可能有一种更优雅的方法来做到这一点,但它应该工作相同。
| 归档时间: |
|
| 查看次数: |
2272 次 |
| 最近记录: |