首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Flutter SQLite数据库,在尝试将数据库中的所有行显示为列表视图时,调用了getter 'length‘on null错误

Flutter SQLite数据库是一种轻量级的嵌入式数据库,用于在Flutter应用程序中存储和管理数据。在尝试将数据库中的所有行显示为列表视图时,调用了getter 'length' on null错误是由于数据库查询返回了空值,导致无法获取行数。

解决这个问题的方法是在调用getter 'length'之前,先检查查询结果是否为空。可以使用条件语句来判断查询结果是否为null,如果为空,则可以显示一个空列表或者给出相应的提示信息。

以下是一个示例代码,演示如何解决这个问题:

代码语言:txt
复制
// 导入必要的库
import 'package:flutter/material.dart';
import 'package:sqflite/sqflite.dart';
import 'package:path/path.dart';

// 创建数据库帮助类
class DatabaseHelper {
  static final DatabaseHelper _instance = 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 {
    String databasesPath = await getDatabasesPath();
    String path = join(databasesPath, 'mydatabase.db');

    var db = await openDatabase(path, version: 1, onCreate: _onCreate);
    return db;
  }

  // 创建表
  void _onCreate(Database db, int version) async {
    await db.execute(
        'CREATE TABLE IF NOT EXISTS mytable (id INTEGER PRIMARY KEY, name TEXT)');
  }

  // 查询所有行
  Future<List<Map<String, dynamic>>?> getAllRows() async {
    var dbClient = await db;
    var result = await dbClient?.query('mytable');
    return result;
  }
}

// 创建列表视图
class MyListView extends StatefulWidget {
  @override
  _MyListViewState createState() => _MyListViewState();
}

class _MyListViewState extends State<MyListView> {
  List<Map<String, dynamic>>? rows = [];

  @override
  void initState() {
    super.initState();
    fetchRows();
  }

  // 获取数据库中的所有行
  fetchRows() async {
    var dbHelper = DatabaseHelper();
    var result = await dbHelper.getAllRows();
    setState(() {
      rows = result;
    });
  }

  @override
  Widget build(BuildContext context) {
    if (rows == null) {
      return Center(
        child: CircularProgressIndicator(),
      );
    } else if (rows!.isEmpty) {
      return Center(
        child: Text('数据库中没有数据'),
      );
    } else {
      return ListView.builder(
        itemCount: rows!.length,
        itemBuilder: (context, index) {
          return ListTile(
            title: Text(rows![index]['name']),
          );
        },
      );
    }
  }
}

// 在页面中使用列表视图
class MyPage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('数据库列表'),
      ),
      body: MyListView(),
    );
  }
}

// 运行页面
void main() {
  runApp(MaterialApp(
    home: MyPage(),
  ));
}

在上述示例代码中,我们创建了一个DatabaseHelper类来管理数据库操作,包括初始化数据库、创建表和查询所有行。在MyListView类中,我们在initState方法中调用fetchRows方法来获取数据库中的所有行,并将结果存储在rows变量中。在build方法中,我们根据rows的值来显示不同的内容,如果rows为null,则显示一个进度指示器;如果rows为空,则显示一个提示信息;如果rows不为空,则使用ListView.builder来显示所有行的列表视图。

这样,当尝试将数据库中的所有行显示为列表视图时,就不会再出现调用getter 'length' on null错误了。

推荐的腾讯云相关产品:腾讯云数据库SQL Server版、腾讯云数据库MySQL版、腾讯云数据库PostgreSQL版等。您可以访问腾讯云官网了解更多关于这些产品的详细信息和使用指南。

腾讯云数据库SQL Server版:https://cloud.tencent.com/product/cdb_sqlserver

腾讯云数据库MySQL版:https://cloud.tencent.com/product/cdb_mysql

腾讯云数据库PostgreSQL版:https://cloud.tencent.com/product/cdb_postgresql

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Sqlite3详细解读

1、选择所有列 例如,下面语句显示testtable表中所有数据: SELECT *FROM testtable 2、选择部分列并指定它们显示次序 查询结果集合数据排列顺序与选择列表中所指定列名排列顺序相同...testtable 4、删除重复 SELECT语句中使用ALL或DISTINCT选项来显示符合条件所有或删除其中重复数据,默认为ALL。...使用DISTINCT选项,对于所有重复数据行在SELECT返回结果集合只保留一。...FROM子句同时指定多个表或视图,如果选择列表存在同名列,这时应使用对象名限定这些列所属表或视图。 三、WHERE子句 WHERE子句设置查询条件,过滤掉不需要数据。...如果声明表一列设置 INTEGER PRIMARY KEY,则具有: 1.每当你该列上插入一NULLNULL自动被转换为一个比该列中最大值大1一个整数; 2.如果表是空,将会是1;

