Flutter를 사용한 간단한 메모 작성 앱 — 1 부

sqflite 데이터베이스로 Flutter 앱을 만들 시간입니다

Flutter 는 응용 프로그램을 만드는 데 널리 사용되는 프레임 워크입니다. 위젯이 많고 배울 것이 많기 때문에 매일 Flutter를 탐색하고 있습니다.

따라서 생산적인 앱에 대해 이야기 할 때 항상 로컬 저장소가 있습니다.

Flutter에는 세 가지 유형의 로컬 저장소가 있습니다.

  1. 텍스트 파일 읽기 / 쓰기.
  2. SharedPreferences.
  3. sqflite .

이것의 도움으로 우리는 간단한 메모 작성 앱을 만들 것이며 물론 우리가 그것을 통해 많은 것을 배울 것입니다.

똑바로 시작합시다.

Flutter를 처음 사용하는 경우이 링크 로 이동 하여 지침을 따르십시오. 이 과정을 마치면 환경과 Flutter SDK를 설정할 수 있고 저와 함께 할 수 있습니다.

시작하기

Android Studio에서 앱을 개발하고 있습니다. 왜냐하면 쉽고 Flutter의 필요에 따라 모든 것을 설정하는 데 도움이되기 때문입니다. 만족 스럽지만 Android Studio가 마음에 들지 않으시면 원하는 편집기를 사용해도 좋습니다.

현재 Flutter를 지원하는 편집기는 다음과 같습니다.

모든 것을 삭제하십시오. 우리는 처음부터 시작합니다.

코드는 내 코드와 동일해야합니다.

import 'package:flutter/material.dart';

void main() {
  runApp(MaterialApp(
    title: "Notes App",
    home: NotesList(),
  ));
}

class NotesList extends StatefulWidget {
  @override
  _NotesListState createState() => _NotesListState();
}

class _NotesListState extends State<NotesList> {
  @override
  Widget build(BuildContext context) {
    return Container();
  }
}

이 앱에는 다음과 같은 플러그인이 있습니다.

  1. Sqflite 플러그인
  2. 경로 _ 제공자
  3. 국제

모든 패키지를 완료 한 후에이 메시지를 받았을 것입니다 (타이밍을 무시하면 인터넷 연결에 따라 수신됩니다).

Running “flutter packages get” in notes_app… 4.7s
Process finished with exit code 0

lib전문 개발자에게 좋은 방법이므로 폴더 아래에 일부 패키지를 만듭니다 .

당연히 main.dartUI 패키지로 방금 옮겼습니다 .

모델 클래스

실제 메모를 작성하는 데 도움이되는 모델을 만들어 보겠습니다.

모델 패키지에서 모델 패키지 > 새로 만들기 > Dart 파일을 마우스 오른쪽 버튼으로 클릭 하고 이름을 note로 지정합니다 .

귀하는 Class다음과 같아야합니다 :

class Note {
  String _text, _date; //our note contain text,create date and an Id
  int _id;

  Note.update(this._text, this._date, this._id);

  Note(this._text, this._date);

  Note.map(dynamic obj) {
    this._text = obj['name'];
    this._date = obj['date'];
    this._id = obj['id'];
  } 

  Note.fromMap(Map<String, dynamic> map) {
    this._text = map['name'];
    this._id = map['id'];
    this._date = map['date'];
  }

  Map<String, dynamic> toMap() {
    Map<String, dynamic> map = new Map<String, dynamic>();

    map['name'] = this._text;
    map['date'] = this._date;

    if (id != null) map['id'] = this._id;

    return map;
  }

  get name => _text;

  set name(value) {
    _text = value;
  }

  get date => _date;

  set date(value) {
    _date = value;
  }

  int get id => _id;

  set id(int value) {
    _id = value;
  }
}

Util 클래스

위에서 설명한 것과 동일한 단계를 따르고 classutil 패키지에서 Constants.

이것은 우리가 같은 변수를 반복해서 쓰지 않도록 도와 줄 것입니다. 따라서 프로젝트에 이러한 유형의 클래스를 추가하는 것이 좋습니다.

