Flutter数据库与偏好设置插件sqflite_preferences的使用

Flutter数据库与偏好设置插件sqflite_preferences的使用

sqflite_preferences 是一个通过 sqflite 库来模拟 sharedpreferences 行为的方法。它提供了快速保存和检索数据的能力,并且不需要操作成为异步操作。

使用

如何使用

首先导入库:

// 导入库
import 'package:sqflite_preferences/sqflite_preferences.dart';
// 引用管理数据库的单例类
var dbHelper = DatabaseHelper.instance;

初始化数据库

initDatabase() async {
  await dbHelper.initDatabase('phoneNumber', 'INTEGER');
}

设置布尔值

setBoolValue() async {
  await dbHelper.setBool('flag', true);
}

获取布尔值

var boolValue;
getBoolValue() async {
  boolValue = await dbHelper.getBool('flag');
}

设置整数值

setIntValue() async {
  await dbHelper.setInt('number', 1);
}

获取整数值

var intValue;
getIntValue() async {
  intValue = await dbHelper.getInt('number');
}

设置浮点数值

setRealValue() async {
  await dbHelper.setReal('real', 1.555);
}

获取浮点数值

var realValue;
getRealValue() async {
  realValue = await dbHelper.getReal('real');
}

设置Blob值

dynamic response = await get(url);
dynamic bytesFromPic = response.image.bodyBytes;
setBlobValue() async {
  await dbHelper.setBlob('pic', bytesFromPic);
}

获取Blob值

var blobValue;
getBlobValue() async {
  blobValue = await dbHelper.getBlob('pic');
}
// 示例:Image.memory(blobValue),

设置字符串值

setStringValue() async {
  await dbHelper.setString('name', 'someone name');
}

获取字符串值

var stringValue;
getStringValue() async {
  stringValue = await dbHelper.getString('name');
}

获取行数

rowCount() async {
  await dbHelper.queryRowCount('name');
}

删除保存的数据

deleteValue() async {
  await dbHelper.delete('name');
}

示例

以下是一个完整的示例代码,展示了如何使用 sqflite_preferences 插件来存储和获取数据。

import 'package:flutter/material.dart';
import 'package:sqflite_preferences/sqflite_preferences.dart';

var dbHelper = DatabaseHelper.instance;
var value;

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
        visualDensity: VisualDensity.adaptivePlatformDensity,
      ),
      home: MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({required this.title}) : super(key: null);

  final String title;

  [@override](/user/override)
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  var textValue;

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Container(
              padding: EdgeInsets.all(50),
              child: TextField(
                onChanged: (value) async {
                  textValue = value;
                  await dbHelper.setString('value', textValue);
                },
              ),
            ),
            MaterialButton(
              child: Text("Get Value"),
              onPressed: () async {
                value = await dbHelper.getString('value');
              },
            ),
            MaterialButton(
              child: Text("Go to next page"),
              onPressed: () {
                Navigator.of(context).push(
                  MaterialPageRoute(
                      fullscreenDialog: true,
                      builder: (BuildContext ctx) {
                        return Page2();
                      }),
                );
              },
            ),
          ],
        ),
      ),
    );
  }
}

class Page2 extends StatefulWidget {
  [@override](/user/override)
  _Page2State createState() => _Page2State();
}

class _Page2State extends State<Page2> {
  [@override](/user/override)
  Widget build(BuildContext context) {
    var width = MediaQuery.of(context).size.width;
    return Scaffold(
      appBar: AppBar(
          // title: Text(widget.title),
          ),
      body: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: [
          Center(
            child: Container(
              padding: EdgeInsets.all(30),
              width: width,
              child: FittedBox(
                child: Text(
                  "$value",
                  style: TextStyle(color: Colors.black, fontSize: 30),
                ),
              ),
            ),
          ),
        ],
      ),
    );
  }
}

更多关于Flutter数据库与偏好设置插件sqflite_preferences的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter数据库与偏好设置插件sqflite_preferences的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


sqflite_preferences 是一个结合了 sqfliteshared_preferences 的 Flutter 插件,允许你在 Flutter 应用中使用 SQLite 数据库来存储和读取偏好设置。它提供了一种灵活的方式来管理应用的配置和用户设置。

以下是 sqflite_preferences 的基本使用方法:

1. 添加依赖

首先,在 pubspec.yaml 文件中添加 sqflite_preferences 依赖:

dependencies:
  flutter:
    sdk: flutter
  sqflite_preferences: ^1.0.0

然后运行 flutter pub get 来安装依赖。

2. 初始化 SqflitePreferences

在使用 sqflite_preferences 之前,你需要初始化它。通常,你可以在应用的 main 函数中进行初始化:

import 'package:flutter/material.dart';
import 'package:sqflite_preferences/sqflite_preferences.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  
  // 初始化 SqflitePreferences
  await SqflitePreferences.init();

  runApp(MyApp());
}

3. 使用 SqflitePreferences

初始化完成后,你可以使用 SqflitePreferences 来存储和读取偏好设置。

存储数据

你可以使用 set 方法来存储数据:

await SqflitePreferences.setInt('counter', 42);
await SqflitePreferences.setString('username', 'john_doe');
await SqflitePreferences.setBool('isDarkMode', true);

读取数据

你可以使用 get 方法来读取数据:

int counter = await SqflitePreferences.getInt('counter', defaultValue: 0);
String username = await SqflitePreferences.getString('username', defaultValue: 'guest');
bool isDarkMode = await SqflitePreferences.getBool('isDarkMode', defaultValue: false);

删除数据

你可以使用 remove 方法来删除数据:

await SqflitePreferences.remove('counter');

检查是否存在

你可以使用 containsKey 方法来检查某个键是否存在:

bool exists = await SqflitePreferences.containsKey('username');

4. 示例代码

以下是一个完整的示例,展示了如何使用 sqflite_preferences 来存储和读取用户设置:

import 'package:flutter/material.dart';
import 'package:sqflite_preferences/sqflite_preferences.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  
  // 初始化 SqflitePreferences
  await SqflitePreferences.init();

  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'SqflitePreferences Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  [@override](/user/override)
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  int _counter = 0;

  [@override](/user/override)
  void initState() {
    super.initState();
    _loadCounter();
  }

  Future<void> _loadCounter() async {
    int counter = await SqflitePreferences.getInt('counter', defaultValue: 0);
    setState(() {
      _counter = counter;
    });
  }

  Future<void> _incrementCounter() async {
    setState(() {
      _counter++;
    });
    await SqflitePreferences.setInt('counter', _counter);
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('SqflitePreferences Demo'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              'You have pushed the button this many times:',
            ),
            Text(
              '$_counter',
              style: Theme.of(context).textTheme.headline4,
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _incrementCounter,
        tooltip: 'Increment',
        child: Icon(Icons.add),
      ),
    );
  }
}
回到顶部