Dart StreamBuilder抛出脏状态
我正在尝试从internet获取一些数据,将其存储到我的sqlite数据库中,并使用Dart StreamBuilder抛出脏状态,dart,flutter,bloc,sqflite,Dart,Flutter,Bloc,Sqflite,我正在尝试从internet获取一些数据,将其存储到我的sqlite数据库中,并使用列表视图将其显示在屏幕上 当我第一次获取数据时,一切正常,并且我能够在屏幕上看到数据,数据也会插入到sqlite数据库中,但是当我重新打开应用程序时,我收到一个错误消息,说 flutter: The following NoSuchMethodError was thrown building StreamBuilder<StudentModel>(dirty, state: flutter: _St
列表视图将其显示在屏幕上
当我第一次获取数据时,一切正常,并且我能够在屏幕上看到数据,数据也会插入到sqlite数据库中,但是当我重新打开应用程序时,我收到一个错误消息,说
flutter: The following NoSuchMethodError was thrown building StreamBuilder<StudentModel>(dirty, state:
flutter: _StreamBuilderBaseState<StudentModel, AsyncSnapshot<StudentModel>>#3f888):
flutter: The getter 'studentData' was called on null.
flutter: Receiver: null
flutter: Tried calling: studentData
flatter:在building StreamBuilder中引发了以下NoSuchMethodError(脏,状态:
颤振:_streambuilder基底状态#3f888):
颤振:getter“studentData”被调用为null。
颤振:接收器:空
颤振:尝试呼叫:studentData
这是我的模型课
class StudentModel {
int status;
String msg;
StudentModelData studentModelData;
StudentModel({this.status, this.msg, this.studentModelData});
StudentModel.fromJson(Map<String, dynamic> json) {
status = json['status'];
msg = json['msg'];
studentModelData = json['data'] != null ? new StudentModelData.fromJson(json['data']) : null;
}
StudentModel.fromDb(Map<String, dynamic> parsedJson) {
status = parsedJson['status'];
msg = parsedJson['msg'];
studentModelData = parsedJson['data'] != null ? new StudentModelData.fromJson(parsedJson['data']) : null;
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['status'] = this.status;
data['msg'] = this.msg;
if (this.studentModelData != null) {
data['data'] = this.studentModelData.toJson();
}
return data;
}
}
class StudentModelData {
int lastIndex;
List<StudentData> studentData;
StudentModelData({this.lastIndex, this.studentData});
StudentModelData.fromJson(Map<String, dynamic> json) {
lastIndex = json['lastIndex'];
if (json['studentData'] != null) {
studentData = new List<StudentData>();
json['studentData'].forEach((v) {
studentData.add(new StudentData.fromJson(v));
});
}
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['lastIndex'] = this.lastIndex;
if (this.studentData != null) {
data['studentData'] = this.studentData.map((v) => v.toJson()).toList();
}
return data;
}
}
class StudentData {
String studentId;
String studName;
String studProfilepic;
String studentEmail;
String studentMobile;
String courseName;
String classCode;
int minAvg;
int avg;
StudentData(
{this.studentId,
this.studName,
this.studProfilepic,
this.studentEmail,
this.studentMobile,
this.courseName,
this.classCode,
this.minAvg,
this.avg});
StudentData.fromJson(Map<String, dynamic> json) {
studentId = json['student_id'];
studName = json['stud_name'];
studProfilepic = json['stud_profilepic'];
studentEmail = json['student_email'];
studentMobile = json['student_mobile'];
courseName = json['course_name'];
classCode = json['class_code'];
minAvg = json['minAvg'];
avg = json['avg'];
}
StudentData.fromDb(Map<String, dynamic> parsedJson){
studentId = parsedJson['student_id'];
studName = parsedJson['stud_name'];
studProfilepic = parsedJson['stud_profilepic'];
studentEmail = parsedJson['student_email'];
studentMobile = parsedJson['student_mobile'];
courseName = parsedJson['course_name'];
classCode = parsedJson['class_code'];
minAvg = parsedJson['minAvg'];
avg = parsedJson['avg'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['student_id'] = this.studentId;
data['stud_name'] = this.studName;
data['stud_profilepic'] = this.studProfilepic;
data['student_email'] = this.studentEmail;
data['student_mobile'] = this.studentMobile;
data['course_name'] = this.courseName;
data['class_code'] = this.classCode;
data['minAvg'] = this.minAvg;
data['avg'] = this.avg;
return data;
}
}
class-StudentModel{
智力状态;
串味精;
StudentModelData StudentModelData;
StudentModel({this.status,this.msg,this.studentModelData});
StudentModel.fromJson(映射json){
status=json['status'];
msg=json['msg'];
studentModelData=json['data']!=null?新建studentModelData.fromJson(json['data']):null;
}
StudentModel.fromDb(Map parsedJson){
status=parsedJson['status'];
msg=parsedJson['msg'];
studentModelData=parsedJson['data']!=null?新建studentModelData.fromJson(parsedJson['data']):null;
}
映射到JSON(){
最终地图数据=新地图();
数据['status']=this.status;
数据['msg']=this.msg;
如果(this.studentModelData!=null){
data['data']=this.studentModelData.toJson();
}
返回数据;
}
}
类StudentModelData{
int-lastIndex;
列出学生资料;
StudentModelData({this.lastIndex,this.studentData});
StudentModelData.fromJson(映射json){
lastIndex=json['lastIndex'];
if(json['studentData']!=null){
studentData=新列表();
json['studentData'].forEach((v){
add(newstudentdata.fromJson(v));
});
}
}
映射到JSON(){
最终地图数据=新地图();
数据['lastIndex']=this.lastIndex;
如果(this.studentData!=null){
data['studentData']=this.studentData.map((v)=>v.toJson()).toList();
}
返回数据;
}
}
班级学生数据{
弦乐学生;
字符串名称;
字符串类型;
字符串studentEmail;
弦乐学生手机;
字符串courseName;
字符串类代码;
int minAvg;
国际平均值;
学生数据(
{这个。学生ID,
这个名字,
这张照片,
这是我的学生邮件,
这是studentMobile,
这是courseName,
这个.classCode,
这个,米纳夫,
这是avg});
StudentData.fromJson(映射json){
studentId=json['student_id'];
studName=json['stud_name'];
studProfilepic=json['stud_profilepic'];
studentEmail=json['student_email'];
studentMobile=json['student_mobile'];
courseName=json['course_name'];
classCode=json['class_code'];
minAvg=json['minAvg'];
avg=json['avg'];
}
StudentData.fromDb(Map parsedJson){
studentId=parsedJson['student_id'];
studName=parsedJson['stud_name'];
studProfilepic=parsedJson['stud_profilepic'];
studentEmail=parsedJson['student_email'];
studentMobile=parsedJson['student_mobile'];
courseName=parsedJson['course_name'];
classCode=parsedJson['class_code'];
minAvg=parsedJson['minAvg'];
avg=parsedJson['avg'];
}
映射到JSON(){
最终地图数据=新地图();
数据['student_id']=this.studentId;
数据['stud_name']=this.studName;
数据['stud_profilepic']=this.studProfilepic;
数据['student_email']=this.studentEmail;
数据['student_mobile']=this.studentMobile;
数据['course_name']=this.courseName;
数据['class_code']=this.classCode;
数据['minAvg']=this.minAvg;
数据['avg']=this.avg;
返回数据;
}
}
下面是我的存储库类
class StudentDbProvider implements Source, Cache {
Database db;
void init() async {
print("database initialized");
Directory documentsDirectory = await getApplicationDocumentsDirectory();
final path = join(documentsDirectory.path, "students.db");
db = await openDatabase(path, version: 1,
onCreate: (Database newDb, int version) {
newDb.execute("""
CREATE TABLE STUDENTS(
id INTEGER PRIMARY KEY,
student_id TEXT,
stud_name TEXT,
stud_profilepic TEXT,
student_email TEXT,
student_mobile TEXT,
course_name TEXT,
class_code TEXT,
minAvg TEXT,
avg TEXT
)
""");
});
}
@override
Future<int> clear() {
return db.delete("STUDENTS");
}
@override
Future<StudentModel> fetchStudents(String disciplineId, String schoolId,
String year_id, String lastIndex) async {
print("PritishSawant${db==null}");
final maps =
await db.query("STUDENTS");
if (maps.length > 0) {
return StudentModel.fromDb(maps.first);
}
return null;
}
@override
Future<int> addStudent(StudentData studentData) {
return db.insert("STUDENTS", studentData.toJson(),
conflictAlgorithm: ConflictAlgorithm.ignore);
}
}
final studentDbProvider = StudentDbProvider();
类StudentDbProvider实现源代码、缓存{
数据库数据库;
void init()异步{
打印(“数据库初始化”);
目录文档Directory=await getApplicationDocumentsDirectory();
final path=join(documentsDirectory.path,“students.db”);
db=等待openDatabase(路径,版本:1,
onCreate:(数据库newDb,int版本){
newDb.execute(“”)
创建表格学生(
id整数主键,
学生证文本,
stud_名称文本,
图片文本,
学生电子邮件文本,
学生手机短信,
课程名称文本,
类别代码文本,
minAvg文本,
平均文本
)
""");
});
}
@凌驾
未来明确(){
返回db.删除(“学生”);
}
@凌驾
未来的学生(字符串规则ID、字符串学校ID、,
字符串年份(id,字符串lastIndex)异步{
打印(“PritishSawant${db==null}”);
最终地图=
等待数据库查询(“学生”);
如果(maps.length>0){
return StudentModel.fromDb(maps.first);
}
返回null;
}
@凌驾
未来添加学生(StudentData StudentData){
返回db.insert(“STUDENTS”,studentData.toJson(),
conflictAlgorithm:conflictAlgorithm.ignore);
}
}
final studentDbProvider=studentDbProvider();
下面是我的集体课
class StudentsBloc {
final _repository = Repository();
final _students = PublishSubject<StudentModel>();
Observable<StudentModel> get students => _students.stream;
fetchStudents(String disciplineId,String schoolId,String year_id,String lastIndex) async {
await studentDbProvider.init();
final student = await _repository.fetchStudents(disciplineId, schoolId, year_id, lastIndex);
_students.sink.add(student);
}
clearCache(){
return _repository.clearCache();
}
dispose(){
_students.close();
}
}
class StudentsBloc{
最终_repository=repository();
期末学生=出版科目();
可观察的get students=>\u students.stream;
fetchStudents(字符串纪律id、字符串学校id、字符串年份id、字符串lastIndex)异步{
等待studentDbProvider.init();
final student=wait_repository.fetchStudents(纪律id、学校id、年份id、最后索引);
_students.sink.add(student);
}
clearCache(){
返回_repository.clearCache();
}
处置{
_学生们。关闭();
}
}
据我所知,错误一定是由于数据库初始化不当而发生的,但当我执行第一个网络请求时,一切正常,控制台中没有出现任何错误,数据库也已初始化。我无法理解为什么会出现错误
if (snapshot.data != null) {
// your code here
}