我有一个使用非常简单的数据库的设置页面,该数据库由几个表组成,用于更改谷歌地图的外观(google_maps_flutter)。还有一张桌子,但它用于应用程序中的其他东西,我在这里不关心它。我为此使用了 moor_flutter 和提供程序包,但我在返回值时遇到了一点困难。
我想要做的是检索一个布尔值(在这种情况下)并相应地显示 SwitchListTile,但不幸的是,我会收到这个错误。
NoSuchMethodError:类 'List' 没有实例 getter 'tilt'。接收方:“_GrowableList”的实例(长度:0)尝试调用:倾斜。另见:https ://flutter.dev/docs/testing/errors
任何帮助将不胜感激。
这是我的表配置
// Map Parameters table definition
class Parameters extends Table {
BoolColumn get tilt => boolean().withDefault(Constant(true))();
BoolColumn get traffic => boolean().withDefault(Constant(false))();
BoolColumn get compass => boolean().withDefault(Constant(true))();
BoolColumn get rotate => boolean().withDefault(Constant(true))();
BoolColumn get zoom => boolean().withDefault(Constant(true))();
/*TextColumn get type => text().named('normal')();
TextColumn get area => text().named('Uni Campus')();*/
}
这是我的 AppDatabase 类
// App Database Class
@UseMoor(
tables: [Parameters, Themes, Places],
daos: [ParameterDao, ThemeDao, PlaceDao])
class AppDatabase extends _$AppDatabase {
AppDatabase()
: super(FlutterQueryExecutor.inDatabaseFolder(
path: 'db.sqlite', logStatements: true));
// Database Schema Version
@override
int get schemaVersion => 1; // Change this with every DB change
@override
MigrationStrategy get migration => MigrationStrategy(
onUpgrade: (migrator, from, to) async{
if(from == 1){
// await migrator.addColumn(<table, <table>.<fieldName>);
// await migrator.createTable(<table>);
}
},
/*beforeOpen: (db,details) async {
await db.customStatement('PRAGMA foreign_keys = ON');
}*/
);
}
这是我的道课
@UseDao(tables: [Parameters])
class ParameterDao extends DatabaseAccessor<AppDatabase> with _$ParameterDaoMixin {
final AppDatabase db;
ParameterDao(this.db) : super(db);
// Map parameters queries
Future<List<Parameter>> getAllParameters() => select(parameters).get();
Stream<List<Parameter>> watchAllParameters() => select(parameters).watch();
Future updateParameter(Parameter parameter, {bool tilt}) =>
update(parameters).replace(parameter);
}
这是包含我的设置页面的小部件
@override
Widget build(BuildContext context) {
final dao = Provider.of<ParameterDao>(context);
return StreamBuilder(
stream: dao.watchAllParameters(),
builder: (context, AsyncSnapshot snapshot) {
bool _allowTilt = snapshot.data.tilt;
bool _enableRotate = true;
bool _enableZoom = true;
bool _showTraffic = false;
bool _showCompass = true;
return Container(
child: DecoratedBox(
decoration: BoxDecoration(
...
...
...
这是我的 SwitchListTile
SwitchListTile(
value: _allowTilt,
onChanged: (value) {
setState(() {
// _allowTilt = value;
//_db.updateParameter(tilt: _allowTilt);
//print("ALLOW TILT => _allowTilt");
});
},
title: Text(
AppLocalizations.of(context).settingsLabelTilt),
activeColor: Theme.UniColour.primary[900],
),