Я действительно борюсь с Flutter и SQFlite. Существует множество сложных примеров, но нет ни одного простого примера, как просто получить данные и поместить их в переменную для использования в виджете или модели. Я пробовал кучу примеров, и большинство из них выдает ошибку «таблица не существует». Я наконец нашел пример, который работал, и попытался разветвить его для работы с моими потребностями, но я просто потерялся. Я новичок в трепетании, но не в программировании. Я много лет занимался веб-кодированием. Я потратил часы на попытки заставить простой запрос работать и вернуть его содержимое в переменной. Я действительно подумываю полностью отказаться от Flutter только из-за того, насколько сложно обрабатывать хранимые данные. Это должны быть основные вещи. Почему это так сложно !?
В любом случае, вот мой код, чтобы вы могли видеть, чего я пытаюсь достичь. Я могу создавать базу данных, вставлять и получать данные внутри класса DBHelper, но я понятия не имею, как использовать эти данные вне его. Моя цель - заставить простой пример работать, а затем я могу реализовать его в большем масштабе для всего моего приложения. У меня есть разные типы динамических списков и т. Д. Любая помощь будет принята с благодарностью!
database.dart
import 'package:sqflite/sqflite.dart';
import 'package:path/path.dart';
class DBNoteModel {
String id;
String value;
DBNoteModel({this.id, this.value});
Map<String, dynamic> toMap() {
final map = new Map<String, dynamic>();
map["id"] = id;
map["value"] = value;
return map;
}
//to be used when converting the row into object
factory DBNoteModel.fromMap(Map<String, dynamic> data) =>
new DBNoteModel(id: data['id'], value: data['value']);
}
class DBHelper {
Database db;
DBHelper() {
initDatabase();
}
Future<void> initDatabase() async {
db = await openDatabase(join(await getDatabasesPath(), "database.db"),
onCreate: (db, version) {
return db.execute('''
CREATE TABLE notes(id TEXT PRIMARY KEY, value TEXT);
INSERT INTO notes (id, value) VALUES ('home', 'asd');
''');
}, version: 1);
}
Future<void> updateNote(String id, String value) async {
db.rawUpdate("UPDATE notes SET value = '$value' WHERE id = $id");
}
getNote(String id) async {
List<Map> result = await db.rawQuery("SELECT * FROM notes WHERE id = $id");
if (result.length > 0) {
return DBNoteModel.fromMap(result[0]);
}
return null;
}
}
test.dart
import 'package:flutter/material.dart';
import '../../utilities/database.dart';
class TestScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
final DBHelper _dbHelper = DBHelper();
var note = _dbHelper.getNote('home');
return Text(note.value);
}
}