3.6K10

c++ 11 是如何简化你数据库访问接口

没有 c++ 11 之前,苦逼程序员对于 sql 操作输入输出,只好一敲代码,例如在调用数据库接口前设置绑定参数;调用成功后,循环遍历查询记录。...但它有时也需要更新符合条件记录,而这会带来另一坨不定数量输入参数,不过好在二者都是输入参数,可以合二一使用一个维度可变模板参数,依次更新参数与条件参数罗列 qtl 接口提供参数列表即可:...回函数参数列表必需与 select 选择数据库表列相匹配。...,并相应增加了 lambda 表达式参数列表,当数量达到一个阈值(亲测8),VS2013 编译器报错退出: e:\code\qtl\include\qtl\apply_tuple.h(17):...因为 qtl 检测到底层数据库错误时,是通过抛出异常方式来向上层报告,所以所有用例都包含在 try_catch 结构

1.6K10

FlutterUnit 桌面分支合并,一套代码 - 五端通行

很多三方插件也支持了桌面版,越来越多朋友开始向 Flutter 桌面端尝试,感觉也是时候 桌面端 和 移动端 代码进行合并。顺便记录一下其中需要注意要点。...image.png 如下代码也放在 DbOpenHelper 程序开始是调用 setupDatabase 方法, windows 设置 sqlite3.dll 加载文件夹: ---->[DbOpenHelper...其中 options 参数可指定数据库版本、以及开启、更新、创建。...另外这样也更容易分工,现实可以让桌面端 UI 实现交给不同的人实现,毕竟要支持桌面端,就注定有人要多干活。 对于一些差别不太大界面,可以构件进行适配。...中间内容适配 主页面可以使用 SliverGrid 构建滑动网格,一排 2 个,效果如下: image.png image.png 其中要注意一点是: CustomScrollView 滑动体

1.5K20

Flutter完整开发实战详解(二、 快速开发实战篇)

头部 ///列表数量大于0,因为头部和底部加载更多选项,需要对列表数据总数+2 return (control.dataList.length > 0) ?...矢量图标库是引入 ttf 字体库文件实现, Flutter 通过 Icon 控件,加载对应 IconData 显示即可。  ...大家都知道 Flutter ,是通过实现 State 与 setState 来渲染和改变 StatefulWidget 。如果使用了flutter_redux 会有怎样效果?  ...4、数据库 GSYGithubAppFlutter 数据库使用是 sqflite 封装,其实就是 sqlite 语法使用而已,有兴趣可以看看完整代码 DemoDb.dart 。...如果结合网络请求,通过闭包实现,需要数据库先返回数据库,然后通过 next 方法网络请求方法返回,最后外部可以通过调用next方法再执行网络请求。

4.9K30

Flutter完整开发实战详解(二、 快速开发实战篇)

头部 ///列表数量大于0,因为头部和底部加载更多选项,需要对列表数据总数+2 return (control.dataList.length > 0) ?...矢量图标库是引入 ttf 字体库文件实现, Flutter 通过 Icon 控件,加载对应 IconData 显示即可。  ...大家都知道 Flutter ,是通过实现 State 与 setState 来渲染和改变 StatefulWidget 。如果使用了flutter_redux 会有怎样效果?  ...4、数据库 GSYGithubAppFlutter 数据库使用是 sqflite 封装,其实就是 sqlite 语法使用而已,有兴趣可以看看完整代码 DemoDb.dart 。...如果结合网络请求,通过闭包实现,需要数据库先返回数据库,然后通过 next 方法网络请求方法返回,最后外部可以通过调用next方法再执行网络请求。

5.1K10

【测试SQLite】测试SQLite支持SQL语句分类

,不会修改任何,并且数据库保持不变 UPDATE orders SET user_id = 999 WHERE id = 1; -- 内联更新 -- 订单表所有订单总额小于100订单总额增加...此功能默认情况下在 SQLite 中被省略。只有构建 SQLite 使用了 SQLITE_SOUNDEX 编译选项,它才可用。...如果指定了架构名称,则视图 指定数据库创建。 VIEW 上同时指定 schema-name 和 TEMP 关键字是错误,除非 schema-name “temp”。...如果未指定架构名称,并且 TEMP 关键字不存在, VIEW 是数据库创建。 不能删除、插入或更新视图视图是只读 SQLite 。...); -- 查看数据库所有列表 PRAGMA table_info; -- 检查数据库是否可写状态 PRAGMA writable_schema; -- 查看数据库所有索引列表 PRAGMA

