我是新的在这个世界上的编程.我试图使一个应用程序与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);
}
}
1条答案
按热度按时间r7knjye21#
我认为if中缺少一个return,它继续尝试解码body,这产生了401状态。尝试在if的末尾添加return。