无法使用静态访问访问实例成员
Instance member can't be accessed using static access
希望你们一切都好!
我 运行 遇到了一个关于我的 Flutter 应用程序的问题:我一直在关注 Youtube 上 how to use sqflite in Flutter 的教程,但我无法让我的 toMap 函数在我的数据库中工作class...它总是 returns 错误“无法使用静态访问访问实例成员“toMap””。有谁知道这是怎么回事?实在是不懂。。。先谢谢了!!
下面是有问题的代码:
poi.dart
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();
}
}
您正在引用 class 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());
}
注意:我建议,为避免将来出现此类混淆,请使用较少的缩写来命名您的 classes。它有助于尽可能描述性地命名它们。然后对于实例变量,你可以使用缩写符号(尽管我仍然会尝试以描述性的方式命名事物,以说明它的使用方式)。
在这种情况下,无论 POI 代表什么:感兴趣的地方?
class PlaceOfInterest {...}
那么您的参数或字段可以是 currentPoi
、activePoi
、poiData
等...
希望你们一切都好!
我 运行 遇到了一个关于我的 Flutter 应用程序的问题:我一直在关注 Youtube 上 how to use sqflite in Flutter 的教程,但我无法让我的 toMap 函数在我的数据库中工作class...它总是 returns 错误“无法使用静态访问访问实例成员“toMap””。有谁知道这是怎么回事?实在是不懂。。。先谢谢了!!
下面是有问题的代码:
poi.dart
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();
}
}
您正在引用 class 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());
}
注意:我建议,为避免将来出现此类混淆,请使用较少的缩写来命名您的 classes。它有助于尽可能描述性地命名它们。然后对于实例变量,你可以使用缩写符号(尽管我仍然会尝试以描述性的方式命名事物,以说明它的使用方式)。
在这种情况下,无论 POI 代表什么:感兴趣的地方?
class PlaceOfInterest {...}
那么您的参数或字段可以是 currentPoi
、activePoi
、poiData
等...