Friday, December 20, 2019

Database Example(sqflite)




pubspec.yaml



dependencies:
  flutter:
    sdk: flutter
  cupertino_icons: ^0.1.2
  sqflite:
  path_provider:

---------------------------------------------


Inside lib folder these files we added.



main.dart :-



import 'package:flutter/material.dart';

import 'database_helper.dart';
import 'AllDatalist.dart';
import 'user.dart';

void main() => runApp(MyApp());
List<User> country;

class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title}) : super(key: key);
  final String title;

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  TextEditingController firstNameEditController =
 TextEditingController();
  TextEditingController lastNameEditController = 
TextEditingController();
  TextEditingController dateOfBirthEditController =
 TextEditingController();
  var db = new DatabaseHelper();

  Future _incrementCounter() async {
    print("dataGet :" + db.getUser().toString());
    var email = await db.getUser();
    if (email.length > 0) {
      Navigator.push(context,
          MaterialPageRoute(builder: (context) => UserListPage(email)));
    } else {
      print("Please add atleast one data");
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(
          title: Text(widget.title),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              TextFormField(
                controller: firstNameEditController,
                decoration: InputDecoration(hintText: "email"),
              ),
              TextFormField(
                controller: lastNameEditController,
                decoration: InputDecoration(hintText: "password"),
              ),
              TextFormField(
                controller: dateOfBirthEditController,
                decoration: InputDecoration(hintText: "Date of birth"),
              ),
              RaisedButton(
                onPressed: () {
                  if (firstNameEditController.text != "" &&
                      lastNameEditController.text != "" &&
                      dateOfBirthEditController.text != "") {
                    saveData();
                  } else {
                    print("All field are necessary");
                  }
                },
                child: Text("submit"),
              )
            ],
          ),
        ),
        floatingActionButton: Stack(
          children: <Widget>[
            Align(
              alignment: Alignment.bottomRight,
              child: FloatingActionButton.extended(
                icon: Icon(Icons.assignment),
                label: Text("All List"),
                onPressed: _incrementCounter,
                tooltip: 'Increment',
              ),
            ),
          ],
        ));
  }

  Future saveData() async {
    var db = new DatabaseHelper();
    var user = new User(firstNameEditController.text,
        lastNameEditController.text, dateOfBirthEditController.text);
    await db.saveUser(user);
  }
}



--------------------------------------
database_helper.dart :-

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

import 'user.dart';

class DatabaseHelper {
  static final DatabaseHelper _instance = new DatabaseHelper.internal();
  factory DatabaseHelper() => _instance;
  static Database _db;

  Future<Database> get db async {
    if (_db != null) return _db;
    _db = await initDb();
    return _db;
  }

  DatabaseHelper.internal();

  initDb() async {
    io.Directory documentsDirectory = await getApplicationDocumentsDirectory();
    String path = join(documentsDirectory.path, "main.db");
    var theDb = await openDatabase(path, version: 1, onCreate: _onCreate);
    return theDb;
  }

  void _onCreate(Database db, int version) async {
    // When creating the db, create the table
    await db.execute(
        "CREATE TABLE User(id INTEGER PRIMARY KEY, firstname TEXT, lastname TEXT, dob TEXT)");
  }

  Future<int> saveUser(User user) async {
    var dbClient = await db;
    int res = await dbClient.insert("User", user.toMap());
    return res;
  }

  Future<List<User>> getUser() async {
    var dbClient = await db;
    List<Map> list = await dbClient.rawQuery('SELECT * FROM User');
    List<User> employees = new List();
    for (int i = 0; i < list.length; i++) {
      var user =
      new User(list[i]["firstname"], list[i]["lastname"], list[i]["dob"]);
      user.setUserId(list[i]["id"]);
      employees.add(user);
    }
    print(employees.length);
    return employees;
  }

  Future<int> deleteUsers(User user) async {
    var dbClient = await db;

    int res =
    await dbClient.rawDelete('DELETE FROM User WHERE id = ?', [user.id]);
    return res;
  }

  Future<bool> update(User user) async {
    var dbClient = await db;
    int res =   await dbClient.update("User", user.toMap(),
        where: "id = ?", whereArgs: <int>[user.id]);
    return res > 0 ? true : false;
  }
}


----------------------------------------


user.dart :-


class User {

  int id;
  String _firstName;
  String _lastName;
  String _dob;

  User(this._firstName, this._lastName, this._dob);

