flutter 错误:FormatException:意外字符(在字符% 1处)

s4n0splo  于 2023-04-22  发布在  Flutter
关注(0)|答案(1)|浏览(169)

我是新的在这个世界上的编程.我试图使一个应用程序与Flutter和我有一个问题,我找不到解决方案在屏幕上,允许分配用户权限,当选择分配他们的按钮,我收到以下错误消息:I/扑动(6171):错误:FormatException:意外字符(在字符1处)I/ Flutter (6171):语法错误:JSON中位置0处的意外标记n I/flutter(6171):^
我正在使用一个模型和一个供应商,我离开下面。我很感激如果有人可以帮助我。
角色模型

import 'dart:convert';

Rol rolFromJson(String str) => Rol.fromJson(json.decode(str));

String rolToJson(Rol data) => json.encode(data.toJson());

class Rol {

  String id;
  String name;
  String route;
  String idUser;
  String idRol;
  List<Rol> roles;
  List<Rol> toList = [];

  Rol({
    this.id,
    this.name,
    this.route,
    this.idUser,
    this.idRol,
    this.roles,
  });

  factory Rol.fromJson(Map<String, dynamic> json) => Rol(
    id: json["id"] is int ? json['id'].toString() : json["id"],
    name: json["name"],
    route: json["route"],
    idUser: json["id_user"] ?? "",
    idRol: json["id_rol"] ?? "",
    roles: json["roles"] == null ? [] : List<Rol>.from(json['roles'].map((model) => Rol.fromJson(model))) ?? [],
  );

  Rol.fromJsonList(List<dynamic> jsonList) {
    if (jsonList == null) return;
    jsonList.forEach((item) {
      Rol rol = Rol.fromJson(item);
      toList.add(rol);
    });
  }

  Map<String, dynamic> toJson() => {
    "id": id,
    "name": name,
    "route": route,
    "id_user": idUser,
    "id_rol": idRol,
    "roles": roles,
  };
}

角色提供者

import 'dart:convert';
import 'dart:io';

import 'package:flutter/material.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'package:palser_delivery_app/src/api/environment.dart';
import 'package:palser_delivery_app/src/models/response_api.dart';
import 'package:palser_delivery_app/src/models/rol.dart';
import 'package:palser_delivery_app/src/models/user.dart';
import 'package:http/http.dart' as http;
import 'package:palser_delivery_app/src/utils/my_snackbar.dart';
import 'package:palser_delivery_app/src/utils/shared_pref.dart';

class RolesProvider {

  String _url = Environment.API_DELIVERY;
  String _api = 'api/roles';
  BuildContext context;
  User sessionUser;

  Future init(BuildContext context, {User sessionUser}) {
    this.context = context;
    this.sessionUser = sessionUser;
  }

  Future<List<Rol>> getRoles() async {
    try {
      Uri url = Uri.http(_url, '$_api/getAll');
      Map<String, String> headers = {
        'Content-type': 'application/json',
        'Authorization': sessionUser.sessionToken
      };
      final res = await http.get(url, headers: headers);

      if (res.statusCode == 401) { // NO AUTORIZADO
        Fluttertoast.showToast(msg: 'Sesión expirada');
        new SharedPref().logout(context, sessionUser.id);
      }

      final data = json.decode(res.body);
      Rol rol = Rol.fromJsonList(data);
      return rol.toList;
    } catch(e) {
      print('ERROR: $e');
      return null;
    }
  }

  Future<ResponseApi> assignRol(Rol rol) async {
    try {
      Uri url = Uri.http(_url, '$_api/assign');
      String bodyParams = json.encode(rol);
      Map<String, String> headers = {
        'Content-type': 'application/json',
        'Authorization': sessionUser.sessionToken
      };
      final res = await http.post(url, headers: headers, body: bodyParams);
      final data = json.decode(res.body);
      ResponseApi responseApi = ResponseApi.fromJson(data);
      return responseApi;
    }
    catch(e) {
      print('Error: $e');
      return null;
    }
  }

}

角色分配控制器

import 'package:flutter/material.dart';
import 'package:palser_delivery_app/src/models/rol.dart';
import 'package:palser_delivery_app/src/models/user.dart';
import 'package:palser_delivery_app/src/provider/roles_provider.dart';
import 'package:palser_delivery_app/src/provider/users_provider.dart';
import 'package:palser_delivery_app/src/utils/shared_pref.dart';

class AdministratorRolesAssignController {

  BuildContext context;
  Function refresh;

  SharedPref _sharedPref = new SharedPref();

  RolesProvider _rolesProvider = new RolesProvider();
  UsersProvider _usersProvider = new UsersProvider();

  User user;
  List<User> users = [];
  String idUser;

  Rol rol;
  List<Rol> roles = [];
  String idRol;

  Future init(BuildContext context, Function refresh) async {
    this.context = context;
    this.refresh = refresh;

    user = User.fromJson(await _sharedPref.read('user'));
    _rolesProvider.init(context, sessionUser: user);
    _usersProvider.init(context, sessionUser: user);
    getUsers();
    getRoles();
    refresh();
  }

  void getUsers() async {
    users = await _usersProvider.getAllUsers();
    refresh();
  }

  void getRoles() async {
    roles = await _rolesProvider.getRoles();
    refresh();
  }

  void assignRol() async {

    rol?.idUser = idUser;
    rol?.idRol = idRol;
    await _rolesProvider.assignRol(rol);
  }

}
r7knjye2

r7knjye21#

我认为if中缺少一个return,它继续尝试解码body,这产生了401状态。尝试在if的末尾添加return。

if (res.statusCode == 401) { // NO AUTORIZADO
        Fluttertoast.showToast(msg: 'Sesión expirada');
        new SharedPref().logout(context, sessionUser.id);
        return;
      }

相关问题