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);
  }