  User.map(dynamic obj) {
    this._firstName = obj["firstname"];
    this._lastName = obj["lastname"];
    this._dob = obj["dob"];
  }

  String get firstName => _firstName;

  String get lastName => _lastName;

  String get dob => _dob;

  Map<String, dynamic> toMap() {
    var map = new Map<String, dynamic>();
    map["firstname"] = _firstName;
    map["lastname"] = _lastName;
    map["dob"] = _dob;
    return map;
  }
  void setUserId(int id) {
    this.id = id;
  }
}

--------------------------------------

AllDatalist.dart :-

import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';

import 'delete.dart';
import 'update.dart';
import 'user.dart';

class UserListPage extends StatefulWidget {
  List<User> userData;

  UserListPage(this.userData);

  @override
  UserList createState() => new UserList(userData);
}

class UserList extends State<UserListPage> {
  List<User> userData;

  UserList(this.userData);

  @override
  void initState() {
    // TODO: implement initState
    super.initState();
  }

  @override
  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      appBar: AppBar(
        centerTitle: true,
        title: Text("All Data"),
      ),
      backgroundColor: Colors.white,
      body: ListView.builder(
          itemCount: userData == null ? 0 : userData.length,
          itemBuilder: (BuildContext context, int index) {
            return new Card(
              child: new Container(
                  child: new Center(
                    child: new Row(
                      children: <Widget>[
                        new CircleAvatar(
                          radius: 30.0,
                          child: new Text(getShortName(userData[index])),
                          backgroundColor: const Color(0xFF20283e),
                        ),
                        new Expanded(
                          child: new Padding(
                            padding: EdgeInsets.all(10.0),
                            child: new Column(
                              crossAxisAlignment: CrossAxisAlignment.start,
                              children: <Widget>[
                                new Text(
                                  userData[index].firstName +
                                      " " +
                                      userData[index].lastName,
                                  // set some style to text
                                  style: new TextStyle(
                                      fontSize: 20.0,
                                      color: Colors.lightBlueAccent),
                                ),
                                new Text(
                                  "DATE: " + userData[index].dob,
                                  // set some style to text
                                  style: new TextStyle(
                                      fontSize: 20.0, color: Colors.amber),
                                ),
                              ],
                            ),
                          ),
                        ),
                        new Column(
                          mainAxisAlignment: MainAxisAlignment.spaceBetween,
                          children: <Widget>[
                            new IconButton(
                              icon: const Icon(
                                Icons.edit,
                                color: const Color(0xFF167F67),
                              ),
                              onPressed: () {
                                Navigator.pushReplacement(
                                    context,
                                    MaterialPageRoute(
                                        builder: (context) => UpdatePage(
                                            userData[index].firstName,
                                            userData[index].lastName,
                                            userData[index].dob,
                                            userData[index].id)));
                              }
                            ),
                            new IconButton(
                                icon: const Icon(Icons.delete_forever,
                                    color: const Color(0xFF167F67)),
                                onPressed: () {
                                  Navigator.pushReplacement(
                                      context,
                                      MaterialPageRoute(
                                          builder: (context) => DeletePage(
                                              userData[index].firstName,
                                              userData[index].lastName,
                                              userData[index].dob,
                                              userData[index].id)));
                                }
//                                homePresenter.delete(userData[index]),
                                ),
                          ],
                        ),
                      ],
                    ),
                  ),
                  padding: const EdgeInsets.fromLTRB(10.0, 0.0, 0.0, 0.0)),
            );
          }),
    );
  }
  String getShortName(User user) {
    String shortName = "";
    if (!user.firstName.isEmpty) {
      shortName = user.firstName.substring(0, 1) + ".";
    }

    if (!user.lastName.isEmpty) {
      shortName = shortName + user.lastName.substring(0, 1);
    }
    return shortName;
  }
}

----------------------------------

delete.dart :-



import 'package:flutter/foundation.dart';

import 'package:flutter/material.dart';



import 'AllDatalist.dart';

import 'database_helper.dart';

import 'user.dart';



class DeletePage extends StatefulWidget {
  final String firstName, lastName, dob;
  final int id;

  DeletePage(this.firstName, this.lastName, this.dob, this.id);

  @override
  _DeletePage createState() => new _DeletePage(firstName, lastName, dob, id);
}

