flutter realm简易教程

Realm 含义:
Realm 是一个可以直接在手机、平板电脑或可穿戴设备上运行的数据库。
Realm 基本类型:
int:整数
double:浮点数
bool:布尔值
String:字符串
DateTime:日期和时间
Uint8List:字节数组
Realm集合:
一个realm集合包含零个或者多个Realm支持的数据类型的实例。在Realm集合中,集合中的对象均为同一类型。
Realm具有以下类型的集合:
RealmList
RealmSet(不能直接用于Flutter,使用RealmList代替)
RealmRestults(flutter 使用realm.query<>()函数代替)
realm入门:
导入realm 相关包:
使用 flutter 命令方式:

flutter pub add realm

flutter pub add realm-generate

在项目的 pubspec.yaml 中,添加以下代码:

dependencies:

realm:^20.0.1

使用

flutter pub get

命令下载 realm 包。
下载完成 realm 相关包后,创建一个user.dart

import 'package: realm/realm.dart'// 导入 realm 包

part ‘app.realm.dart’ //声明 part 文件

() //定义一个名为 _User 的数据模型类

class _User {

()


late ObjectId id;

late String name;

late int age;

}

使用realm_generator包,使用 数据模型类_User 生成 RrealmObject 类 User,使用命令为:

dart run realm generate

realm 的用法:

打开 Realm:

var config = Configuration.local([User.schema]);//创建配置对象User

var realm = Realm(config);//打开Real

m

关闭 Realm:

realm.close();

添加 User 数据:

var user = User("user1",22);

realm.write((){

realm.add(user);

});

查询并修改 User 数据:

var users = realm.all<User>();

User myUser = User[0];// 使用索引的方式

print("My name is ${myUser.name} and age is ${myUser.age}");


users = realm.all<User>().query("name = 'user1'"); //通过query 方法进行查询

realm.write((){

myUser.name("user2"),

myUser.age("23"),

});

删除 User 数据:

var users = realm.all<User>();

User myUser = User[0];

realm.write((){

realm.delete(myUser),

})

realm 完整案例:

添加 realm 包到flutter应用:

flutter pub add realm

创建一个commodity.dart文件。

import 'package: realm/realm.dart'// 导入 realm 包

part ‘commodity.realm.dart’ //声明 part 文件

() //定义一个名为 _Commodity 的数据模型类

class _Commodity{

()

late ObjectId id;

late String name;

late int price;

}

添加 realm_genertor 包到flutter 应用:

flutter pub run realm_genertor

添加完成 realm_genertor 包

 dart run realm generate

编写commoditiy_page.dart 文件

import 'package:flutter/material.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:realm/realm.dart';
import 'package:rivierpod_test/realm/commodity.dart';

final realmProvider = Provider<Realm>((ref) {
  final config = Configuration.local([Commodity.schema]);
  return Realm(config);
});

