본문 바로가기
코딩(개발)/Flutter

sqflite

by 플랜데버 2021. 3. 5.

* pubsec.yaml

dependencies:
  flutter:
    sdk: flutter
  sqflite: ^1.3.0
  path: ^1.7.0

* todo.dart

class Todo {
  String title;
  String content;
  bool active;
  int id;

  Todo({this.title, this.content, this.active, this.id});

  Map<String, dynamic> toMap() {
    return {
      'id': id,
      'title': title,
      'content': content,
      'active': active,
    };
  }
}

 

* main.dart

import 'package:flutter/material.dart';
import 'package:path/path.dart';
import 'package:sqflite/sqflite.dart';
import 'package:sql_example/addTodo.dart';
import 'package:sql_example/clearList.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    Future<Database> database = initDatabase();

    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
        visualDensity: VisualDensity.adaptivePlatformDensity,
      ),
      initialRoute: '/',
      routes: {
        '/': (context) => DatabaseApp(database),
        '/add': (context) => AddTodoApp(database),
        '/clear': (context) => ClearListApp(database)
      },
    );
  }

  Future<Database> initDatabase() async {
    return openDatabase(
      join(await getDatabasesPath(), 'todo_database.db'),
      onCreate: (db, version) {
        return db.execute(
          "CREATE TABLE todos(id INTEGER PRIMARY KEY AUTOINCREMENT, "
          "title TEXT, content TEXT, active BOOL)",
        );
      },
      version: 1,
    );
  }
}

class DatabaseApp extends StatefulWidget {
  final Future<Database> db;
  DatabaseApp(this.db);

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

class _DatabaseAppState extends State<DatabaseApp> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Database Example'),
      ),
      body: Container(
        child: Center(),
      ),
      floatingActionButton: Column(
        mainAxisAlignment: MainAxisAlignment.end,
        children: [

          FloatingActionButton(

            child: Icon(Icons.add),

            onPressed: () {

              Navigator.of(context).pushNamed('/add');

            },

            heroTag: null,    ---> 없으면 에러남

          ),

          FloatingActionButton(

            child: Icon(Icons.delete),

            onPressed: () {

              Navigator.of(context).pushNamed('/clear');

            },

            heroTag: null,

          ),


        ],
      ),
    );
  }
}

 

*addtodo.dart

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

class AddTodoApp extends StatefulWidget {
  final Future<Database> db;
  AddTodoApp(this.db);

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

class _AddTodoAppState extends State<AddTodoApp> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('addTodo Page'),
      ),
      body: Center(child: Text("addTodo Page")),
    );
  }
}

 

* clearList.dart

import 'package:flutter/material.dart';
import 'package:sqflite/sqlite_api.dart';

class ClearListApp extends StatefulWidget {
  final Future<Database> db;
  ClearListApp(this.db);
  @override
  _ClearListAppState createState() => _ClearListAppState();
}

class _ClearListAppState extends State<ClearListApp> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('clearList Page'),
      ),
      body: Center(child: Text("clearList Page")),
    );
  }
}

 

 

여기까지 하면 이상태

 

 

 


 

 

'코딩(개발) > Flutter' 카테고리의 다른 글

todolist(firebase) step1  (0) 2021.03.10
sqflite - rawQuery/rawInsert  (0) 2021.03.08
chatting ui  (0) 2021.03.05
ListView / AnimateList  (0) 2021.03.04
TextField  (0) 2021.03.04

댓글