25000

Flutter技术与实战(5)

需要注意是,原生代码处理完毕后处理结果返回给 Flutter ,我们 Dart、Android 和 iOS 分别用了三种数据类型:Android 端返回是 java.lang.Integer...需要注意是,APNs 推送消息是 ApplicationDelegate ,所以我们需要在注册插件插件提供同名函数,让极光 SDK 把推送消息转发到插件函数。...* 新闻列表,可以元素被点击通过回函数告诉父 Widget 元素索引; * 而新闻详情,则用于展示新闻列表中被点击元素索引。...:使用了 saveLayer Widget 会自动显示棋盘格式,并随着页面刷新而闪烁。...比如在视图构建 build 方法中使用了一些复杂运算,或是主 Isolate 中进行了同步 I/O 操作。这些问题,都会明显增加 CPU 处理时间,拖慢应用响应速度。

15.6K30

干货 | 携程火车票Flutter最佳实践

RN 能够满足我们绝大部分业务,并且热更、版本控制都很灵活。但是复杂页面上,特别是列表渲染上,还是存在一定问题,促使我们去尝试一些新解决方案。...2)控制刷新范围与次数 尽量避免滑动监听触发setStat()刷新视图。 ? 如上图所示,需要滑动过程显示、隐藏标题栏,并且是一个渐变过程,遇到这种情况,一定要尽量控制刷新范围和频次。...如上图所示列表 Item 存在大量倒计时。一定要控制刷新倒计时只影响控件本身,并且只有可视区域视图刷新,不可见情况下及时销毁计时器。一直刷整个列表,性能开销是恐怖。...,一些计算速度比较低手机,可能获取到屏幕宽度0,这样就会导致你组件宽度负数,报出错误异常。...如下所示: ///母房型名称, 当前我们Text最大显示,当大于两是,出现...

2.1K30

Django 3.1 官网学习路线

处理请求,Django 从 urlpatterns 第一个模式开始,沿着列表向下移动,所请求 URL 与每个模式进行比较,直到找到一个匹配。...但是,其中一些应用程序至少使用了一个数据库表,因此使用表之前,我们需要在数据库创建表。...我们很快看到,它不仅用于数据库架构,而且用于验证。 字段还可以有各种可选参数;本例,我们投票默认值设置 0。 最后,请注意使用外键定义了关系。...#默认设置文件用了对时区支持,因此 # Django期望pub_date使用tzinfo日期时间。...例如,一个博客应用程序,您可能有以下视图: 博客首页-显示最近几个条目。 条目“详细信息”页面——一个条目的永久链接页面。 基于年份归档页面——显示给定年份所有月份和条目。

8.1K10

