flutter - The getter 'length' was called on null. - почему?
Подключаю БД(sqlite) к проекту Flutter
При переходе на вкладку пишет:
Понимаю, что передает пустой параметр, но не могу понять, где именно ошибка. Все вроде указано верно, но предполагаю, что ошибка в том, что не указана База Данных, она банально не подключена. Но могу и ошибаться.
flutter: # The following line ensures that the Material Icons font is # included with your application, so that you can use the icons in # the material Icons class. uses-material-design: true assets: - lib/assets/database.sqlite - image/fire.png
import 'dart:async';
import 'dart:io';
import 'package:path/path.dart';
import 'package:path_provider/path_provider.dart';
import 'package:sqflite/sqflite.dart';
import 'model.dart';
class DatabaseHelper {
static final DatabaseHelper _instance = new DatabaseHelper.internal();
factory DatabaseHelper() => _instance;
final String tableRHV = "lession";
final String columnId = "_id";
final String title = "title";
final String text = "text";
static Database _db;
Future<Database> get db async {
if (_db != null) {
return _db;
}
_db = await initDb();
return _db;
}
DatabaseHelper.internal();
initDb() async {
Directory documentDirectory = await getApplicationDocumentsDirectory();
String path = join(
documentDirectory.path, "lib/assets/database.sqlite"); //home://directory/files/sqlite.db
var ourDb = await openDatabase(path, version: 1);
return ourDb;
}
//Get RHV
Future<List> getRHV() async {
var dbClient = await db;
var result = await dbClient.rawQuery("SELECT * FROM $tableRHV");
return result.toList();
}
Future<int> getCount() async {
var dbClient = await db;
return Sqflite.firstIntValue(
await dbClient.rawQuery("SELECT COUNT(*) FROM $tableRHV"));
}
Future<BaseSqlite> getRhv(int id) async {
var dbClient = await db;
var result = await dbClient.rawQuery("SELECT * FROM $tableRHV WHERE $columnId = $id");
if (result.length == 0) return null;
return new BaseSqlite.fromMap(result.first);
}
Future close() async {
var dbClient = await db;
return dbClient.close();
}
}
файл отвечающий за вывод данных: rhv.dart
import 'package:flutter/material.dart';
import 'package:flutterapp/DatabaseHelper.dart';
import 'package:flutterapp/model.dart';
List _title;
void main() async {
var db = new DatabaseHelper();
int count = await db.getCount();
print("Статья: $count");
//Get all users;
_title = await db.getRHV();
for (int i = 0; i < _title.length; i++) {
BaseSqlite baseSqlite = BaseSqlite.map(_title[i]);
print("Title: ${baseSqlite.title }, Title Id: ${baseSqlite.id}");
}
}
class Rhv extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(
title: new Text("Школа Вожатых"),
centerTitle: true,
backgroundColor: Colors.deepOrange,
),
body: new ListView.builder(
itemCount: _title.length,
itemBuilder: (_, int position) {
return new Card(
color: Colors.white,
elevation: 2.0,
child: new ListTile(
leading: new CircleAvatar(
child: Text("${BaseSqlite.fromMap(_title[position]).title.substring(0, 1)}"),
),
title: new Text("User: ${BaseSqlite.fromMap(_title[position]).title}"),
onTap: () => debugPrint("${BaseSqlite.fromMap(_title[position]).title}"),
),
);
}),
);
}
}


