首页 > 解决方案 > Flutter:在解析图像编解码器时引发了以下 NetworkImageLoadException

问题描述

我面临一个非常奇怪的问题。我想显示数据库中的个人资料图像,通过将用户 ID 传递给 url 来获取图像,但由于一些奇怪的原因,用户 ID 没有被传递,我最终得到一个错误

I/flutter(4832):══╡图像资源服务发现异常╞══════════════════════╕══════════════ ═══════════════════ I/flutter(4832):抛出以下 NetworkImageLoadException 解析图像编解码器:I/flutter(4832):HTTP 请求失败,statusCode:400 , http://20.23.12.345:9080/api/auth/users/null/photo

这就是我的做法。当用户登录时,我传递包含所有用户详细信息的 json 并将它们保存到共享首选项,然后从配置文件页面访问用户 ID,并将其传递给 url 字符串。我究竟做错了什么。

如何从共享首选项中提取详细信息

 String username = "";
  String firstName = "", lastName = "";
  Image photo;
  int id;
  String token = "";
  List<int> img;

  @override
  void initState() {
    // TODO: implement initState
    super.initState();
  }

  void getName() async {
    SharedPreferences prefs = await SharedPreferences.getInstance();
    username = prefs.getString("username");
    username = prefs.getString("username");
    firstName = prefs.getString("firstname");
    lastName = prefs.getString("surname");
    id = prefs.getInt("id");
    token = prefs.getString("accessToken");
    setState(() {});

  }

如何访问尝试通过用户 ID 拉取图像

    child: ClipOval(
                                          child: new SizedBox(
                                            width: 120.0,
                                            height: 120.0,
                                            child: (photo != null)
                                                ? photo
                                                : Image.network(                                                 

"http://20.23.12.345:9080/api/auth/users/$id/photo",
                                                    //{key: "$token"},
                                                    fit: BoxFit.fill,
                                                  ),
                                          ),
                                        ),

如何提取 json 并将其保存到共享首选项

 SharedPreferences prefs = await SharedPreferences.getInstance();
  var parse = jsonDecode(response.body);

  if (parse["active"] == 1)
    _BodyState.activeUser = true;
  else
    _BodyState.activeUser = false;

  print("status:" + _BodyState.activeUser.toString());

  await prefs.setString('username', parse["username"]);
  await prefs.setString('accessToken', parse["accessToken"]);
  await prefs.setString('surname', parse["surname"]);
  await prefs.setString('firstname', parse["firstname"]);
  await prefs.setInt('id', parse["id"]);
  await prefs.setBool('active', _BodyState.activeUser);

我将不胜感激

标签: flutterdart

解决方案


推荐阅读