【发布时间】:2022-01-15 20:42:15
【问题描述】:
我创建了一个应用程序,但出现此错误。 我可以毫无问题地获取漫画的状态,因为当我打印时它可以工作,但是当我刷新应用程序时,我的变量导致了这个错误,如果 somoene 可以帮助我,我会一如既往地非常感激。
class DetailScreen extends StatefulWidget {
const DetailScreen({Key? key, required this.mangaImg, required this.mangaTitle, required this.mangalink}) : super(key: key);
final String mangaImg,mangaTitle,mangalink;
@override
_DetailScreenState createState() => _DetailScreenState();
}
class _DetailScreenState extends State<DetailScreen> {
late String mangaGenre,mangaStatus,mangaAuthor,mangaDesc;
List<Map<String,dynamic>>? mangaDetail;
List<Map<String,dynamic>>? mangaDescList;
List<Map<String,dynamic>>? mangaChapters;
void getMangaInfo() async {
String TempBaseurl = widget.mangalink.split(".com")[0] + ".com";
String TempRoute = widget.mangalink.split(".com")[1];
final webscraper = WebScraper(TempBaseurl);
if (await webscraper.loadWebPage(TempRoute)){
mangaDetail = webscraper.getElement("div.panel-story-info > div.story-info-right > table > tbody > tr > td.table-value", []);
mangaDescList = webscraper.getElement("div.panel-story-info > div.panel-story-info-description", []);
}
mangaGenre = mangaDetail![3]['title'].toString().trim();
mangaStatus = mangaDetail![2]['title'].toString().trim();
mangaAuthor = mangaDetail![1]['title'].toString().trim();
mangaDesc = mangaDescList![0]['title'].toString().trim();
print(mangaDesc);
}
@override
void initState() {
// TODO: implement initState
super.initState();
getMangaInfo();
}
@override
Widget build(BuildContext context) {
Size screensize = MediaQuery.of(context).size;
return Scaffold(
appBar: AppBar(
backgroundColor: Constants.mygreen,
title: Text(widget.mangaTitle),
centerTitle: true,
),
body: Container(
height: screensize.height,
width: screensize.width,
child: SingleChildScrollView(
child: Column(
children: [
MangaInfo(
mangaImg: widget.mangaImg,
mangaStatus: mangaStatus,
mangaAuthor : mangaAuthor,
),
【问题讨论】:
-
你也可以发布错误吗?
-
您的多个
late变量是异步初始化的。没有什么可以阻止build方法在初始化之前被调用并尝试使用它们。更糟糕的是,getMangaInfo不会返回Future,这会阻止调用者等待它完成。将late用于异步初始化的变量是LateInitializationErrors 的秘诀。改为使用可为空的变量,并首先检查它们是否为null。
标签: android database firebase flutter dart