首页 > 其他分享 >flutter本地数据储存 sqflite

flutter本地数据储存 sqflite

时间:2024-03-20 18:55:21浏览次数:17  
标签:储存 name portraits await db sqflite phone token flutter

依赖
sqflite: ^2.3.2 #本地数据储存
获取数据库路径
// 定义一个异步函数来获取数据库路径
Future<String> getDatabasePath(String dbName) async {
  // 获取应用的文档目录
  final directory = await getApplicationDocumentsDirectory();
  // 拼接路径
  final path = join(directory.path, dbName);
  return path;
}
实体
class TbUserData {
 
 late String phone;
 late  String name;
 late String portraits;
 late String token;

  // 构造函数
  TbUserData({required this.phone, required this.name, required this.portraits, required this.token});

  // 将MyData对象转换为Map
  Map<String, dynamic> toMap() {
    return {
      'phone': phone,
      'name': name,
      'portraits': portraits,
      'token': token,
    };
  }

  TbUserData.fromJson(Map<String, dynamic> json) {

    phone = json['phone'];
    name = json['name'];
    portraits = json['portraits'];
    token = json['token'];
  }
}
}
创建
Future<Database> createDatabase() async {
  // 获取数据库路径
  final path = await getDatabasePath('tomato_kid.db');
  print("================================================================$path");
  // 打开数据库
  final database = openDatabase(
    path,
    version: 1,
    // 当数据库第一次被创建时,执行创建表的操作
    onCreate: (db, version) {
      return db.execute(
        "CREATE TABLE tb_users_login(id INTEGER PRIMARY KEY,phone TEXT,name TEXT, portraits TEXT, token TEXT)",
      );
    },
  );
  return database;
}
添加
Future<void> insertData(TbUserData data, Database db) async {
  try {
    // 查询数据库中是否已存在相同电话号码的记录
    List<Map<String, dynamic>> existingRecords = await db.query(
      'tb_users_login',
      where: 'phone = ?',
      whereArgs: [data.phone],
    );

    if (existingRecords.isNotEmpty) {
      // 如果存在相同电话号码的记录,则替换旧记录
      await db.update(
        'tb_users_login',
        data.toMap(),
        where: 'phone = ?',
        whereArgs: [data.phone],
      );
    } else {
      // 如果不存在相同电话号码的记录,则插入新记录
      await db.insert(
        'tb_users_login',
        data.toMap(),
        conflictAlgorithm: ConflictAlgorithm.replace,
      );
    }
  } catch (e) {
    // 打印错误信息
    print('Failed to insert data: $e');
  }
}
删除
Future<void> deleteData(String phone, Database db) async {
  // 调用delete方法删除指定id的数据
  await db.delete(
    'tb_users_login',
    // where子句用于指定要删除的数据
    where: "phone = ?",
    whereArgs: [phone],
  );
}
查看
 Future<List<Map<String, dynamic>>> queryAll(Database db) async {
  // 查询所有数据
  return await db.query('tb_users_login');
}
Map转换为MyData对象
Future<List<TbUserData>> getMyDataFromDB(Database db) async {
  // 获取所有数据
  final List<Map<String, dynamic>> maps = await queryAll(db);

  // 将Map转换为MyData对象
  return List.generate(maps.length, (i) {
    return TbUserData(
        phone: maps[i]['phone'],
        name: maps[i]['name'],
        portraits: maps[i]['portraits'],
        token: maps[i]['token']);
  });
}

 

标签:储存,name,portraits,await,db,sqflite,phone,token,flutter
From: https://www.cnblogs.com/xbinbin/p/18085859

相关文章

  • flutter中Map<String, dynamic>与Map<String, String>的区别
    在Flutter中,Map<String,dynamic>和Map<String,String>都是Map类型的数据结构,但它们之间有一些重要的区别: 1.Map<String,dynamic>:这种Map的值可以是任何类型,包括基本数据类型(如int,double,String等),List,Map以及自定义对象。使用dynamic类型会导致更灵活的数据处理,但在编码时......
  • flutter 嵌套web网页
    添加依赖flutter_inappwebview:^6.0.0#嵌套网页代码classPictureWebUrlextendsStatefulWidget{finalStringweburl;PictureWebUrl({Key?key,requiredthis.weburl}):super(key:key);@overrideState<PictureWebUrl>createState()=>_PictureW......
  • MySQL 视图、事件、函数、储存过程
    正文视图https://blog.csdn.net/moxigandashu/article/details/63254901事件(类似定时任务)https://zhuanlan.zhihu.com/p/450454992函数https://www.cnblogs.com/zhangminghui/p/4113160.html储存过程(处理复杂逻辑)https://blog.csdn.net/whf_a/article/details/114871866......
  • Flutter开发多端天气预报App:一场奇妙的编程之旅
    在这个信息爆炸的时代,我们渴望获取最新的天气信息,以便更好地规划我们的生活。而作为程序员的我们,又怎能错过用技术手段打造一款个性化、便捷的天气预报App呢?在本篇博客中,我将带你踏上一场奇妙的编程之旅,使用Flutter框架开发一款支持多端的天气预报App。前言作为一名小白,你......
  • Flutter安装
    文档地址:https://docs.flutter.dev/get-started/install/windows/mobile?tab=download#later-starthttps://flutter.cn/community/china下载地址:https://docs.flutter.dev/release/archive?tab=windowshttps://flutter.cn/docs/release/archive?tab=windows1.下载Flutter......
  • 电子级氢氟酸储存好物:特氟龙试剂瓶,透明可视进口原料PFA取样瓶清洗后金属杂质小于0.01p
    PFA试剂瓶作为实验室中常备器皿耗材之一,主要用来盛放、储存和运输样品,根据使用条件不同,也可叫特氟龙取样瓶、样品瓶、储样瓶、广口瓶、进样瓶等。近年来随着新兴行业的快速发展,广泛应用于半导体、新材料、多晶硅、硅材、微电子等行业。根据瓶口口径不同,可分为广口瓶和窄口瓶,......
  • 整数和浮点数在内存中储存的形式
    整数整数的二进制表示法有三种,即原码、反码、补码。三种表示方式均有符号位和数值位符号位位于数值位最高位的那一位,分别用0和1表示,0表示正数,1表示负数。数值位,除最高位的那一位外其他都是数值位。正整数的原码、反码和补码都相同,负整数不同,负整数的反码等于原码二进制......
  • Android开发笔记[12]-使用AAR方式嵌入flutter页面
    摘要使用AAR方式嵌入flutter页面.关键信息AndroidStudio:Iguana|2023.2.1Gradle:distributionUrl=https://services.gradle.org/distributions/gradle-8.4-bin.zipjvmTarget='1.8'minSdk21targetSdk34compileSdk34开发语言:Kotlin,JavandkVersion='21.1.635......
  • 整数和浮点数在内存中的储存(包含原反补码的讲解)
    在c语言中,我们常常使用整数和浮点数,那么你知道整数和浮点数在内存中是如何储存的吗?下面大家一起学习。文章目录一.整数在内存中的储存二.了解大小端字节序三.浮点数在内存中的储存一、整数在内存中的储存整数的二进制表示方法有三种:原码、反码、补码。有符号整数......
  • Flutter中JSON、List和Map之间的相互转换
    JSON转换为Map要将JSON字符串转换为Dart的Map对象,您可以使用Flutter的内置json库。这个库提供了jsonDecode()函数,可以将JSON字符串解析为Dart的Map对象import'dart:convert';StringjsonString='{"name":"John","age":30}';Map<String,dynamic>us......