HarmonyOS学习路之开发篇—数据管理(对象关系映射数据库

谓词 数据库中用来代表数据实体性质、特征或者数据实体之间关系词项,主要用来定义数据库操作条件。对象关系映射数据库SQLite数据库谓词封装成了接口方法供开发者调用。...它是SQLite数据库基础上提供一个抽象层。 SQLite数据库 一款轻型数据库,是遵守ACID关系型数据库管理系统。...说明 对象关系映射数据库提供接口ohos.data.orm包,使用该包接口,要求配置文件config.json“app > bundleName”字段值,不能包含大写字母。...,数据库文件存储由上下文指定目录里。...删除数据与更新数据方法类似,只是不需要更新对象值。 例如,更新“user”表age“29”,需要先查找“user”表对应数据,得到一个User列表

39920

玩转SQLite-11:C语言高效API之sqlite3_prepare系列函数

SQLite是一个跨平台轻量级数据库,支持C/C++开发,可用于嵌入式,关于C/C++使用SQLite简单实例,之前这篇文章,已经介绍过一种简单使用方式。...2 函数介绍 2.1 sqlite3错误介绍各个函数之前,先来看一个这些函错误码有哪些 #define SQLITE_OK 0 /* 成功 */ /* 错误码 */ #...形参5:是用于BLOB和字符串绑定后 析构函数,用于sqlite处理完blob或字符串之后处理它,一般可以设置NULL。...返回值:见前面的sqlite3错误码 代码示例:假设表字段结构:person(name,age,sex),数据库指针 pdb。...,返回数据一般很多,并且数据是按返回,且每次只返回一,其返回值 SQLITE_ROW,所以需要重复调用sqlite3_step函数,直到sqlite3_step返回 SQLITE_DONE.

1.4K30

学习SQLite之路(四)

SQLite ,除了重命名表和在已有的表添加列,ALTER TABLE 命令不支持其他操作(在其他数据库可以改变表数据类型,删除表列) (1)基本语法: 用来重命名已有的表 ALTER...SQLite 视图(view):是通过相关名称存储在数据库一个 SQLite 语句。 视图(View)实际上是一个以预定义 SQLite 查询形式存在组合。...视图(View)可以包含一个表所有或从一个或多个表选定视图(View)可以从一个或多个表创建,这取决于要创建视图 SQLite 查询。...但是可以视图上创建一个触发器,当尝试 DELETE、INSERT 或 UPDATE 视图触发,需要做动作触发器内容定义。...不过在数据库关闭或发生错误时,事务处理也会回滚。

1.9K80

如何在Xcode下预览含有Core Data元素SwiftUI视图

预览模拟器不支持控制台输出显示、不支持断点调试,即使动态预览模式下(支持交互预览模式),我们也不会在Xcode获得任何代码控制台输出内容。因此预览发生问题,用于排查故障手段很有限。...可以预览但是有错误提示 有时含有Core Data元素视图预览时会出现如下错误提示: image-20210827191644251 预览切换到动态模式通常就可以正常显示。...不过我们CoreDataStack创建基于内存持久化存储仍然是Sqlite类型。是数据文件保存在/dev/nullSqlite类型。...此种内存数据库除了不能持久化外同标准Sqlite数据库功能完全一样。内存Sqlite数据库执行效率稍高于正常Sqlite数据库,并没有巨大差别。...三个数据库文件(包括wal和shm)一并拖入项目中,创建一个使用Bundle数据库文件NSPersistentContainer,方便我们预览使用了复杂数据模型视图

5.1K10

Facebook重写iOS版Messenger,启动速度快2倍,核心代码减少84%

比如说项目开始,我们有 40 多个不同联系人列表页面。...这样一来我们就只需要几类基本视图即可,并且这些视图可以由不同 SQLite 表驱动。 今天 Messenger ,联系人列表是单个动态模板。我们可以更改屏幕外观,而无需其他任何代码。...单个联系人列表页面可以扩展以支持大量功能,例如联系人管理、组创建、用户搜索、消息安全性、故事安全性、共享、故事共享等等。 iOS 世界,这是一个单视图控制器,具有适当灵活性来支持所有这些需求。...所有的缓存、过滤、事务和查询都在 SQLite 完成。UI 只会反映数据库表。 这样就可以让逻辑保持简单和高效,并限制了其对应用其他部分影响。但是我们走得更远。...我们 SQLite 扩展了存储过程功能,使 Messenger 功能开发人员可以编写可移植、面向数据库业务逻辑,最后,我们构建了一个平台(MSYS)来编排对数据库所有访问,包括队列更改、延期或可重复执行任务

80710

Flutter 实战】大量复杂数据持久化

,如果本地没有保存数据,则需要通过网络获取数据,返回数据之前,用户看到是空白页面,而如果本地保存了部分新闻,则显示这部分数据,等待最新数据返回刷新即可,对用户体验来说,明显第二种体验更佳。...添加依赖 SQLite 并不是 Flutter 系统自带,而是一个第三方插件,项目的 pubspec.yaml 文件添加依赖: dependencies: sqflite: ^1.3.1...path_provider: ^1.6.11 执行命令: flutter pub get 使用 SQLite 创建数据库时候需要本地路径做为参数,所以添加path_provider 插件获取本地路径...result.map((e) { return User.fromJson(e); }).toList():[]; } 查询数据显示表格上: class DatabaseDemo...SQLite 创建成功后会在本地创建一个 db_name.db 文件,文件目录就是初始化数据库设置目录。

