Flutter 使用按钮和滚动将小部件添加到GridView时出现问题
起初,我有一个包装,点击“添加”按钮将添加一个新的卡到包装。然后我将包装更改为GridView,以便添加滚动。但是,现在当我按下按钮时,设备上没有显示任何内容,但是如果我将GridView更改回包裹和热重新加载,卡会显示吗?我不知道怎么了 我也不能滚动,我知道我做错了什么,但我不知道是什么Flutter 使用按钮和滚动将小部件添加到GridView时出现问题,flutter,dart,Flutter,Dart,起初,我有一个包装,点击“添加”按钮将添加一个新的卡到包装。然后我将包装更改为GridView,以便添加滚动。但是,现在当我按下按钮时,设备上没有显示任何内容,但是如果我将GridView更改回包裹和热重新加载,卡会显示吗?我不知道怎么了 我也不能滚动,我知道我做错了什么,但我不知道是什么 class MainScreen extends StatefulWidget { @override _MainScreenState createState() => _MainScreen
class MainScreen extends StatefulWidget {
@override
_MainScreenState createState() => _MainScreenState();
}
class _MainScreenState extends State<MainScreen> {
List<Widget> cards = [];
dynamic addReusableCard (String activity, int goal, double elapsed){
return cards.add(ReusableCard(activityText: activity, activityLength: goal, activityTimeElapsed: elapsed,));
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: SafeArea(
child: Padding(
padding: const EdgeInsets.symmetric(horizontal: 8.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisSize: MainAxisSize.max,
children: <Widget>[
Text('TIME CARDS',
style: TextStyle(
fontSize: 20.0,
letterSpacing: 5.0,
),),
Text('You\'re awake for a total of 16h',
style: TextStyle(
fontSize: 16.0,
fontStyle: FontStyle.italic,
),),
Expanded(
flex: 9,
child: GridView.count(
crossAxisCount: 2,
childAspectRatio: (175.0 / 220.0),
scrollDirection: Axis.vertical,
shrinkWrap: true,
physics: ScrollPhysics(),
children: cards
),
),
Padding(
padding: const EdgeInsets.all(18.0),
child: Align(
alignment: Alignment.bottomRight,
child: FloatingActionButton(
onPressed: (){
setState(() {
addReusableCard('reading', 2, 0.3);
});
},
backgroundColor: kAccentColor,
elevation: 0.0,
child: Icon(Icons.add),
),
),
),
],
),
),
),
);
}
}
class主屏幕扩展StatefulWidget{
@凌驾
_MainScreenState createState()=>\u MainScreenState();
}
类_MainScreenState扩展状态{
列表卡=[];
动态addReusableCard(字符串活动、整数目标、双倍运行){
返回卡片。添加(可重用卡片(activityText:activity,activityLength:goal,ActivityTimePassed:Passed,);
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
正文:安全区(
孩子:填充(
填充:常量边集。对称(水平:8.0),
子:列(
crossAxisAlignment:crossAxisAlignment.center,
mainAxisSize:mainAxisSize.max,
儿童:[
文本(‘时间卡’,
样式:TextStyle(
字体大小:20.0,
字母间距:5.0,
),),
Text('你总共醒了16小时',
样式:TextStyle(
字体大小:16.0,
fontStyle:fontStyle.italic,
),),
扩大(
弹性:9,
子项:GridView.count(
交叉轴计数:2,
儿童方面:(175.0/220.0),
滚动方向:轴垂直,
收缩膜:对,
物理:物理(),
儿童:卡片
),
),
填充物(
填充:常数边集全部(18.0),
子对象:对齐(
对齐:对齐。右下角,
子:浮动操作按钮(
已按下:(){
设置状态(){
添加可重用卡(“读取”,2,0.3);
});
},
背景颜色:kAccentColor,
标高:0.0,
子:图标(Icons.add),
),
),
),
],
),
),
),
);
}
}
提前感谢您提供的动态列表长度,您应该使用
gridView.builder()
以下是相关代码:
Expanded(
flex: 9,
child: GridView.builder(
itemCount: cards.length,
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 2
),
itemBuilder: (BuildContext context, int index) {
return cards[index];
}
)
),
对于动态列表长度,应使用
gridView.builder()
以下是相关代码:
Expanded(
flex: 9,
child: GridView.builder(
itemCount: cards.length,
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 2
),
itemBuilder: (BuildContext context, int index) {
return cards[index];
}
)
),
非常感谢。但是您知道如何在Gridview.builder中定义卡片的宽度和高度吗?我一直在找,但找不到路谢谢!但是您知道如何在Gridview.builder中定义卡片的宽度和高度吗?我一直在找,但找不到办法