我尝试使用此插件folding_cell来制作可折叠的卡片小部件。但是我不知道如何添加多张卡。如果您知道任何解决方案,请帮助我。
import 'package:flutter/material.dart';
import 'package:folding_cell/folding_cell.dart';
void main() => runApp(MaterialApp(
home: SafeArea(
child: Scaffold(body: Material(child: FoldingCellSimpleDemo())))));
/// Example 1 folding cell inside [Container]
class FoldingCellSimpleDemo extends StatelessWidget {
final _foldingCellKey = GlobalKey<SimpleFoldingCellState>();
@override
Widget build(BuildContext context) {
return Container(
color: Color(0xFF2e282a),
alignment: Alignment.topCenter,
child: SimpleFoldingCell(
key: _foldingCellKey,
frontWidget: _buildFrontWidget(),
innerTopWidget: _buildInnerTopWidget(),
innerBottomWidget: _buildInnerBottomWidget(),
cellSize: Size(MediaQuery.of(context).size.width, 125),
padding: EdgeInsets.all(15),
animationDuration: Duration(milliseconds: 300),
borderRadius: 10,
onOpen: () => print('cell opened'),
onClose: () => print('cell closed')),
);
}
Widget _buildFrontWidget() {
return Container(
color: Color(0xFFffcd3c),
alignment: Alignment.center,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text("CARD",
style: TextStyle(
color: Color(0xFF2e282a),
fontFamily: 'OpenSans',
fontSize: 20.0,
fontWeight: FontWeight.w800)),
FlatButton(
onPressed: () => _foldingCellKey?.currentState?.toggleFold(),
child: Text(
"Open",
),
textColor: Colors.white,
color: Colors.indigoAccent,
splashColor: Colors.white.withOpacity(0.5),
)
],
));
}
Widget _buildInnerTopWidget() {
return Container(
color: Color(0xFFff9234),
alignment: Alignment.center,
child: Text("TITLE",
style: TextStyle(
color: Color(0xFF2e282a),
fontFamily: 'OpenSans',
fontSize: 20.0,
fontWeight: FontWeight.w800)));
}
Widget _buildInnerBottomWidget() {
return Container(
color: Color(0xFFecf2f9),
alignment: Alignment.bottomCenter,
child: Padding(
padding: EdgeInsets.only(bottom: 10),
child: FlatButton(
onPressed: () => _foldingCellKey?.currentState?.toggleFold(),
child: Text(
"Close",
),
textColor: Colors.white,
color: Colors.indigoAccent,
splashColor: Colors.white.withOpacity(0.5),
),
),
);
}
}
/// Example 2 folding cell inside [ListView]
class FoldingCellListViewDemo extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Container(
color: Color(0xFF2e282a),
child: ListView.builder(
itemCount: 100,
itemBuilder: (context, index) {
return SimpleFoldingCell(
frontWidget: _buildFrontWidget(index),
innerTopWidget: _buildInnerTopWidget(index),
innerBottomWidget: _buildInnerBottomWidget(index),
cellSize: Size(MediaQuery.of(context).size.width, 125),
padding: EdgeInsets.all(15),
animationDuration: Duration(milliseconds: 300),
borderRadius: 10,
onOpen: () => print('$index cell opened'),
onClose: () => print('$index cell closed'));
}),
);
}
Widget _buildFrontWidget(int index) {
return Builder(
builder: (BuildContext context) {
return Container(
color: Color(0xFFffcd3c),
alignment: Alignment.center,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text("CARD - $index",
style: TextStyle(
color: Color(0xFF2e282a),
fontFamily: 'OpenSans',
fontSize: 20.0,
fontWeight: FontWeight.w800)),
FlatButton(
onPressed: () {
SimpleFoldingCellState foldingCellState =
context.ancestorStateOfType(
TypeMatcher<SimpleFoldingCellState>());
foldingCellState?.toggleFold();
},
child: Text(
"Open",
),
textColor: Colors.white,
color: Colors.indigoAccent,
splashColor: Colors.white.withOpacity(0.5),
)
],
));
},
);
}
Widget _buildInnerTopWidget(int index) {
return Container(
color: Color(0xFFff9234),
alignment: Alignment.center,
child: Text("TITLE - $index",
style: TextStyle(
color: Color(0xFF2e282a),
fontFamily: 'OpenSans',
fontSize: 20.0,
fontWeight: FontWeight.w800)));
}
Widget _buildInnerBottomWidget(int index) {
return Builder(builder: (context) {
return Container(
color: Color(0xFFecf2f9),
alignment: Alignment.bottomCenter,
child: Padding(
padding: EdgeInsets.only(bottom: 10),
child: FlatButton(
onPressed: () {
SimpleFoldingCellState foldingCellState = context
.ancestorStateOfType(TypeMatcher<SimpleFoldingCellState>());
foldingCellState?.toggleFold();
},
child: Text(
"Close",
),
textColor: Colors.white,
color: Colors.indigoAccent,
splashColor: Colors.white.withOpacity(0.5),
),
),
);
});
}
}
请访问此link以查看图片(因为堆栈溢出不允许使用gif文件)
如果您已经在应用程序中尝试过此软件包,请帮助我。
如果您需要更多信息,请发表评论谢谢
答案 0 :(得分:1)
列表示例也在您自己的代码中, 只需通过 main 方法调用 FoldingCellListViewDemo 。
void main() => runApp(MaterialApp(
home: SafeArea(
child: Scaffold(body: Material(child: FoldingCellListViewDemo())))));
class FoldingCellListViewDemo extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Container(
color: Color(0xFF2e282a),
child: ListView.builder(
itemCount: 100,
itemBuilder: (context, index) {
return SimpleFoldingCell(
frontWidget: _buildFrontWidget(index),
innerTopWidget: _buildInnerTopWidget(index),
innerBottomWidget: _buildInnerBottomWidget(index),
cellSize: Size(MediaQuery.of(context).size.width, 125),
padding: EdgeInsets.all(15),
animationDuration: Duration(milliseconds: 300),
borderRadius: 10,
onOpen: () => print('$index cell opened'),
onClose: () => print('$index cell closed'));
}),
);
}
更新
问题:如何更改标题和字幕内容?
答案:请检查工作演示here
输出