Get Even More Visitors To Your Blog, Upgrade To A Business Listing >>

2 Sqlite database in flutter | Delete & update data in sqlite | SqFlite crud Flutter | insert, fetch

Watch Full Video:



Full Github Code:
https://github.com/AmmaraRasheed/sqlite-crud-operation-flutter

Step 1:

Create a new dart file and give name as RetrieveData.dart and paste code.

import 'package:flutter/material.dart';
import 'package:shape_of_view/shape_of_view.dart';
import 'package:sqlite_database_tutorial/ModelClass.dart';
import 'package:sticky_headers/sticky_headers/widget.dart';

import 'DatabaseHelper.dart';

class RetrieveData extends StatefulWidget {
  @override
  _RetrieveDataState createState() => _RetrieveDataState();
}

class _RetrieveDataState extends State {


  List list=new List();
  final dbHelper = DatabaseHelper.instance;
  ModelClass1 model;
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Colors.black26,
      appBar: AppBar(
        backgroundColor: Colors.black,
        title: Text("Student Record",
          style: TextStyle(
            color: Colors.white,
          ),
        ),
      ),
      body: Container(
        child: gridHeader(),
        decoration: new BoxDecoration(
          color:  Colors.black,
          image: new DecorationImage(
            fit: BoxFit.cover,
            colorFilter: new ColorFilter.mode(Colors.grey.withOpacity(1), BlendMode.dstATop),
            image: new AssetImage(
                "asset/bg00.jpg"
    ),
          ),
        ),
      ),
    );
  }

  fetch() async {
    final allRows = await dbHelper.queryAllRows();
    allRows.forEach((row) => {
    model=ModelClass1(row["name"],row["email"],row["password"],row["_id"]),
    list.add(model)
    });
    setState(() {

    });
  }

  List listHeader = ['Student Record'];
  Widget gridHeader(){
    return list.length==0? Center(
      child: Text("No Data Insert",
        style: TextStyle(color: Colors.white,
          fontSize: 20,
        ),
      ),
    ):
    new ListView.builder(
        itemCount: listHeader.length,
        itemBuilder: (context, index) {
          return new StickyHeader(
            header: new Container(
              height: 38.0,
              color: Colors.transparent,
              padding: new EdgeInsets.symmetric(horizontal: 12.0),
              alignment: Alignment.centerLeft,
              child: new Text(listHeader[index],
                style: const TextStyle(color: Colors.white, fontSize: 20,fontWeight: FontWeight.bold),
              ),
            ),
            content: Container(
              child: Card(
                color: Colors.transparent,
                child: GridView.builder(
                  shrinkWrap: true,
                  physics: NeverScrollableScrollPhysics(),
                  itemCount: list.length,
                  gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 2,childAspectRatio: 1,),
                    itemBuilder: (contxt, indx){
                    return GestureDetector(
                      onTap: (){
                        openAlertBox(list[indx].key,list[indx].name,list[indx].email);
                      },
                      onLongPress: (){
                        DialogNew( context, list[indx].key);
                      },
                      child: Card(
                        color: Colors.transparent,
                        child: ShapeOfView(
                          shape: BubbleShape(
                              position: BubblePosition.Bottom,
                              arrowPositionPercent: 0.5,
                              borderRadius: 20,
                              arrowHeight: 10,
                              arrowWidth: 10
                          ),
                          child: Container(
                            color: Colors.blueGrey,
                            child: Column(
                              children: [
                                Center(
                                  child:
                                  Text(list[indx].name, style: TextStyle(
                                    fontSize: 25,
                                    fontWeight: FontWeight.bold,
                                    fontFamily: 'DancingScript',
                                    color: Colors.blue[900],
                                  ),
                                  ),
                                ),
                                Text(list[indx].pass.toString(), style: TextStyle(
                                    fontSize: 18,
                                    color: Colors.white
                                ),
                                ),
                                Text(list[indx].email, style: TextStyle(
                                    fontSize: 18,
                                    fontFamily: 'DancingScript',
                                    color: Colors.white
                                ),
                                ),
                                SizedBox(
                                  height: 10,
                                ),
                                ShapeOfView(
                                    height: 40,
                                    width: 40,
                                    shape: StarShape(
                                      noOfPoints: 6,
                                    ),
                                    child: Container(
                                        color: Colors.blue[900],
                                        child:Center(
                                          child:  Text(list[indx].key.toString(),
                                            style: TextStyle(
                                              color: Colors.white,
                                            ),
                                          ),
                                        )
                                    )
                                )
                              ],
                            ),
                          ),
                        ),
                      ),
                    );
                    }
                ),
              ),
            ),
          );
        }
    );
  }

  @override
  void initState() {
    fetch();
  }
  openAlertBox(int key,String name1,String email1) {
    String name,email;
    name=name1;
    email=email1;
    return showDialog(
        context: context,
        builder: (BuildContext context) {
          return AlertDialog(
            backgroundColor: Colors.transparent,
            shape: RoundedRectangleBorder(
                borderRadius: BorderRadius.all(Radius.circular(32.0))
            ),
            content: Container(
              decoration: BoxDecoration(
                  border: Border.all(
                    color: Colors.white,
                  ),
                  borderRadius: BorderRadius.all(Radius.circular(32))
              ),
              width: 300.0,
              child: Column(
                crossAxisAlignment: CrossAxisAlignment.stretch,
                mainAxisSize: MainAxisSize.min,
                children: [
                  SizedBox(
                    height: 10,
                  ),
                  Align(
                    alignment: Alignment.center,
                    child: Text(
                      "Update Record",
                      style: TextStyle(fontSize: 30.0,
                        fontFamily: 'DancingScript',
                        color: Colors.white,
                      ),
                    ),
                  ),
                  SizedBox(
                    height: 15.0,
                  ),
                  Divider(
                    thickness: 2,
                    color: Colors.blue[900],
                    height: 5.0,
                  ),
                  TextField(
                    controller: TextEditingController()..text = name1,
                    onChanged: (text){
                      name=text;
                    },
                    cursorColor: Colors.blue[900],
                    style: TextStyle(
                      color: Colors.white,
                    ),
                    decoration: InputDecoration(
                      hintText: "Update Name",
                      hintStyle: TextStyle(
                        color: Colors.white,
                      ),
                      border: InputBorder.none,
                    ),
                    maxLines: 1,
                  ),
                  TextField(
                    controller: TextEditingController()..text = email1,
                    onChanged: (text){
                      email=text;
                    },
                    cursorColor: Colors.blue[900],
                    style: TextStyle(
                      color: Colors.white,
                    ),
                    decoration: InputDecoration(
                      hintText: "Update Email",
                      hintStyle: TextStyle(
                        color: Colors.white,
                      ),
                      border: InputBorder.none,
                    ),
                    maxLines: 1,
                  ),
                  GestureDetector(
                    onTap: (){
                      _update(key, name, email);
                      Navigator.of(context, rootNavigator: true).pop('dialog');
                    },

                    child: Container(
                      padding: EdgeInsets.only(top: 20.0, bottom: 20.0),
                      decoration: BoxDecoration(
                        color: Colors.blue[900],
                        borderRadius: BorderRadius.only(
                            bottomLeft: Radius.circular(32.0),
                            bottomRight: Radius.circular(32.0)),
                      ),
                      child: Text(
                        "Submit",
                        style: TextStyle(color: Colors.white,
                          fontSize: 20,
                          fontFamily: 'DancingScript',
                        ),
                        textAlign: TextAlign.center,
                      ),
                    ),
                  ),
                ],
              ),
            ),
          );
        }
    );
  }

  DialogNew(BuildContext context,int key){
    AlertDialog alert;
    Widget noButton = FlatButton(
      child:  Container(
          color: Colors.blue[900],
          height: 30,
          width: 60,
          child: Center(
            child: Text("No",
                style: TextStyle(
                  fontSize: 20,
                  color: Colors.white,
                )
            ),
          )
      ),
      onPressed: () =>     Navigator.of(context, rootNavigator: true).pop('dialog'),
    );

    Widget okButton = FlatButton(
      child:  Container(
          color: Colors.blue[900],
          height: 30,
          width: 60,
          child: Center(
            child: Text("Yes",
                style: TextStyle(
                  fontSize: 20,
                  color: Colors.white,
                )
            ),
          )
      ),
      onPressed: () {
        _delete(key);
        Navigator.of(context, rootNavigator: true).pop('dialog');
      },
    );
    alert = AlertDialog(
      backgroundColor: Colors.black38,
      shape: RoundedRectangleBorder(borderRadius: new BorderRadius.circular(15)),
      title: Text("Delete Data",
        style: TextStyle(
          fontFamily: "DancingScript",
          color: Colors.white,
        ),
      ),
      content: Text("Do you want to delete data???",
        style: TextStyle(
          color: Colors.white,
        ),
      ),
      actions: [
        Row(
          children: [
            okButton,
            SizedBox(
              width: 10,
            ),
            noButton,
          ],
        )
      ],
    );

    showDialog(
      context: context,
      builder: (BuildContext context) {
        return alert;
      },
    );
  }

  void _update(int key,String name,String email) async {
    Map row = {
      DatabaseHelper.columnId   : key,
      DatabaseHelper.columnName : name,
      DatabaseHelper.columnEmail  : email
    };
    final rowsAffected = await dbHelper.update(row);
    print('updated $rowsAffected row(s)');
  }

  void _delete(int id) async {
    final rowsDeleted = await dbHelper.delete(id);
    print('deleted $rowsDeleted row(s): row $id');
  }
}

