- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 ExpansionPanelList
中,我在展开/折叠小部件时遇到重建小部件的问题。
问题出在这里:
expansionCallback: (int index, bool isExpanded) {
setState(() {
_profileExpansionStateMap[_profileExpansionStateMap.keys.toList()[index]] = !isExpanded;
});
},
我将其更改为使用 Bloc
状态管理来解决,但这与 setState()
具有相同的行为。有什么办法可以避免重建小部件树吗?我无法使用 Selector
小部件,因为我认为它对我没有帮助。
import 'package:flutter/material.dart';
void main()=>runApp(MaterialApp(home: Home(),));
class Home extends StatefulWidget {
@override
State<StatefulWidget> createState() =>HomeState();
}
class HomeState extends State<Home> {
Map<String, bool> _profileExpansionStateMap = Map<String, bool>();
@override
void initState() {
super.initState();
_profileExpansionStateMap = {
"UserInformation": false,
"UserWeight": false,
"UserGeneralInformation": false,
};
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title:Text('ExpansionPanel')),
body: SingleChildScrollView(
child: Container(
padding: EdgeInsets.all(20.0),
child:ExpansionPanelList(
expansionCallback: (int index, bool isExpanded) {
setState(() {
_profileExpansionStateMap[_profileExpansionStateMap.keys.toList()[index]] = !isExpanded;
});
},
children: <ExpansionPanel>[
ExpansionPanel(
headerBuilder: (BuildContext context, bool isExpanded) {
return Container(
height: 80.0,
child: Text('aaaaaaaa'),
);
},
body: Container(child:Text('aaaaaaaa')),
isExpanded: _profileExpansionStateMap["UserInformation"]),
ExpansionPanel(
headerBuilder: (BuildContext context, bool isExpanded) {
return Container(
height: 80.0,
child: Text('bbbbbbbbbbbb'),
);
},
body: Container(child:Text('bbbbbbbbbbbb')),
isExpanded: _profileExpansionStateMap["UserWeight"]),
ExpansionPanel(
headerBuilder: (BuildContext context, bool isExpanded) {
return Container(
height: 80.0,
child: Text('ccccccccc'),
);
},
body: Container(child:Text('ccccccccc')),
isExpanded: _profileExpansionStateMap["UserGeneralInformation"]),
],
)
),
),
);
}
}
最佳答案
ExpansionPanelList.expansionCallback(...)
是一种方法,每当您点击 ExpansionPanelList
内的箭头按钮来展开/折叠它时,就会调用该方法。
在此方法中,您实际上应该设置传递给 ExpansionPanel
的 isExpanded
的 bool
值,因此需要您调用 setState (...)
。
但是,如果您对此有疑问,那么它清楚地表明您的代码有问题。因此,没有必要避免重建小部件状态。
关于Flutter 避免在折叠/展开 ExpansionPanelList 时重建小部件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57727691/
在下面的 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
我是一名优秀的程序员,十分优秀!