【发布时间】:2021-08-29 13:28:20
【问题描述】:
我正在处理一个项目,在尝试使用 json.decode 方法解码一些 JSON 数据时遇到此错误。
错误
E/flutter (26652): [ERROR:flutter/lib/ui/ui_dart_state.cc(186)] 未处理异常:FormatException:意外字符(在字符 1) E/flutter (26652): 'StreamedResponse' 的实例 E/颤振(26652):^ E/颤振(26652): E/flutter (26652): #0 _ChunkedJsonParser.fail (dart:convert-patch/convert_patch.dart:1404:5) E/flutter (26652): #1 _ChunkedJsonParser.parseNumber (dart:convert-patch/convert_patch.dart:1271:9) E/flutter (26652): #2 _ChunkedJsonParser.parse (dart:convert-patch/convert_patch.dart:936:22) E/flutter (26652): #3 _parseJson (dart:convert-patch/convert_patch.dart:40:10) E/flutter (26652): #4 JsonDecoder.convert (dart:convert/json.dart:506:36) E/flutter (26652): #5 JsonCodec.decode (dart:convert/json.dart:157:41) E/颤动(26652):#6
userModel.dart
import 'dart:convert';
import 'package:shared_preferences/shared_preferences.dart';
class UserModel {
String id;
String name;
String email;
UserModel({this.id, this.name, this.email});
static UserModel sessionUser;
factory UserModel.fromjson(Map<String, dynamic> i) =>
UserModel(
id: i['id'],
name: i['name'],
email: i['email']
);
Map<String, dynamic> toMap() => {
'id': id,
'name': name,
'email': email
};
static void saveUser(UserModel user) async {
SharedPreferences pref = await SharedPreferences.getInstance();
var data = jsonEncode(user.toMap());
pref.setString('user', data);
// ignore: deprecated_member_use
pref.commit();
}
static void getUser() async {
SharedPreferences pref = await SharedPreferences.getInstance();
String data = pref.getString('user');
if (data != null) {
var decode = json.decode(data); // <------ error here
if (data.isNotEmpty) {
var user = UserModel.fromjson(decode);
sessionUser = user;
}
} else {
sessionUser = null;
}
}
static void logOut() async {
SharedPreferences p = await SharedPreferences.getInstance();
p.setString('user', "");
sessionUser = null;
// ignore: deprecated_member_use
p.commit();
}
}
如您所见,错误发生在 getUser 方法上,同时使用 SharedPreferences 解码保存的变量
HomePage.dart
import 'package:flutter/material.dart';
import 'package:mostapha_app/ka/screens/sign_in/components/sign_form.dart';
import 'package:mostapha_app/models/userModel/userModel.dart';
import 'package:mostapha_app/screens/Home/home.dart';
import 'package:mostapha_app/screens/Home/welcom.dart';
import 'package:mostapha_app/screens/autntification/UserRegister.dart';
import 'package:mostapha_app/screens/autntification/login.dart';
import 'package:mostapha_app/screens/autntification/conducteurRegister.dart';
class HomePage extends StatefulWidget {
@override
State<StatefulWidget> createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
bool visibel = true, login = false;
isconnected() async {
// ignore: await_only_futures
await UserModel.getUser();
if (UserModel.sessionUser == null) {
setState(() {
login = false;
});
} else {
setState(() {
login = true;
});
}
}
tooggle() {
setState(() {
visibel = !visibel;
});
}
isLogin() {
setState(() {
login = !login;
});
}
@override
void initState() {
super.initState();
isconnected();
}
@override
Widget build(BuildContext context) {
return login
? Home(login: isLogin)
: visibel
?
LogIn(tooggle, isLogin)
: UserRegester(tooggle, isLogin);
}
}
如果有人知道为什么会发生此错误,我将不胜感激。
【问题讨论】:
标签: json flutter dart sharedpreferences