flutter mobile第一次访问页面时出现LateInitializationError
LateInitializationError when accessing a page for the first time in flutter mobile
目前,当我在我的 flutter 移动应用程序中访问一个页面时,出现以下错误
LateError (LateInitializationError: Field 'library' has not been initialized.)
当我保存或刷新该页面时,数据最终加载到列表中并显示在页面上。
这是我目前正在使用的代码,用于显示图书馆中的书名:
class DashboardScreen extends StatefulWidget {
const DashboardScreen({Key? key}) : super(key: key);
@override
_DashboardScreen createState() => _DashboardScreen();
}
class _DashboardScreen extends State<DashboardScreen> {
final storage = new FlutterSecureStorage();
var baseUrl = dotenv.get('API_BASE_URL');
late List<Library> library;
var dataloaded = false;
_getMangas() async {
String? token = await storage.read(key: 'token');
var url = Uri.parse(baseUrl + "/library/list");
var response = await http.get(url, headers: {
HttpHeaders.authorizationHeader: 'Bearer $token',
HttpHeaders.acceptHeader: 'Application/Json'
});
library = libraryFromJson(response.body);
}
@override
void initState() {
super.initState();
_getMangas();
//_getMangas(token);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('Sample'),
),
body: ListView.builder(
itemCount: library.length,
itemBuilder: (context, index) {
return ListTile(
title: Text(library[index].title +
', Vol. ' +
library[index].volume.toString()),
);
},
),
drawer: const MainDrawer(),
);
}
}
这是因为您在 ListView.builder 中使用 library 列表,并且最初 library 列表未初始化。在_getMangas()上方的initState()中添加这一行:
图书馆 = [];
_getMangas()
是一个异步函数,因此 library
列表在列表视图中使用后被初始化。使用前需要用空列表初始化 library
列表。
供您参考:
@override
void initState() {
super.initState();
library = [];
_getMangas();
//_getMangas(token);
}
目前,当我在我的 flutter 移动应用程序中访问一个页面时,出现以下错误
LateError (LateInitializationError: Field 'library' has not been initialized.)
当我保存或刷新该页面时,数据最终加载到列表中并显示在页面上。
这是我目前正在使用的代码,用于显示图书馆中的书名:
class DashboardScreen extends StatefulWidget {
const DashboardScreen({Key? key}) : super(key: key);
@override
_DashboardScreen createState() => _DashboardScreen();
}
class _DashboardScreen extends State<DashboardScreen> {
final storage = new FlutterSecureStorage();
var baseUrl = dotenv.get('API_BASE_URL');
late List<Library> library;
var dataloaded = false;
_getMangas() async {
String? token = await storage.read(key: 'token');
var url = Uri.parse(baseUrl + "/library/list");
var response = await http.get(url, headers: {
HttpHeaders.authorizationHeader: 'Bearer $token',
HttpHeaders.acceptHeader: 'Application/Json'
});
library = libraryFromJson(response.body);
}
@override
void initState() {
super.initState();
_getMangas();
//_getMangas(token);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('Sample'),
),
body: ListView.builder(
itemCount: library.length,
itemBuilder: (context, index) {
return ListTile(
title: Text(library[index].title +
', Vol. ' +
library[index].volume.toString()),
);
},
),
drawer: const MainDrawer(),
);
}
}
这是因为您在 ListView.builder 中使用 library 列表,并且最初 library 列表未初始化。在_getMangas()上方的initState()中添加这一行:
图书馆 = [];
_getMangas()
是一个异步函数,因此 library
列表在列表视图中使用后被初始化。使用前需要用空列表初始化 library
列表。
供您参考:
@override
void initState() {
super.initState();
library = [];
_getMangas();
//_getMangas(token);
}