Flutter/Dart:从共享偏好小工具中获取URL,以便在Image.Network小工具中使用



我需要从Flutter的Shared Preferences小部件中获取一个URL,并将其插入Image.network小部件。这是我创建的类;

class GetSharedPrefs() {
static getCurrentNameSF() async {
String currentname;
SharedPreferences prefs = await SharedPreferences.getInstance();
currentname = prefs.getString("currentname");
print(currentname);
}
}

我试着把这个方法变成一个名为"的变量;spavatar";并将其插入到构建中;

String spavatar = GetSharedPrefs.getCurrentNameSF().toString(); 

插入;

icon: Image.network(
spavatar,
),

但它抛出了以下错误:

I/flutter (24368): The following _TypeError was thrown attaching to the render tree:
I/flutter (24368): type 'Future<dynamic>' is not a subtype of type 'String'

那么,我如何将函数的结果输入到需要URL的Image.network小部件中呢?或者我还有别的办法吗?

此函数必须重新启动value,因为它是异步方法,所以它必须是Future<type>:

class GetSharedPrefs {
static Future<String> getCurrentNameSF() async {
String currentname;
SharedPreferences prefs = await SharedPreferences.getInstance();
currentname = prefs.getString("currentname");
print(currentname);
return currentname;
}
}

现在呼叫:

String spavatar = await GetSharedPrefs.getCurrentNameSF(); 

getCurrentNameSF()async,因此不能在类似build的同步方法中使用它。

您可能希望将SharedPreferences实例保留为一种状态。不过,要做到这一点,您必须在initState方法中初始化它:

SharedPreferences prefs;
@override
void initState() {
super.initState();
// anonymous async function
() async {
prefs = await SharedPreferences.getInstance();
}();
}

现在你可以做:

Image.network(prefs?.getString("currentname") ?? "alternative")

??是一个null感知运算符。如果左边的值为null,则返回右边的值

我最终使用了这两个建议。首先,将变量声明为占位符;

String currentname = "https://example.com/defaultavatar.png";

然后;

SharedPreferences prefs;
@override
void initState() {
super.initState();
() async { prefs = await SharedPreferences.getInstance();
currentname = await prefs.getString("currentname"); 
}();
}

然后;

Image.network(
currentname ,
height: 30,
width: 30,
),

相关内容

  • 没有找到相关文章

最新更新