Flutter 即使在setState调用之后,Gridview也不会更新
我从5个月以来一直在维护一个颤振应用程序。直到昨天一切都很顺利。今天我将flifter升级到最新版本1.20.1,应用程序开始崩溃 我有一个有两个标签的屏幕。 第一个选项卡包含ListView,用户在其中选择要生成的gridview项的数量,然后它将动画显示到第二个选项卡,该选项卡包含生成选定项的gridview。 要生成的网格项数存储在\u chapterCount变量中 直到昨天它还可以正常工作,但升级后就不起作用了。也没有例外Flutter 即使在setState调用之后,Gridview也不会更新,flutter,dart,gridview,Flutter,Dart,Gridview,我从5个月以来一直在维护一个颤振应用程序。直到昨天一切都很顺利。今天我将flifter升级到最新版本1.20.1,应用程序开始崩溃 我有一个有两个标签的屏幕。 第一个选项卡包含ListView,用户在其中选择要生成的gridview项的数量,然后它将动画显示到第二个选项卡,该选项卡包含生成选定项的gridview。 要生成的网格项数存储在\u chapterCount变量中 直到昨天它还可以正常工作,但升级后就不起作用了。也没有例外 import 'package:flutter/materia
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一直在做冰毒而不是数学!哈哈!。。只是开玩笑。试着运行“颤振清理”,然后构建应用程序,看看它是否持续。