Flutter 如何在颤振中使用SQFlite从模型类获取数据?
在这里,我将Flutter 如何在颤振中使用SQFlite从模型类获取数据?,flutter,dart,Flutter,Dart,在这里,我将SqFlite功能与模型类一起用于数据存储。但问题是,当我点击按钮时,addData方法被称为null 这是我的模型课 这里我显示了我的书签类。我使用这个类为用户显示数据 单击按钮时,会显示此错误 The method 'getAllData' was called on null. Receiver: null Tried calling: getAllData() 请检查我给我的解决方案的代码。您没有将databaseProvider传递到此类中,这就是为什么您会得到null
SqFlite
功能与模型类一起用于数据存储。但问题是,当我点击按钮时,addData
方法被称为null
这是我的模型课
这里我显示了我的书签类。我使用这个类为用户显示数据
单击按钮时,会显示此错误
The method 'getAllData' was called on null.
Receiver: null
Tried calling: getAllData()
请检查我给我的解决方案的代码。您没有将databaseProvider传递到此类中,这就是为什么您会得到null 您在哪里创建databaseProvider对象?我在init方法中使用databaseProvider对象。但数据并没有显示出来@GlenI更新了代码,但仍然无法显示数据。@Glen
import 'dart:io';
import 'package:news_app/src/model/bookmark_db_provider.dart';
import 'package:path/path.dart';
import 'package:path_provider/path_provider.dart';
import 'package:sqflite/sqflite.dart';
class DatabaseProvider {
// DatabaseProvider._();
// static final DatabaseProvider db = DatabaseProvider._();
Database _database;
Future<Database> get database async {
if (_database != null) return _database;
_database = await getDatabaseInstance();
return _database;
}
Future<Database> getDatabaseInstance() async {
Directory directory = await getApplicationDocumentsDirectory();
String path = join(directory.path, 'bookmark.db');
return await openDatabase(path, version: 1,
onCreate: (Database db, int version) async {
await db.execute('create table Bookmark ('
'id integer primary key autoincrement,'
'imageUrl text,'
'title text,'
'description text,'
'newsLink text,'
'createDate text,'
'category text,'
'footerTitle text'
')');
});
}
addToDatabase(DatabaseModel databaseModel) async {
final db = await database;
var raw = await db.insert('Bookmark', databaseModel.toMap(),
conflictAlgorithm: ConflictAlgorithm.replace);
return raw;
}
updateDatabase(DatabaseModel databaseModel) async {
final db = await database;
var response = await db.update('Bookmark', databaseModel.toMap(),
where: 'id = ?', whereArgs: [databaseModel.id]);
return response;
}
Future<DatabaseModel> getDatabaseModelWithId(int id) async {
final db = await database;
var response = await db.query('Bookmark', where: 'id = ?', whereArgs: [id]);
return response.isNotEmpty ? DatabaseModel.fromMap(response.first) : null;
}
Future<List<DatabaseModel>> getAllData() async {
final db = await database;
var response = await db.query('Bookmark');
List<DatabaseModel> list =
response.map((c) => DatabaseModel.fromMap(c)).toList();
return list;
}
deleteDatabase(int id) async {
final db = await database;
return db.delete('Bookmark', where: 'id = ?', whereArgs: [id]);
}
deleteAllDatabase() async {
final db = await database;
db.delete('Bookmark');
}
}
import 'package:flutter/material.dart';
import 'package:flutter/cupertino.dart';
import 'package:news_app/src/model/bookmark_db_provider.dart';
import 'package:news_app/src/screens/home.dart';
import 'package:news_app/src/utils/database.dart';
class BookMark extends StatefulWidget {
@override
_BookMarkState createState() => _BookMarkState();
}
class _BookMarkState extends State<BookMark> {
DatabaseProvider databaseProvider;
@override
void initState() {
super.initState();
databaseProvider = DatabaseProvider();
}
@override
void dispose() {
super.dispose();
}
@override
Widget build(BuildContext context) {
return WillPopScope(
onWillPop: () => Navigator.push(
context, MaterialPageRoute(builder: (context) => HomePage())),
child: Scaffold(
backgroundColor: Theme.of(context).primaryColor,
appBar: AppBar(
backgroundColor: Theme.of(context).appBarTheme.color,
elevation: 0,
centerTitle: true,
title: Text(
'BookMark News',
style: TextStyle(fontSize: 23, fontWeight: FontWeight.bold),
),
),
body: Container(
padding: EdgeInsets.all(8.0),
child: FutureBuilder<List<DatabaseModel>>(
future: databaseProvider.getAllData(),
builder: (BuildContext context, AsyncSnapshot snapshot) {
if (snapshot.hasData) {
return ListView.builder(
itemCount: snapshot.data.length,
itemBuilder: (BuildContext context, int index) {
var common = snapshot.data[index];
return Card(
elevation: 5.0,
child: ListTile(
leading: SizedBox(
height: 85,
width: 79,
child: Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(5.0),
image: DecorationImage(
image:
NetworkImage(common['imageUrl']),
fit: BoxFit.cover)),
),
),
title: Text(common['title']),
isThreeLine: true,
subtitle: Text(common['footerTitle']),
trailing: Column(
children: <Widget>[
Text(common['createDate']),
Text(common['category'])
],
),
),
);
});
} else {}
return Center(
child: CircularProgressIndicator(),
);
},
)
)),
);
}
}
onPressed: () async {
print('added data');
dbHelper.addToDatabase(DatabaseModel(
imageUrl: allNewsDetail[index]['image_url'],
category: allNewsDetail[index]['category'],
footerTitle: allNewsDetail[index]['footer_title'],
createDate: allNewsDetail[index]['created_date'],
newsLink: allNewsDetail[index]['news_link'],
description: allNewsDetail[index]['description'],
title: allNewsDetail[index]['title']));
Navigator.push(context,MaterialPageRoute(builder: (context) =>BookMark()));
}
The method 'getAllData' was called on null.
Receiver: null
Tried calling: getAllData()