我想显示sqflite数据库的一些数据,但是我总是得到snapshot.error
:
类型'String'不是类型'double'的子类型
我真的不知道我是如何产生这种类型的错误的。有人可以向我解释如何解决这种错误。
这是futurebuilder:
new FutureBuilder<List<Recipes>>(
future: fetchRecipes(),
builder: (context, snapshot) {
if (snapshot.hasData) {
return new ListView.builder(
itemCount: snapshot.data.length,
itemBuilder: (context, index) {
return new Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
new Text(snapshot.data[index].id.toString(),
style: new TextStyle(
fontWeight: FontWeight.bold, fontSize: 18.0)),
new Text(snapshot.data[index].name,
style: new TextStyle(
fontWeight: FontWeight.bold, fontSize: 14.0)),
new Divider()
]);
});
} else if (snapshot.hasError) {
return new Text("${snapshot.error}");
}
return new Container(alignment: AlignmentDirectional.center,child: new CircularProgressIndicator(),);
},
),
)
,这是模型:
import 'dart:convert';
class RecipesDB{
RecipesDB();
int id, favorite;
double duration;
dynamic image;
String name, definition, timestamp;
static final columns = ["id", "name", "definition","duration", "favorite", "timestamp", "image"];
Map<String, dynamic> toMap(){
Map<String, dynamic> map = {
"name": name,
"definition": definition,
"duration": duration,
"favorite": favorite,
"timestamp": timestamp,
"image": image
};
if(id != null){
map["id"] = id;
}
return map;
}
static fromMap(Map map){
RecipesDB recipes = new RecipesDB();
recipes.id = map["id"];
recipes.name = map["name"];
recipes.definition = map["definition"];
recipes.duration = map["duration"];
recipes.favorite = map["favorite"];
recipes.timestamp = map["timestamp"];
recipes.image = map["image"];
return recipes;
}
}
class Recipes{
int id, favorite;
double duration;
dynamic image;
String name, definition, timestamp;
Recipes(this.name, this.definition, this.duration, this.favorite, this.timestamp, this.image);
}
这是收集数据的功能:
Future<List<Recipes>> getRecipes() async{
List<Map> list = await _db.rawQuery("SELECT * FROM recipes");
List<Recipes> recipes = new List();
for(int i =0; i < list.length; i++){
recipes.add(new Recipes(list[i]["name"], list[i]["definition"], list[i]["duration"], list[i]["favorite"], list[i]["timestamp"], list[i]["image"]));
}
return recipes;
}
如果有人能够解决我的问题,那将非常有帮助。
预先感谢XD
答案 0 :(得分:1)
持续时间应另存为String。将其更改为两倍,它应该可以工作!
答案 1 :(得分:0)
另存为String,然后当你想显示数据时,用double.parse(widget.recipes.duration)
代替widget.recipes.duration
。适用于我的项目。