Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 使用按钮和滚动将小部件添加到GridView时出现问题_Flutter_Dart - Fatal编程技术网

Flutter 使用按钮和滚动将小部件添加到GridView时出现问题

Flutter 使用按钮和滚动将小部件添加到GridView时出现问题,flutter,dart,Flutter,Dart,起初,我有一个包装,点击“添加”按钮将添加一个新的卡到包装。然后我将包装更改为GridView,以便添加滚动。但是,现在当我按下按钮时,设备上没有显示任何内容,但是如果我将GridView更改回包裹和热重新加载,卡会显示吗?我不知道怎么了 我也不能滚动,我知道我做错了什么,但我不知道是什么 class MainScreen extends StatefulWidget { @override _MainScreenState createState() => _MainScreen

起初,我有一个包装,点击“添加”按钮将添加一个新的卡到包装。然后我将包装更改为GridView,以便添加滚动。但是,现在当我按下按钮时,设备上没有显示任何内容,但是如果我将GridView更改回包裹和热重新加载,卡会显示吗?我不知道怎么了

我也不能滚动,我知道我做错了什么,但我不知道是什么

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中定义卡片的宽度和高度吗?我一直在找,但找不到办法