我正在尝试将 api 数据存储在 sqflite 中,但收到“发生异常。_CastError(类型“字符串”不是类型转换中“列表”类型的子类型)”。请帮我解决这个问题。
这是为了获取api数据。(employee_api_provider.dart)
//import 'package:flutter/cupertino.dart';
import 'package:flutter_app/src/models/employee_model.dart';
import 'package:flutter_app/src/providers/db_provider.dart';
import 'package:dio/dio.dart';
class EmployeeApiProvider {
Future<List<Employee>> getAllEmployees() async {
var url = "url";
Response response = await Dio().get(url);
//debugPrint(response);
return (response.data as List).map((employee) {
print('Inserting $employee');
DBProvider.db.createEmployee(Employee.fromJson(employee));
}).toList();
}
}
我已经创建了模型类(employee_model.dart)
import 'dart:convert';
List<Employee> employeeFromJson(String str) =>
List<Employee>.from(json.decode(str).map((x) => Employee.fromJson(x)));
String employeeToJson(List<Employee> data) =>
json.encode(List<dynamic>.from(data.map((x) => x.toJson())));
class Employee {
int id;
int eventId;
String menuName;
String menuIcon;
String deepLinkName;
int displayStatus;
int orderId;
String dateTime;
Employee({
this.id,
this.eventId,
this.menuName,
this.menuIcon,
this.deepLinkName,
this.displayStatus,
this.orderId,
this.dateTime,
});
factory Employee.fromJson(Map<String, dynamic> json) => Employee(
id: json["Id"],
eventId: json["Event_Id"],
menuName: json["Menu_Name"],
menuIcon: json["Menu_Icon"],
deepLinkName: json["Deep_Link_Name"],
displayStatus: json["Display_Status"],
orderId: json["Order_Id"],
dateTime: json["Date_Time"],
);
Map<String, dynamic> toJson() => {
"Id": id,
"Event_Id": eventId,
"Menu_Name": menuName,
"Menu_Icon": menuIcon,
"Deep_Link_Name": deepLinkName,
"Display_Status": displayStatus,
"Order_Id": orderId,
"Date_Time": dateTime,
};
}
db_provider.dart
import 'dart:io';
import 'package:flutter_app/src/models/employee_model.dart';
import 'package:path/path.dart';
import 'package:path_provider/path_provider.dart';
import 'package:sqflite/sqflite.dart';
class DBProvider {
static Database _database;
static final DBProvider db = DBProvider._();
DBProvider._();
Future<Database> get database async {
// If database exists, return database
if (_database != null) return _database;
// If database don't exists, create one
_database = await initDB();
return _database;
}
// Create the database and the Employee table
initDB() async {
Directory documentsDirectory = await getApplicationDocumentsDirectory();
final path = join(documentsDirectory.path, 'menu.db');
return await openDatabase(path, version: 1, onOpen: (db) {},
onCreate: (Database db, int version) async {
await db.execute('CREATE TABLE Employee('
'id INTEGER,'
'eventId INTEGER,'
'menuName TEXT,'
'menuIcon TEXT,'
'deepLinkName TEXT,'
'displayStatus INTEGER,'
'orderId INTEGER,'
'DateTime TEXT'
')');
});
}
// Insert employee on database
createEmployee(Employee newEmployee) async {
await deleteAllEmployees();
final db = await database;
final res = await db.insert('Employee', newEmployee.toJson());
return res;
}
// Delete all employees
Future<int> deleteAllEmployees() async {
final db = await database;
final res = await db.rawDelete('DELETE FROM Employee');
return res;
}
Future<List<Employee>> getAllEmployees() async {
final db = await database;
final res = await db.rawQuery("SELECT * FROM EMPLOYEE");
List<Employee> list =
res.isNotEmpty ? res.map((c) => Employee.fromJson(c)).toList() : [];
return list;
}
}
db_provider.dart
使用这个 employee_api_provider.dart
return employeeFromJson(response.data).map((employee) {
print('Inserting $employee');
DBProvider.db.createEmployee(employee);
}).toList();
代替
return (response.data as List).map((employee) {
print('Inserting $employee');
DBProvider.db.createEmployee(Employee.fromJson(employee));
}).toList();
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句