温馨提示×

centos下flutter如何实现数据持久化

小樊
45
2025-12-23 12:44:38
栏目: 智能运维

在CentOS系统下,Flutter实现数据持久化有多种方式,以下是一些常用的方法:

1. 使用 shared_preferences

shared_preferences 是一个Flutter插件,用于存储简单的键值对数据。

安装插件

在终端中运行以下命令来安装 shared_preferences 插件:

flutter pub add shared_preferences

使用示例

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: DataPersistenceExample(),
    );
  }
}

class DataPersistenceExample extends StatefulWidget {
  @override
  _DataPersistenceExampleState createState() => _DataPersistenceExampleState();
}

class _DataPersistenceExampleState extends State<DataPersistenceExample> {
  String _data = '';

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

  void _loadData() async {
    SharedPreferences prefs = await SharedPreferences.getInstance();
    setState(() {
      _data = prefs.getString('key') ?? 'Default Value';
    });
  }

  void _saveData() async {
    SharedPreferences prefs = await SharedPreferences.getInstance();
    setState(() {
      prefs.setString('key', _data);
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Data Persistence Example'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            TextField(
              decoration: InputDecoration(
                labelText: 'Enter Data',
              ),
              onChanged: (value) {
                setState(() {
                  _data = value;
                });
              },
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: _saveData,
              child: Text('Save Data'),
            ),
            SizedBox(height: 20),
            Text('Data: $_data'),
          ],
        ),
      ),
    );
  }
}

2. 使用 sqflite

sqflite 是一个Flutter插件,用于在本地存储SQLite数据库。

安装插件

在终端中运行以下命令来安装 sqflite 插件:

flutter pub add sqflite

使用示例

import 'package:flutter/material.dart';
import 'package:sqflite/sqflite.dart';
import 'dart:convert';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: DataPersistenceExample(),
    );
  }
}

class DataPersistenceExample extends StatefulWidget {
  @override
  _DataPersistenceExampleState createState() => _DataPersistenceExampleState();
}

class _DataPersistenceExampleState extends State<DataPersistenceExample> {
  String _data = '';

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

  void _loadData() async {
    final database = await openDatabase('my_database.db', version: 1);
    final Map<String, dynamic> data = await database.get('data');
    if (data != null) {
      setState(() {
        _data = data['value'] ?? 'Default Value';
      });
    }
    await database.close();
  }

  void _saveData() async {
    final database = await openDatabase('my_database.db', version: 1);
    await database.insert(
      'data',
      {'value': _data},
      conflictAlgorithm: ConflictAlgorithm.replace,
    );
    await database.close();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Data Persistence Example'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            TextField(
              decoration: InputDecoration(
                labelText: 'Enter Data',
              ),
              onChanged: (value) {
                setState(() {
                  _data = value;
                });
              },
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: _saveData,
              child: Text('Save Data'),
            ),
            SizedBox(height: 20),
            Text('Data: $_data'),
          ],
        ),
      ),
    );
  }
}

3. 使用 flutter_secure_storage

flutter_secure_storage 是一个Flutter插件,用于安全地存储敏感数据,如密码、令牌等。

安装插件

在终端中运行以下命令来安装 flutter_secure_storage 插件:

flutter pub add flutter_secure_storage

使用示例

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: DataPersistenceExample(),
    );
  }
}

class DataPersistenceExample extends StatefulWidget {
  @override
  _DataPersistenceExampleState createState() => _DataPersistenceExampleState();
}

class _DataPersistenceExampleState extends State<DataPersistenceExample> {
  String _data = '';

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

  void _loadData() async {
    final storage = FlutterSecureStorage();
    setState(() {
      _data = storage.read(key: 'key') ?? 'Default Value';
    });
  }

  void _saveData() async {
    final storage = FlutterSecureStorage();
    await storage.write(key: 'key', value: _data);
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Data Persistence Example'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            TextField(
              decoration: InputDecoration(
                labelText: 'Enter Data',
              ),
              onChanged: (value) {
                setState(() {
                  _data = value;
                });
              },
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: _saveData,
              child: Text('Save Data'),
            ),
            SizedBox(height: 20),
            Text('Data: $_data'),
          ],
        ),
      ),
    );
  }
}

以上是几种常见的Flutter数据持久化方法,你可以根据具体需求选择合适的方法。

0