gpt4 book ai didi

Flutter:获取默认上下文?或者在没有上下文的情况下加载 Assets ?

转载 作者:IT王子 更新时间:2023-10-29 06:44:10 26 4
gpt4 key购买 nike

我正在尝试在扩展 SearchDelegate 的类中加载一个 json 文件以搜索其内容。

我有一个加载这个文件的方法:

Future<void> loadCountryData() async {
try {
String data = await DefaultAssetBundle
.of(context)
.loadString("assets/data/countries.json");
_countries = json.decode(data);
} catch (e) {
print(e);
}
}

不幸的是,这需要一个 Buildcontext(上下文),它似乎只在 SearchDelegate 构建方法(如 buildActions、buildLeadings 等)中可用,但在外部(例如在构造函数中)不可用。

https://docs.flutter.io/flutter/material/SearchDelegate-class.html

由于搜索字段中的每次更改都会调用 SearchDelegate 中的 @override xy 构建方法,因此我会一遍又一遍地加载我的文件,这当然不理想。我只想在开始时加载一次我的文件。

有没有办法获得某种获取默认上下文的方式,例如我可以在 SearchDelegate 的构造函数中使用它。就像在 android 中一样(如果我没记错的话)?

或者我可以在没有 .of(context) 的情况下加载 Assets 文件吗?

最佳答案

功能说明

  /// The bundle from the closest instance of this class that encloses
/// the given context.
///
/// If there is no [DefaultAssetBundle] ancestor widget in the tree
/// at the given context, then this will return the [rootBundle].
///
/// Typical usage is as follows:
///
/// ```dart
/// AssetBundle bundle = DefaultAssetBundle.of(context);
/// ```
static AssetBundle of(BuildContext context) {
final DefaultAssetBundle result = context.dependOnInheritedWidgetOfExactType<DefaultAssetBundle>();
return result?.bundle ?? rootBundle;
}

因此,您可以简单地使用 rootBundle 而不是 DefaultAssetBundle.of(context) 来处理没有上下文的 Assets 。

关于Flutter:获取默认上下文?或者在没有上下文的情况下加载 Assets ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51109621/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com