Как получить определенные данные, используя sqlflite в флаттере - PullRequest
0 голосов
/ 11 ноября 2019

У меня есть одна страница, называемая страницей входа, на этой странице я использую метки для текстового поля и кнопки, например (Имя пользователя, Логин), я использую метку входа для кнопки входа, но я хочу эту метку из базы данных sqlflite, также яВы сохранили данные в базе данных, но я хочу получить эти данные для конкретной метки.

Вот эта форма входа Текст метки виджета - это имя пользователя, но я хочу получить его из базы данных SQL, которую я уже сохранил в базу данных. просто хочу получить по тексту метки. Здесь я попробовал код.

Код помощника базы данных

import 'dart:io';

import 'package:path_provider/path_provider.dart';
import 'package:sqflite/sqflite.dart';
import 'package:path/path.dart';
import 'package:tudo/src/utils/sql/sql_appconstant_model.dart';

class DbOperation {
  static final DbOperation _instance = DbOperation._();
  static Database _database;

  DbOperation._();
  factory DbOperation() {
    return _instance;
  }

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

    _database = await init();

    return _database;
  }

  Future<Database> init() async {
    Directory directory = await getApplicationDocumentsDirectory();
    String dbPath = join(directory.path, 'database.db');
    var database = openDatabase(dbPath, version: 1, onCreate: _onCreate);

    return database;
  }

  void _onCreate(Database db, int version) {
    db.execute('''
      CREATE TABLE appConstant(
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        language TEXT,
        screen INTEGER,
        value INTEGER,
        label INTEGER)
    ''');
    print("Database was created!");
  }

  Future<int> insertdata(DbAppConstant dbAppConstant) async {
    var client = await db;
    return client.insert('appConstant', dbAppConstant.toMapForDb(),
        conflictAlgorithm: ConflictAlgorithm.replace);
  }

  Future<List<DbAppConstant>> fetchAll() async {
    var client = await db;
    var res = await client.query('appConstant');

    if (res.isNotEmpty) {
      var appConst = res
          .map((appConstantMap) => DbAppConstant.fromDb(appConstantMap))
          .toList();
      return appConst;
    }
    return [];
  }

  Future deleteAll() async {
    var client = await db;
    client.delete('appConstant');
  }

  Future closeDb() async {
    var client = await db;
    client.close();
  }

}

Виджет имени пользователя на экране входа в систему

  Widget _buildUserNameField() {
    return EnsureVisibleWhenFocused(
      focusNode: _emailFocusNode,
      child: TudoEmailWidget(
        focusNode: _emailFocusNode,
        prefixIcon: Icon(Icons.email),
        labelText: "Username",
        validator: (val) => Validators.validateEmail(val.trim()),
        onSaved: (val) => _username = val.trim(),
        // onChanged:(val) => _username = val.trim(),
      ),
    );
  }

Модель базы данных

import 'package:meta/meta.dart';

class DbAppConstant {
  @required
  final int id;
  @required
  final String language;
  @required
  final String screen;
  @required
  final String value;
  @required
  final String label;

  DbAppConstant({this.id, this.language, this.screen, this.value, this.label});

  DbAppConstant.random()
      : this.id = null,
        this.language = 'en',
        this.screen = 'login_screen',
        this.value = 'email',
        this.label = 'Email';

  DbAppConstant.fromDb(Map<String, dynamic> map)
      : id = map['id'],
        language = map['language'],
        screen = map['screen'],
        value = map['value'],
        label = map['label'];

  Map<String, dynamic> toMapForDb() {
    var map = Map<String, dynamic>();
    map['id'] = id;
    map['language'] = language;
    map['screen'] = screen;
    map['value'] = value;
    map['label'] = label;
    return map;
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...