Flutter-SQFlite-类型“ String”不是类型“ double”的子类型

时间:2018-09-30 13:39:47

标签: android ios dart flutter

我想显示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

2 个答案:

答案 0 :(得分:1)

持续时间应另存为String。将其更改为两倍,它应该可以工作!

答案 1 :(得分:0)

另存为String,然后当你想显示数据时,用double.parse(widget.recipes.duration)代替widget.recipes.duration。适用于我的项目。