- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
Flutter 的扩展面板列表 ( https://docs.flutter.io/flutter/material/ExpansionPanelList-class.html ) 没有装饰。如何创建圆边扩展面板列表?请看附图。
最佳答案
没有直接的方法可以使扩展面板的角变圆,但是 flutter 是完全开源的,您可以轻松获取 ExpansionPanelList 类的实现并复制并制作 CustomExpansionPanelList 以根据您的要求制作 UI。这是 CustomExpansionPanelList 的简单代码,您只需将 ExpansionPanelList 小部件替换为 CustomExpansionPanelList 即可使用
import 'package:flutter/material.dart';
const double _kPanelHeaderCollapsedHeight = 48.0;
const double _kPanelHeaderExpandedHeight = 64.0;
class CustomExpansionPanelList extends StatelessWidget {
const CustomExpansionPanelList(
{Key key,
this.children: const <ExpansionPanel>[],
this.expansionCallback,
this.animationDuration: kThemeAnimationDuration})
: assert(children != null),
assert(animationDuration != null),
super(key: key);
final List<ExpansionPanel> children;
final ExpansionPanelCallback expansionCallback;
final Duration animationDuration;
bool _isChildExpanded(int index) {
return children[index].isExpanded;
}
@override
Widget build(BuildContext context) {
final List<Widget> items = <Widget>[];
const EdgeInsets kExpandedEdgeInsets = const EdgeInsets.symmetric(
vertical: _kPanelHeaderExpandedHeight - _kPanelHeaderCollapsedHeight);
for (int index = 0; index < children.length; index += 1) {
if (_isChildExpanded(index) && index != 0 && !_isChildExpanded(index - 1))
items.add(new Divider(
key: new _SaltedKey<BuildContext, int>(context, index * 2 - 1),
height: 15.0,
color: Colors.transparent,
));
final Row header = new Row(
children: <Widget>[
new Expanded(
child: new AnimatedContainer(
duration: animationDuration,
curve: Curves.fastOutSlowIn,
margin: _isChildExpanded(index)
? kExpandedEdgeInsets
: EdgeInsets.zero,
child: new SizedBox(
height: _kPanelHeaderCollapsedHeight,
child: children[index].headerBuilder(
context,
children[index].isExpanded,
),
),
),
),
new Container(
margin: const EdgeInsetsDirectional.only(end: 8.0),
child: new ExpandIcon(
isExpanded: _isChildExpanded(index),
padding: const EdgeInsets.all(16.0),
onPressed: (bool isExpanded) {
if (expansionCallback != null)
expansionCallback(index, isExpanded);
},
),
),
],
);
double _radiusValue = _isChildExpanded(index)? 8.0 : 0.0;
items.add(
new Container(
key: new _SaltedKey<BuildContext, int>(context, index * 2),
child: new Material(
elevation: 2.0,
borderRadius: new BorderRadius.all(new Radius.circular(_radiusValue)),
child: new Column(
children: <Widget>[
header,
new AnimatedCrossFade(
firstChild: new Container(height: 0.0),
secondChild: children[index].body,
firstCurve:
const Interval(0.0, 0.6, curve: Curves.fastOutSlowIn),
secondCurve:
const Interval(0.4, 1.0, curve: Curves.fastOutSlowIn),
sizeCurve: Curves.fastOutSlowIn,
crossFadeState: _isChildExpanded(index)
? CrossFadeState.showSecond
: CrossFadeState.showFirst,
duration: animationDuration,
),
],
),
),
),
);
if (_isChildExpanded(index) && index != children.length - 1)
items.add(new Divider(
key: new _SaltedKey<BuildContext, int>(context, index * 2 + 1),
height: 15.0,
));
}
return new Column(
children: items,
);
}
}
class _SaltedKey<S, V> extends LocalKey {
const _SaltedKey(this.salt, this.value);
final S salt;
final V value;
@override
bool operator ==(dynamic other) {
if (other.runtimeType != runtimeType) return false;
final _SaltedKey<S, V> typedOther = other;
return salt == typedOther.salt && value == typedOther.value;
}
@override
int get hashCode => hashValues(runtimeType, salt, value);
@override
String toString() {
final String saltString = S == String ? '<\'$salt\'>' : '<$salt>';
final String valueString = V == String ? '<\'$value\'>' : '<$value>';
return '[$saltString $valueString]';
}
}
关于flutter - 如何将 Flutter 的 ExpansionPanelList 小部件的默认框装饰更改为圆角矩形框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50936008/
在下面的 flutter ExpansionPanelList 小部件中,我试图将白色背景着色为其他颜色,例如 indigo,我找不到任何文档或有用的链接来实现那个 ExpansionPanelLis
我在 Tab() 中使用 ExpansionPanel()。 ExpansionPanel() 正确显示。但是它的 isExpanded 属性永远不会改变(是的,我有一行应该改变它)使得它不可能折叠或
我通过使用 Provider 包而不是使 Widget 成为 statefulWidget 来实现 ExpansionPanelList。但是,expansionCallback 永远无法正常工作。如
我是 flutter 的新手,并且在 flutter 的样式方式上有些挣扎(从没想过我会这么说,但我想念 css)。我制作了一个 ExpansionPanelList 并且我想在标题之间添加间距,以便
我试图像小部件一样列出下拉列表,但幸运的是找到了扩展面板列表小部件来获得我想要的用户体验。 所以,我在我的 flutter 应用程序中使用 ExpansionPanelList,但不需要它附带的默认高
在 ExpansionPanelList 中,我在展开/折叠小部件时遇到重建小部件的问题。 问题出在这里: expansionCallback: (int index, bool isExpanded
我有一个模态底页,我想在其中放置扩展列表。为此,我创建了一个类来为我的 ExpansionPanelList 创建项目。 class FilterItem { bool isExpanded;
我是 Flutter 的新手,所以我正在努力学习。但我一直在创建一个带有 ExpansionPanel 的 ExpansionPanelList。就像标题所说的那样,所有这些都是在谷歌的 Flutte
Flutter 的扩展面板列表 ( https://docs.flutter.io/flutter/material/ExpansionPanelList-class.html ) 没有装饰。如何创建
在 ExpansionPanelList 的 ListTile 中,试用已经作为向下箭头给出,当 ListTile 展开时,箭头变为向上箭头。 但是,它的颜色很深。我添加了尾随:图标(blah bla
我是一名优秀的程序员,十分优秀!