Flutter 即使在setState调用之后,Gridview也不会更新

Flutter 即使在setState调用之后,Gridview也不会更新,flutter,dart,gridview,Flutter,Dart,Gridview,我从5个月以来一直在维护一个颤振应用程序。直到昨天一切都很顺利。今天我将flifter升级到最新版本1.20.1,应用程序开始崩溃 我有一个有两个标签的屏幕。 第一个选项卡包含ListView,用户在其中选择要生成的gridview项的数量,然后它将动画显示到第二个选项卡,该选项卡包含生成选定项的gridview。 要生成的网格项数存储在\u chapterCount变量中 直到昨天它还可以正常工作,但升级后就不起作用了。也没有例外 import 'package:flutter/materia

我从5个月以来一直在维护一个颤振应用程序。直到昨天一切都很顺利。今天我将flifter升级到最新版本1.20.1,应用程序开始崩溃

我有一个有两个标签的屏幕。 第一个选项卡包含ListView,用户在其中选择要生成的gridview项的数量,然后它将动画显示到第二个选项卡,该选项卡包含生成选定项的gridview。 要生成的网格项数存储在\u chapterCount变量中

直到昨天它还可以正常工作,但升级后就不起作用了。也没有例外

import 'package:flutter/material.dart';
import 'package:provider/provider.dart';

import '../models/book.dart';
import '../providers/font.dart';

class ChoiceScreen extends StatefulWidget {
  @override
  _ChoiceScreenState createState() => _ChoiceScreenState();
}

class _ChoiceScreenState extends State<ChoiceScreen> {
  int _chapterCount = 0;
  int _id = 0;
  int _initialIndex = 0;


  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Consumer<FontManager>(builder: (context, manager, _) {
        return DefaultTabController(
          length: 2,
          initialIndex: _initialIndex,
          child: Scaffold(
            appBar: AppBar(
              title: TabBar(
                tabs: [
                  Tab(
                    child: Text(
                      'Book',
                      style: TextStyle(fontSize: manager.fontSize),
                    ),
                  ),
                  Tab(
                    child: Text(
                      'Chapter',
                      style: TextStyle(fontSize: manager.fontSize),
                    ),
                  ),
                ],
              ),
            ),
            body: TabBarView(
              children: [
                ListView.builder(
                  itemCount: BOOK.length,
                  itemBuilder: (ctx, i) {
                    return buildListTile(
                        ctx,
                        BOOK.firstWhere((test) => test.id == i + 1),
                        manager.fontSize);
                  },
                ),
                buildGridView(manager, context, _chapterCount),
              ],
            ),
          ),
        );
      }),
    );
  }

  GridView buildGridView(
      FontManager manager, BuildContext context, int chapterCount) {
    print('building gridView $chapterCount'); //Updated value is printed here but no element gets built
    return GridView.builder(
      gridDelegate: SliverGridDelegateWithMaxCrossAxisExtent(
        maxCrossAxisExtent: 50,
        crossAxisSpacing: 10,
        mainAxisSpacing: 10,
      ),
      itemCount: chapterCount,
      itemBuilder: (ctx, i) {
        return InkWell(
          child: Container(
            child: Center(
              child: Text(
                (i + 1).toString(),
                style:
                    TextStyle(color: Colors.white, fontSize: manager.fontSize),
              ),
            ),
            decoration: BoxDecoration(color: Colors.deepPurple),
          ),
          onTap: () {
            Navigator.of(context).pop({
              'chapter': i,
              'id': _id,
            });
          },
        );
      },
    );
  }

  Widget buildListTile(BuildContext ctx, Book book, double fontSize) {
    return InkWell(
      child: ListTile(
        leading: Text((book.id).toString()),
        title: Text(
          book.title,
          style: TextStyle(fontSize: fontSize),
        ),
      ),
      onTap: () {
        setState(() {
          _chapterCount = book.chapter;
          _id = book.id;
        });
        DefaultTabController.of(ctx).animateTo(1);
      },
    );
  }
}

导入“包装:颤振/材料.省道”;
导入“包:provider/provider.dart”;
导入“../models/book.dart”;
导入“../providers/font.dart”;
类选择Screen扩展StatefulWidget{
@凌驾
_ChoiceScreenState createState()=>\u ChoiceScreenState();
}
类_选择Screenstate扩展状态{
int _chapterCount=0;
int _id=0;
int _initialIndex=0;
@凌驾
小部件构建(构建上下文){
返回脚手架(
主体:消费者(构建者:(上下文、管理者){
返回DefaultTabController(
长度:2,
initialIndex:_initialIndex,
孩子:脚手架(
appBar:appBar(
标题:TabBar(
选项卡:[
标签(
子:文本(
“书”,
样式:TextStyle(fontSize:manager.fontSize),
),
),
标签(
子:文本(
"章",,
样式:TextStyle(fontSize:manager.fontSize),
),
),
],
),
),
正文:选项卡视图(
儿童:[
ListView.builder(
itemCount:BOOK.length,
项目生成器:(ctx,i){
返回buildListTile(
ctx,
BOOK.firstWhere((test)=>test.id==i+1),
经理(尺寸);
},
),
buildGridView(管理器,上下文,_chapterCount),
],
),
),
);
}),
);
}
GridView构建GridView(
FontManager管理器、BuildContext上下文、int chapterCount){
print('building gridView$chapterCount');//此处打印更新的值,但未生成任何元素
返回GridView.builder(
gridDelegate:SliverGridDelegateWithMaxCrossAxisExtent(
maxCrossAxisExtent:50,
横轴间距:10,
平均间距:10,
),
itemCount:chapterCount,
项目生成器:(ctx,i){
回墨槽(
子:容器(
儿童:中心(
子:文本(
(i+1).toString(),
风格:
TextStyle(颜色:Colors.white,fontSize:manager.fontSize),
),
),
装饰:盒子装饰(颜色:深紫色),
),
onTap:(){
Navigator.of(context.pop)({
"章":一,,
“id”:,
});
},
);
},
);
}
小部件buildListTile(BuildContext ctx、书本、双字体大小){
回墨槽(
孩子:ListTile(
前导:Text((book.id).toString()),
标题:正文(
书名,
样式:文本样式(fontSize:fontSize),
),
),
onTap:(){
设置状态(){
_chapterCount=book.chapter;
_id=book.id;
});
DefaultTabController.of(ctx).animateTo(1);
},
);
}
}
调用setState时,小部件将重建,并且\u chapterCount变量也将更新。即使是gridView生成器函数也会得到更新的\u chapterCount,但它不会生成。
奇怪的是,在调用setState之后,当我从VSCode热重新加载时,GridView会生成项。

我想Flatter是在做meth而不是数学!哈哈!。。只是开玩笑。试着运行“flift clean”,然后构建应用程序,看看它是否持续。认为flift一直在做冰毒而不是数学!哈哈!。。只是开玩笑。试着运行“颤振清理”,然后构建应用程序,看看它是否持续。