class _DeletePage extends State<DeletePage> {
  final String firstName, lastName, dob;
  final int id;
  TextEditingController firstNameEditController = TextEditingController();
  TextEditingController lastNameEditController = TextEditingController();
  TextEditingController dateOfBirthEditController = TextEditingController();

  _DeletePage(this.firstName, this.lastName, this.dob, this.id);

  @override
  void initState() {
    // TODO: implement initState
    super.initState();
    firstNameEditController.text = firstName;
    lastNameEditController.text = lastName;
    dateOfBirthEditController.text = dob;
  }

  @override
  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      appBar: AppBar(
        centerTitle: true,
        title: Text("All Data"),
      ),
      backgroundColor: Colors.white,
      body: Center(
        child: Column(
          children: <Widget>[
            TextFormField(
              controller: firstNameEditController,
              decoration: InputDecoration(hintText: "Email"),
            ),
            TextFormField(
              controller: lastNameEditController,
              decoration: InputDecoration(hintText: "Password"),
            ),
            TextFormField(
              controller: dateOfBirthEditController,
              decoration: InputDecoration(hintText: "Date of birth"),
            ),
            RaisedButton(
              onPressed: () {
                if (firstNameEditController.text != "" &&
                    lastNameEditController.text != "" &&
                    dateOfBirthEditController.text != "") {
                  editData(context);
                } else {
                  print("All field are necessary");
                }
              },
              child: Text("submit"),
            )
          ],
        ),
      ),
    );
  }

  Future editData(context) async {
    var db = new DatabaseHelper();
    var user = new User(firstNameEditController.text,
        lastNameEditController.text, dateOfBirthEditController.text);
    user.setUserId(id);
    await db.deleteUsers(user);
    print("delete data successfully");
    var dataList = await db.getUser();
    if (dataList.length > 0) {
      Navigator.push(context,
          MaterialPageRoute(builder: (context) => UserListPage(dataList)));
    } else {
      Navigator.pop(context);
    }
  }
}




---------------------------------

update.dart :-

import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';

import 'AllDatalist.dart';
import 'database_helper.dart';
import 'user.dart';

class UpdatePage extends StatefulWidget {
  final String firstName, lastName, dob;
  final int id;

  UpdatePage(this.firstName, this.lastName, this.dob, this.id);

  @override
  _UpdatePage createState() => new _UpdatePage(firstName, lastName, dob, id);
}

class _UpdatePage extends State<UpdatePage> {
  final String firstName, lastName, dob;
  final int id;
  TextEditingController firstNameEditController = TextEditingController();
  TextEditingController lastNameEditController = TextEditingController();
  TextEditingController dateOfBirthEditController = TextEditingController();

  _UpdatePage(this.firstName, this.lastName, this.dob, this.id);

  @override
  void initState() {
    // TODO: implement initState
    super.initState();
    firstNameEditController.text = firstName;
    lastNameEditController.text = lastName;
    dateOfBirthEditController.text = dob;
  }

  @override
  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      appBar: AppBar(
        centerTitle: true,
        title: Text("All Data"),
      ),
      backgroundColor: Colors.white,
      body: Center(
        child: Column(
          children: <Widget>[
            TextFormField(
              controller: firstNameEditController,
              decoration: InputDecoration(hintText: "Email"),
            ),
            TextFormField(
              controller: lastNameEditController,
              decoration: InputDecoration(hintText: "Password"),
            ),
            TextFormField(
              controller: dateOfBirthEditController,
              decoration: InputDecoration(hintText: "Date of birth"),
            ),
            RaisedButton(
              onPressed: () {
                if (firstNameEditController.text != "" &&
                    lastNameEditController.text != "" &&
                    dateOfBirthEditController.text != "") {
                  updateData(context);
                } else {
                  print("All field are necessary");
                }
              },
              child: Text("submit"),
            )
          ],
        ),
      ),
    );
  }

  Future updateData(context) async {
    var db = new DatabaseHelper();
    var user = new User(firstNameEditController.text, lastNameEditController.text, dateOfBirthEditController.text);
    user.setUserId(id);
    bool dataCheck=await db.update(user);
    if(dataCheck==true){
      print("Data edit successfully");
      var dataList = await db.getUser();

      Navigator.pushReplacement(context,
          MaterialPageRoute(builder: (context) => UserListPage(dataList)));
    }
  }
}




No comments:

Post a Comment

How to save contact number in flutter

with contacts_service: 0.3.10 https://pub.dev/packages/contacts_service Future < void > contactSave (){ Contact contac...