class Constants {
  static final String TABLE_NAME = "noteTable";
  static final String COLUM_TEXT = "text";
  static final String COLUM_DATE = "date";
  static final String COLUM_ID = "id";
  static final int DB_VERSION = 1;
  static final String DBNAME = "notes.db";
}
  • COLUMN_TEXT: 메모 텍스트 열.
  • COLUMN_DATE: 노트 생성 날짜.
  • COLUMN_ID: db에있는 특정 행의 ID.
  • DB_VERSION: 데이터베이스 버전.
  • BDNAME: 데이터베이스 이름.

이제 sqflite에 대해 조금 알려 드리겠습니다.

Sqflite는 싱글 톤 패턴에서 작동합니다. 싱글 톤이 무엇인지 간단한 방법으로 정의한다면, 싱글 톤 클래스가 반복해서 인스턴스화 할 필요가 없을 수도 있음을 기억하십시오.

당신은 하나의 인스턴스를 가지고 있고 당신은 갈 수 있습니다.

사이드 프로젝트 패널로 이동하여 데이터베이스 패키지 > 새로 만들기 > Dart 파일을 마우스 오른쪽 버튼으로 클릭하고 이름을 지정한 다음 database_helperEnter 키를 누릅니다.

명명 된 클래스를 DatabaseHelper만들고 일부 라이브러리와 변수를 가져옵니다.

import 'dart:async';
import 'dart:io';
import 'package:sqflite/sqflite.dart';
import 'package:path_provider/path_provider.dart';
import 'package:path/path.dart';
import 'package:todo_app/utils/constants.dart';
import 'package:todo_app/models/note.dart';
class DatabaseHelper{
static final DatabaseHelper _INSTANCE = new DatabaseHelper.make();

factory DatabaseHelper() => _INSTANCE;

static Database _db;

DatabaseHelper.make();
}
  • factory: 생성자는의 인스턴스를 반환하는 데 사용됩니다 databasehelper.
  • DatabaseHelper.make(): 클래스 객체를 만들기위한 명명 된 생성자입니다.
  • Database _db: 실제 데이터베이스이며 우리는 항상 이것과 상호 작용할 것입니다.

그것은이 때문에 떨림이, 단일 스레드 UI 프레임 워크로 떨림의 데이터베이스 실행은 백그라운드 스레드에서 발생 async, awaitFuture것들이 백그라운드에서 작동하도록하는 키워드를.

db를 초기화합시다.

Future<Database> get db async {
  if (_db != null) return _db; 
  _db = await initDB();
  return _db;
}
------------------------------------------------------------------
initDB() async {
  Directory directory = await getApplicationDocumentsDirectory();
  String path = join(directory.path, Constants.DBNAME);
  var myDb =
      openDatabase(path, version: Constants.DB_VERSION, onCreate: _onCreate);

  return myDb;
}

이제 initDB()생성 된 데이터베이스를 반환하는 데 도움이되는 방법이 무엇인지 궁금 합니다.

보세요, sqflite의 모든 작업은 백그라운드에서 flutter에 의해 수행되기 때문에 모든 메서드에는 asyncawait키워드가 있습니다.

_onCreate 메서드

이 메서드에는와 같은 몇 가지 SQL 항목 CREATE TABLE이 있으며이를 통해 메모를 저장할 테이블을 생성합니다.

void _onCreate(Database db, int version) async {
  await db.execute(
      "CREATE TABLE ${Constants.TABLE_NAME} (${Constants.COLUM_ID} INTEGER PRIMARY KEY, "
      "${Constants.COLUM_TEXT} TEXT, ${Constants.COLUM_DATE} TEXT );");
}

Future<int> insertNote(Note note) async {
  var dbClient = await db;
  int count = await dbClient.insert(Constants.TABLE_NAME, note.toMap());

  return count;
}
  • dbClient: 데이터베이스 변수입니다.
  • count: 데이터베이스에 값을 삽입 한 후 실제로 데이터가 저장된 특정 행의 ID가 될 정수를 반환합니다. 나중에 데이터베이스에서 단일 메모를 가져 오는 데 사용합니다.