Step 2:

Database Helper:

import 'dart:io';
import 'package:path/path.dart';
import 'package:path_provider/path_provider.dart';
import 'package:sqflite/sqflite.dart';

class DatabaseHelper{
  static final _databaseName="Database.db";
  static final _databaseVersion=1;
  static final table="Student";
  static final columnId = '_id';
  static final columnName = 'name';
  static final columnEmail = 'email';
  static final columnPass = 'password';

  DatabaseHelper._privateConstructor();
  static final DatabaseHelper instance = DatabaseHelper._privateConstructor();

  static Database _database;

  Future get database async {
    if (_database != null) return _database;
    // lazily instantiate the db the first time it is accessed
    _database = await _initDatabase();
    return _database;
  }

  _initDatabase() async {
    Directory documentsDirectory = await getApplicationDocumentsDirectory();
    String path = join(documentsDirectory.path, _databaseName);
    return await openDatabase(path,
        version: _databaseVersion,
        onCreate: _onCreate);
  }

  Future _onCreate(Database db, int version) async {
    await db.execute('''
          CREATE TABLE $table (
            $columnId INTEGER PRIMARY KEY,
            $columnName TEXT NOT NULL,
            $columnEmail TEXT NOT NULL,
            $columnPass INTEGER NOT NULL
          )
          ''');
  }
  Future insert(Map row) async {
    Database db = await instance.database;
    return await db.insert(table, row);
  }

  Future>> queryAllRows() async {
    Database db = await instance.database;
    return await db.query(table);
  }

  Future update(Map row) async {
    Database db = await instance.database;
    int id = row[columnId];
    return await db.update(table, row, where: '$columnId = ?', whereArgs: [id]);
  }

  Future delete(int id) async {
    Database db = await instance.database;
    return await db.delete(table, where: '$columnId = ?', whereArgs: [id]);
  }


}

OUTPUT:






This post first appeared on AR Programming, please read the originial post: here

Share the post

2 Sqlite database in flutter | Delete & update data in sqlite | SqFlite crud Flutter | insert, fetch

×

Subscribe to Ar Programming

Get updates delivered right to your inbox!

Thank you for your subscription

×