sql - 无法使用静态访问访问实例成员
问题描述
我希望你们一切都好!
我遇到了关于我的 Flutter 应用程序的问题:我一直在关注 Youtube 上关于如何在 Flutter 中使用 sqflite的教程,但我无法让我的 toMap 函数在我的数据库类中工作......它总是返回给我错误“无法使用静态访问访问实例成员“toMap”。有谁知道这是关于什么的?我真的不明白......提前谢谢!
在下面,有问题的代码:
点心
final String tablePOI = 'poi';
class POIFields {
static final String id = '_id';
static final String email = 'email';
static final String village = 'village';
static final String lieu = 'lieu';
static final String type = 'type';
static final String etat = 'etat';
static final String notes = 'notes';
static final String latitude = 'latitude';
static final String longitude = 'longitude';
static final String imageUrl = 'image_url';
}
class POI {
final int id;
final String email;
final String village;
final String lieu;
final String type;
final String etat;
final String notes;
final String latitude;
final String longitude;
final String imageUrl;
POI({this.id, this.email, this.village, this.lieu, this.type, this.etat, this.notes, this.latitude, this.longitude, this.imageUrl});
Map<String, Object> toMap() => {
POIFields.id: id,
POIFields.email: email,
POIFields.village: village,
POIFields.lieu: lieu,
POIFields.type: type,
POIFields.etat: etat,
POIFields.notes: notes,
POIFields.latitude: latitude,
POIFields.longitude: longitude,
POIFields.imageUrl: imageUrl,
};
String toString() {
return 'POI{id: $id, email: $email, village: $village, lieu: $lieu, type: $type, etat: $etat, notes: $notes, latitude: $latitude, longitude: $longitude, image_url: $imageUrl}';
}
}
poi_db.dart
import 'package:path/path.dart';
import 'package:sqflite/sqflite.dart';
import 'package:stage_app_mpc/models/poi.dart';
class POIDatabase {
static final POIDatabase instance = POIDatabase._init();
static Database _database;
POIDatabase._init();
Future<Database> get database async {
if (_database != null) {
return _database;
}
else {
_database = await _initDB('poi.db');
return _database;
}
}
Future<Database> _initDB(String filePath) async {
final dbPath = await getDatabasesPath();
final path = join(dbPath, filePath);
return openDatabase(path, version: 1, onCreate: _createDB);
}
Future _createDB(Database db, int version) async {
await db.execute('CREATE TABLE poi (id INTEGER PRIMARY KEY, email TEXT, village TEXT, lieu TEXT, type TEXT, etat TEXT, notes TEXT, latitude TEXT, longitude TEXT, image_url TEXT)');
}
Future<POI> create(POI poi) async {
final db = await instance.database;
final id = await db.insert('poi', POI.toMap());
}
Future closeDB() async {
final db = await instance.database;
db.close();
}
}
解决方案
您引用的是类POI
而不是参数poi
:
Future<POI> create(POI poi) async {
final db = await instance.database;
final id = await db.insert('poi', POI.toMap());
}
您应该更改它以引用您传入的参数。
Future<POI> create(POI poi) async {
final db = await instance.database;
final id = await db.insert('poi', poi.toMap());
}
注意:我建议,为避免将来出现此类混淆,请使用较少的缩写来命名您的类。它有助于尽可能描述性地命名它们。然后对于实例变量,您可以使用缩短的符号(尽管我仍然会尝试以描述性的方式命名事物以了解它是如何使用的)。
在这种情况下,无论 POI 代表什么:感兴趣的地方?
class PlaceOfInterest {...}
那么您的参数或字段可能是currentPoi
, activePoi
, poiData
, 等等...
推荐阅读
- vb.net - 如何在 GeckoFX 60.0.22 的 CreateWindow 事件中获取新弹出窗口的 URL?
- ssl - CURL FTPS 失败 (InitializeSecurityContext)
- javascript - Angular 路由会阻止服务器往返吗?
- c# - 输出标签内的原始数据
- java - 如何在 JTextArea 中添加垂直和水平滚动条以查看完整文件 - JAVA
- javascript - jquery访问另一个页面上的div
- python - 过滤带有特殊字符的df
- ios - 如何在iOS项目中旋转没有任何子视图的视图?
- docker - 如何从运行在 Docker 容器中的 Hasura 获取 Hasura 集群名称?
- hadoop - Kubernetes 上的 Hadoop 与标准 Hadoop