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()