class CommodityPage extends HookConsumerWidget {
  const CommodityPage({super.key});

  
  Widget build(BuildContext context, WidgetRef ref) {
    final realm = ref.watch(realmProvider);
    final commodities = useState<List<Commodity>>(realm.all<Commodity>().toList());

    // 增
    void addCommodity() {
      final commodity = Commodity(ObjectId(), 'New Commodity', 100);
      realm.write(() => realm.add(commodity));
      commodities.value = realm.all<Commodity>().toList();
    }

    // 改
    void updateCommodity(Commodity commodity, String newName, int newPrice) {
      realm.write(() {
        commodity.name = newName;
        commodity.price = newPrice;
      });
      commodities.value = realm.all<Commodity>().toList();
    }

    // 删
    void deleteCommodity(Commodity commodity) {
      realm.write(() => realm.delete(commodity));
      commodities.value = realm.all<Commodity>().toList();
    }

    return Scaffold(
      appBar: AppBar(title: const Text('realm example')),
      body: Column(
        children: [
          Expanded(
            child: ListView.builder(
              itemCount: commodities.value.length,
              itemBuilder: (context, index) {
                final commodity = commodities.value[index];
                return ListTile(
                  title: Text(commodity.name),
                  subtitle: Text('\$${commodity.price}'),
                  trailing: Row(
                    mainAxisSize: MainAxisSize.min,
                    children: [
                      // 编辑按钮
                      IconButton(
                        icon: const Icon(Icons.edit),
                        onPressed: () {
                          showDialog(
                            context: context,
                            builder: (context) {
                              final nameController = TextEditingController(text: commodity.name);
                              final priceController = TextEditingController(text: commodity.price.toString());
                              return SimpleDialog(
                                title: const Text('Edit Commodity'),
                                children: [
                                  TextField(controller: nameController, decoration: const InputDecoration(labelText: 'Name')),
                                  TextField(controller: priceController, decoration: const InputDecoration(labelText: 'Price'), keyboardType: TextInputType.number),
                                  TextButton(
                                    onPressed: () {
                                      final newName = nameController.text;
                                      final newPrice = int.tryParse(priceController.text) ?? commodity.price;
                                      updateCommodity(commodity, newName, newPrice);
                                      Navigator.pop(context);
                                    },
                                    child: const Text('Save'),
                                  ),
                                ],
                              );
                            },
                          );
                        },
                      ),
                      // 删除按钮
                      IconButton(
                        icon: const Icon(Icons.delete),
                        onPressed: () => deleteCommodity(commodity),
                      ),
                    ],
                  ),
                );
              },
            ),
          ),
          Padding(
            padding: const EdgeInsets.all(8.0),
            child: ElevatedButton(
              onPressed: addCommodity,
              child: const Text('Add Commodity'),
            ),
          ),
        ],
      ),
    );
  }
}

结果如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

全能批量打印是一款综合性的文件批量打印软件,可打印AutoCAD、Office Word/Excel/PPT、Wps Word/Excel/PPT、PDF、XPS、图片、TXT文件,程序设置简单、操作便捷,方便打印人员快速打印文件。 Windows操作平台支持:WinXP~Windows10版本(32位、64位)及对应的服务器系统。 AutoCAD版本支持:2006及以上各版本(含通用版、机械版、建筑版等)。图框可为块(包括外部参照)、矩形多段线、矩形直线段、无图框。程序能自动快速准确识别各类型图框,并能自动根据图框尺寸选择不同纸张图幅打印(如A2,A3,A2加长等),以满足各种打印人员的需要。程序能自动识别图框旋角度,自动设置打印比例,并可实现按图框配置(范围内文字、图框属性)顺序打印,在AutoCAD内外均可实现批量打印。 文档(Word、WPS)文件打印支持Microsoft Office及WPS各版本文件,根据需要设置打印页码范围,选择打印机后可直接进行打印。 表格(Excel、ET)文件打印支持Microsoft Office及WPS各版本文件,可根据需要选择需要打印的Sheet以及页码范围。 文稿(PPT、DPS)文件打印支持Microsoft Office及WPS各版本文件,根据需要设置打印页码范围,选择打印机后可直接进行打印PDF文件可自动识别标准纸张, 根据需要设置纸张和打印页码范围,选择打印机后可直接进行打印,无需安装PDF阅读器。 图片、TXT文件根据需要设置纸张,选择打印机后可直接进行打印。 【软件特点】 AutoCAD打印 1、打印纸张支持加长图框; 2、智能识别无图框文件; 3、可自动识别标准宽度图框打印到不同纸张; 4、可调整图框打印比例及图框打印边距设置适应纸张可打印区域; 5、支持多种图框样式,满足不同需求,可通过选择不同的识别模式适应任意图框大小的识别; www点setetn点 com 6、支持Adobe PDF直接保存至文件; 7、支持图框按配置进行排序(可进行多文件全部排序)。 文档、表格、文稿、PDF、XPS、图片、TXT文件打印 1、支持打印机单双面、黑白彩色设置; 2、支持Adobe PDF直接保存至文件; 3、表格文件打印支持多种打印范围(当前表、所有表、所有未隐藏表、有颜色表名工作表、依据工作表名过滤); 4、PDF、XPS打印支持自动识别标准纸张。 联系QQ920832078
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值