Flutter本地数据存储插件shared_preferences_ios_sn的使用

发布于 1周前 作者 gougou168 来自 Flutter

Flutter本地数据存储插件shared_preferences_ios_sn的使用

shared_preferences_ios_sn 是一个用于Flutter应用的本地数据存储插件,它在 shared_preferences 的基础上增加了对iOS Suite Name的支持。这使得在iOS平台上可以方便地在主应用程序和Widget之间共享数据。

为什么需要Suite Name功能?

当你需要将数据从你的应用程序分享到iOS Widget时,这个功能就显得尤为重要。通过设置Suite Name,你可以确保数据在不同组件(如主App和Widget)之间正确共享。

使用方法

pubspec.yaml 中配置

首先,在你的 pubspec.yaml 文件中添加 shared_preferences_ios_sn 插件,并注释掉原有的 shared_preferences

dependencies:
  shared_preferences_ios_sn: ^1.0.3
  # shared_preferences: x.x.x // 应该注释掉 'shared_preferences'

然后运行以下命令来安装插件:

flutter pub get

在Flutter代码中使用

在Flutter代码中,替换原有的 SharedPreferences.getInstance() 调用为 SPUtil.withSuitName() 方法:

// final prefs = SharedPreferences.getInstance();

// 使用 SPUtil.withSuitName 并传递你的 iOS GROUP NAME
final prefs = await SPUtil.withSuitName("<Your iOS GROUP NAME>");
prefs.setString("test_key", "test_value");

在iOS Widget的Swift代码中使用

在你的iOS Widget代码中,可以通过如下方式访问SharedPreferences数据:

// 别忘了给键名加上前缀 "flutter."
print("test_key:",UserDefaults(suiteName: "<Your iOS GROUP NAME>")?.string(forKey: "flutter.test_key"))

示例Demo

以下是完整的示例代码,展示了如何在Flutter应用中使用 shared_preferences_ios_sn 来实现计数器功能,并在主应用程序和Widget之间共享数据。

import 'package:flutter/material.dart';
import 'package:shared_preferences_ios_sn/SPUtil.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return const MaterialApp(
      title: 'SharedPreferences Demo',
      home: SharedPreferencesDemo(),
    );
  }
}

class SharedPreferencesDemo extends StatefulWidget {
  const SharedPreferencesDemo({Key? key}) : super(key: key);

  @override
  SharedPreferencesDemoState createState() => SharedPreferencesDemoState();
}

class SharedPreferencesDemoState extends State<SharedPreferencesDemo> {

  int _counter = 0;

  Future<void> _incrementCounter() async {
    // 使用 SPUtil.withSuitName() 替换 SharedPreferences.getInstance()
    final prefs = await SPUtil.withSuitName("group.my_test");

    final int counter = (prefs.getInt("test_key") ?? 0) + 1;
    prefs.setInt("test_key", counter);
    
    setState(() {
      _counter = counter;
    });
  }

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

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('SharedPreferences Demo'),
      ),
      body: Center(
          child: Text(_counter.toString())),
      floatingActionButton: FloatingActionButton(
        onPressed: _incrementCounter,
        tooltip: 'Increment',
        child: const Icon(Icons.add),
      ),
    );
  }
}

通过上述步骤和示例代码,你可以在Flutter应用中利用 shared_preferences_ios_sn 实现跨组件的数据共享功能,特别是在iOS平台上。请确保在Xcode中正确配置了App Group以便于数据共享。


更多关于Flutter本地数据存储插件shared_preferences_ios_sn的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter本地数据存储插件shared_preferences_ios_sn的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter项目中使用shared_preferences_ios_sn(注意:实际上shared_preferences插件已经支持iOS和Android,通常我们不需要单独的shared_preferences_ios_sn插件,除非有特别的需求或误解)。不过,为了展示如何在Flutter中使用本地数据存储插件,我将以shared_preferences为例,展示如何在Flutter应用中存储和检索数据。

首先,确保你已经在pubspec.yaml文件中添加了shared_preferences依赖:

dependencies:
  flutter:
    sdk: flutter
  shared_preferences: ^2.0.15  # 请检查最新版本号

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

接下来,你可以在你的Flutter应用中使用SharedPreferences来存储和检索数据。下面是一个简单的例子,展示了如何存储一个字符串值并检索它:

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(
      title: 'SharedPreferences Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  String _savedValue = '';

  @override
  void initState() {
    super.initState();
    // 在initState中初始化SharedPreferences实例
    _initSharedPreferences();
  }

  Future<void> _initSharedPreferences() async {
    SharedPreferences sharedPreferences = await SharedPreferences.getInstance();
    // 从SharedPreferences中检索数据
    setState(() {
      _savedValue = sharedPreferences.getString('my_key') ?? '';
    });
  }

  Future<void> _saveData() async {
    SharedPreferences sharedPreferences = await SharedPreferences.getInstance();
    // 向SharedPreferences中存储数据
    setState(() {
      sharedPreferences.setString('my_key', 'Hello, SharedPreferences!');
    });
    // 更新UI以显示新存储的值(实际上,这里不需要立即更新UI,因为值已经在SharedPreferences中了)
    // 但为了演示,我们再次读取它
    _initSharedPreferences();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('SharedPreferences Demo'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              'Saved Value: $_savedValue',
              style: TextStyle(fontSize: 20),
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: _saveData,
              child: Text('Save Data'),
            ),
          ],
        ),
      ),
    );
  }
}

在这个例子中,我们做了以下几件事:

  1. pubspec.yaml中添加了shared_preferences依赖。
  2. MyHomePageinitState方法中初始化SharedPreferences实例,并从存储中检索数据。
  3. 提供了一个按钮来存储数据到SharedPreferences中。
  4. 更新UI以显示存储的值。

请注意,SharedPreferences是异步的,因此我们使用await关键字等待SharedPreferences.getInstance()方法的完成。同时,我们在调用setState时确保在UI线程上更新状态。

如果你确实需要使用一个名为shared_preferences_ios_sn的特定插件(这非常不寻常),步骤将大致相同,但你需要确保正确安装并导入该插件,并查阅其文档以了解是否有任何特定的API差异。然而,在大多数情况下,shared_preferences插件已经足够满足本地数据存储的需求。

回到顶部