2.1K30

android学习笔记----ListView和各种适配器简介

重复使用它们,ListView 请求列表特定位置视图,同时传入之前用过视图。...并且知道如何每项呈现为视图,与此同时 ListView 负责屏幕上显示这些视图,检测用户触摸手势,并跟踪用户是否位于整个列表。  ...列表每个条目对应于列表。映射包含每一数据,并应包括“from“中指定所有条目。 resource:定义此列表视图视图布局资源标识符。...布局文件至少应包括“to”定义命名视图 from:添加到与每个项关联Map列名列表。 to:应该在“from”参数显示视图。这些都应该是TextView。...数据库数据显示到ListView 这里给出主要代码,详细代码见Demo源码,地址文章开头。

2.1K10

Flutter 数据持久化存储之Hive库

这种方式适合存储结构化数据,可以使用JSON格式或者其他格式进行数据读写。 SQLite数据库: 可以使用sqflite插件Flutter应用中使用SQLite数据库。...当你定义自己模型类,可以使用 @HiveType() 注解来标记这个类,以便 Hive 可以识别并处理这个类。 所有的 typeId 允许 0 到 223 之间,不可以重复。...下面我们通过Terminal输入一代码,生成对应TypeAdapter对象类,代码如下所示: flutter packages pub run build_runner build 输入后回车,...③ CURD   进行CURD,我们代码写在GetxController,提供相关函数进行操作,下面我们修改一下HiveController代码: import 'package:flutter...如下图所示:   列表Item我们除了显示用户名称和年龄之外还有两个功能按钮,分别用于修改和删除,如下图所示:   针对于删除很简单之后调用控制器里面写好函数就可以了,删除之后列表会自动刷新

9200

Android应用架构

这段时间,我们所构建Android应用架构和技术也不断地演变。本文向您阐述我们经验,错误以及架构变化背后原因。...按照同样方式,CacheProvider 所包含方法负责从SharedPreferences和SQLite数据库检索和存储数据。同样使用回方式,结果传回Activity。...想象一个简单且常见场景,应用需要加载一个博客文章列表,然后缓存这些条目到SQLite数据库,最后将他们展示到ListView等列表视图上。...) 等待CacheProvider结果,然后这些文章展示到ListView等列表视图上 分别处理APIProvider和CacheProvider回潜在异常。...比如DataManager退出登录方法可以发送一个事件,订阅这个事件多个Activity接收到该事件后就能够更改它们UI视图,从而显示一个登出状态。 为什么这种架构更好?

1.2K70

Android应用架构分析(转)

这段时间,我们所构建Android应用架构和技术也不断地演变。本文向您阐述我们经验,错误以及架构变化背后原因。...按照同样方式,CacheProvider 所包含方法负责从SharedPreferences和SQLite数据库检索和存储数据。同样使用回方式,结果传回Activity。...想象一个简单且常见场景,应用需要加载一个博客文章列表,然后缓存这些条目到SQLite数据库,最后将他们展示到ListView等列表视图上。...方法(回) 等待CacheProvider结果,然后这些文章展示到ListView等列表视图上 分别处理APIProvider和CacheProvider回潜在异常。...比如DataManager退出登录方法可以发送一个事件,订阅这个事件多个Activity接收到该事件后就能够更改它们UI视图,从而显示一个登出状态。 为什么这种架构更好?

57020

使用iOS原生sqlite3框架对sqlite数据库进行操作

iOS原生开发框架可以对sqlite数据库进行很好支持,这个框架采用C风格且通过指针移动进行数据操作,使用起来有些不便,我们可以对一些数据库常用操作进行一些面向对象封装。...; sqlite3_open(dataBaePath, &sqlite) sqlite3_open方法返回一个int值,实际上,使用libsqlite3框架大多方法都会返回一个int值,这个int...(sql, sqlStr, NULLNULL, &err); sqlite3_exec方法第一个参数成功执行了打开数据库操作sqlite3指针,第二个参数要执行sql语句,最后一个参数错误信息字符串...sqlite3_column_XXX()是取每一列数据,根据数据类型不同,sqlite3_column_XXX()有一系列对应方法,这个方法第一个参数是stmt指针,第二个参数列序号。...textDataBase数据库MySQL表里所有age列大于18数据,并按照age从小到大进行排序,数据结果在回dataArray

2.1K10
领券