Map<String, dynamic> toMap() {
  Map<String, dynamic> map = new Map<String, dynamic>();

  map['name'] = this._text;
  map['date'] = this._date;

  if (id != null) map['id'] = this._id;

  return map;
}

Map<String,dynamic>문자열은 떨림이 값에 대응 키를 이해하는 데 도움이 될 것입니다 키입니다.

Dynamic은 매우 강력하고 유리한 키워드입니다 Map. 정수, 문자열, 부울, double 등이 될 수 있으므로 모든 값을에서 값으로 전달할 수 있습니다. 이것이 Flutter의 아름다움입니다.

이제 데이터베이스에서 모든 메모를 가져올 때입니다.

이를위한 방법이 있습니다.

Future<List> getAllNotes() async {
  var dbClient = await db;
  var result = await dbClient.rawQuery(
      "SELECT * FROM ${Constants.TABLE_NAME} ORDER BY ${Constants.COLUM_TEXT} ASC");

  return result.toList();
}

데이터베이스의 모든 항목은 Map? 따라서지도 목록을 반환합니다. 나중에 데이터를 추출합니다. 지금은 이것을 추가하십시오.

1 부에서는 충분합니다 . 다음 부분에서 뵙겠습니다 .

이 기사가 유용 했습니까? 매체에 Mustufa Ansari 를 따르십시오 . 아래에서 가장 많이 읽은 기사를 확인하십시오.

Suggested posts

N + 1 문제 선택

모든 것은 비용이 있습니다.

N + 1 문제 선택

개발자의 경우 ORM (Object-relational mapping)을 사용하면 삶을 상당히 단순화 할 수 있지만 알아야 할 자체 캐치 세트가 있습니다. 더 심각한 문제 중 하나는 Select N + 1 문제입니다.

휴대폰 카메라로 사진을 찍는 방법

아니, 정말. 당신은 이것을 읽어야합니다

휴대폰 카메라로 사진을 찍는 방법

사람들에게 사진 촬영에 휴대 전화를 사용하는지 물어 보면 세 가지 답 중 하나를 얻을 수 있습니다. 카메라가 훨씬 좋아 졌나요? 네,하지만 그게 주된 이유는 아닙니다. 나는 카메라를 더 많이 사용하고 있는데, 그 이유는 내가해야했던 것처럼 우선 제대로하는 방법을 배웠기 때문입니다.

Related posts

Kotlin을 사용하여 Android RecyclerView 항목을 다시 정렬하려면 드래그하세요.

Android 앱에서 멋진 맞춤형 목록 작성

Kotlin을 사용하여 Android RecyclerView 항목을 다시 정렬하려면 드래그하세요.

이 기사에서는 항목을 다시 정렬 할 수있는 기능을 제공하는 RecyclerView를 구현하는 방법에 대해 알아 봅니다. 타사 라이브러리를 사용하지 않고이 작업을 수행 할 것입니다.

Google Play 인앱 리뷰

Google Play 인앱 리뷰

Google Play Core 라이브러리는 인앱 리뷰에 대한 지원을 추가하여 사용자가 앱이나 게임을 떠나지 않고도 평점과 리뷰를 제출할 수 있도록합니다. 이 문서는 메모장 앱 연구 사례를 통해 Android에서이 기능을 구현하는 방법과 Google Play 스토어에서 사용자의 가시성에 미치는 영향을 보여줍니다.

Android에서 나만의 AR 애플리케이션 만들기

Android에서 나만의 AR 애플리케이션 만들기

이 기사에서는 카메라에서 얼굴에 효과를주는 Android 애플리케이션을 실시간으로 작성하는 방법을 설명합니다. 여기서는 카메라 작업, 얼굴 찾기, 얼굴의 포인트 찾기 및 결과 그리기 등 모든 핵심 사항을 살펴 보겠습니다.

Gradle 종속성 : 메시 🤯

Gradle 종속성을 현명하게 관리하세요 !!

Gradle 종속성 : 메시 🤯

종속성이 증가 할 때마다 Gradle 파일을 관리하기가 어려워집니다. 이 블로그에서는 종속성을 다른 파일로 이동하고 유사한 종속성을 그룹화하여 관리하려고합니다.