Flutter配置缓存插件configcat_preferences_cache的使用

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

Flutter配置缓存插件configcat_preferences_cache的使用

ConfigCat Flutter Preferences Cache

pub package Dart CI

ConfigCat Flutter Preferences Cache是为ConfigCat Dart (Flutter) SDK提供的缓存实现。它通过shared_preferences为Flutter应用程序在各种平台上提供缓存功能。

缓存存储位置

  • Web: 浏览器 LocalStorage
  • iOS / macOS: NSUserDefaults
  • Android: SharedPreferences
  • Linux: 文件位于 XDG_DATA_HOME 目录中。
  • Windows: 文件位于漫游 AppData 目录中。

开始使用

1. 安装包以及ConfigCat Dart (Flutter) SDK

flutter pub add configcat_preferences_cache
flutter pub add configcat_client

2. 在应用代码中导入configcat_clientconfigcat_cache

import 'package:configcat_preferences_cache/configcat_preferences_cache.dart';
import 'package:configcat_client/configcat_client.dart';

3. 在ConfigCat SDK初始化时使用ConfigCatPreferencesCache

final client = ConfigCatClient.get(
    sdkKey: '#YOUR-SDK-KEY#',
    options: ConfigCatOptions(cache: ConfigCatPreferencesCache()));

示例代码

以下是一个完整的示例,展示了如何在Flutter应用中集成configcat_preferences_cache插件,并根据特征标记(feature flag)更新UI。

import 'package:configcat_client/configcat_client.dart';
import 'package:configcat_preferences_cache/configcat_preferences_cache.dart';
import 'package:flutter/material.dart';
import 'package:get_it/get_it.dart';

void main() {
  GetIt.I.registerSingleton<ConfigCatClient>(
      ConfigCatClient.get(
          sdkKey: 'PKDVCLf-Hq-h-kCzMp-L7Q/HhOWfwVtZ0mb30i9wi17GQ',
          options: ConfigCatOptions(
              // 使用ConfigCat的共享偏好设置缓存。
              cache: ConfigCatPreferencesCache(),
              logger: ConfigCatLogger(
                  // Info级别日志有助于检查特征标记评估过程。
                  // 使用默认警告级别以避免在应用中记录过多详细信息。
                  level: LogLevel.info))),
      dispose: (client) => client.close());
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'ConfigCat Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.deepOrange,
      ),
      home: const MyHomePage(title: 'ConfigCat Flutter Demo'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({Key? key, required this.title}) : super(key: key);

  final String title;

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  bool _value = false;

  Future<void> _getFeatureFlagValue() async {
    final client = GetIt.I<ConfigCatClient>();
    final user = ConfigCatUser(
        identifier: '#SOME-USER-ID#', email: 'configcat@example.com');

    final value = await client.getValue(
        key: 'isPOCFeatureEnabled', defaultValue: false, user: user);
    setState(() {
      _value = value;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            const Padding(
              padding: EdgeInsets.all(20),
              child: Text(
                'Value of isPOCFeatureEnabled:',
                style: TextStyle(fontSize: 20),
              ),
            ),
            Text(
              '$_value',
              style: Theme.of(context).textTheme.headline4,
            ),
            Padding(
              padding: const EdgeInsets.all(50),
              child: TextButton(
                  onPressed: () async {
                    await _getFeatureFlagValue();
                  },
                  style: TextButton.styleFrom(
                      padding: const EdgeInsets.all(20),
                      textStyle: const TextStyle(fontSize: 30)),
                  child: const Text('Get Value')),
            ),
          ],
        ),
      ),
    );
  }
}

这个例子创建了一个简单的Flutter应用,当用户点击按钮时,会从ConfigCat获取一个名为isPOCFeatureEnabled的特征标记值,并更新页面上的文本显示该值。此过程利用了configcat_preferences_cache来缓存特征标记的状态,从而提高了性能并减少了不必要的网络请求。


更多关于Flutter配置缓存插件configcat_preferences_cache的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter配置缓存插件configcat_preferences_cache的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是一个关于如何在Flutter项目中配置和使用configcat_preferences_cache插件的示例代码。configcat_preferences_cache插件通常用于缓存从ConfigCat配置管理平台获取的配置数据,以减少网络请求并提高性能。

1. 添加依赖

首先,你需要在pubspec.yaml文件中添加configcat_preferences_cache依赖项。确保你的dependencies部分包含以下内容:

dependencies:
  flutter:
    sdk: flutter
  configcat_client_dart: ^x.y.z  # 替换为最新版本号
  configcat_preferences_cache: ^x.y.z  # 替换为最新版本号
  shared_preferences: ^x.y.z  # 因为configcat_preferences_cache依赖于shared_preferences

2. 导入依赖

在你的Flutter项目的Dart文件中,导入必要的包:

import 'package:flutter/material.dart';
import 'package:configcat_client_dart/configcat_client.dart';
import 'package:configcat_preferences_cache/configcat_preferences_cache.dart';
import 'package:shared_preferences/shared_preferences.dart';

3. 配置ConfigCat客户端和缓存

在应用的入口文件(通常是main.dart)中,配置ConfigCat客户端和缓存:

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  
  // 初始化SharedPreferences
  SharedPreferences sharedPreferences = await SharedPreferences.getInstance();
  
  // 创建ConfigCat客户端配置
  ConfigCatClientOptions options = ConfigCatClientOptions(
    sdkKey: 'YOUR_CONFIGCAT_SDK_KEY', // 替换为你的ConfigCat SDK Key
    pollInterval: Duration(seconds: 30),
    useInMemoryCache: false,
  );

  // 创建缓存管理器
  final cacheManager = PreferencesCacheManager(sharedPreferences);

  // 创建ConfigCat客户端并设置缓存管理器
  ConfigCatClient configCatClient = ConfigCatClient(
    options: options,
    cacheManager: cacheManager,
  );

  // 运行应用
  runApp(MyApp(configCatClient: configCatClient));
}

class MyApp extends StatelessWidget {
  final ConfigCatClient configCatClient;

  MyApp({required this.configCatClient});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('ConfigCat Preferences Cache Example'),
        ),
        body: Center(
          child: ConfigCatExampleWidget(configCatClient: configCatClient),
        ),
      ),
    );
  }
}

4. 使用ConfigCat客户端获取配置

在你的组件中使用ConfigCat客户端来获取配置:

class ConfigCatExampleWidget extends StatefulWidget {
  final ConfigCatClient configCatClient;

  ConfigCatExampleWidget({required this.configCatClient});

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

class _ConfigCatExampleWidgetState extends State<ConfigCatExampleWidget> {
  String? featureFlagValue;

  @override
  void initState() {
    super.initState();
    
    // 获取配置值
    widget.configCatClient.getValue<String>('your-feature-flag-key', defaultValue: 'default-value').then((value) {
      setState(() {
        featureFlagValue = value;
      });
    });
  }

  @override
  Widget build(BuildContext context) {
    return Column(
      mainAxisAlignment: MainAxisAlignment.center,
      children: <Widget>[
        Text('Feature Flag Value:'),
        Text(featureFlagValue ?? 'Loading...'),
      ],
    );
  }
}

5. 运行应用

确保你已经替换了YOUR_CONFIGCAT_SDK_KEYyour-feature-flag-key为你的实际ConfigCat SDK Key和特性标志键。然后运行你的Flutter应用,你应该能看到从ConfigCat获取并缓存的配置值。

总结

这个示例展示了如何在Flutter项目中配置和使用configcat_preferences_cache插件来缓存ConfigCat配置数据。通过这种方式,你可以减少网络请求,提高应用的性能和响应速度。

回到顶部