Flutter快取之mmkv

靜默的小貓發表於2021-03-27

mmkv在dart中的使用

Dart端

pubspec.yaml

dependencies:
  mmkv: ">=1.2.8"
  ...
複製程式碼

ios

為了避免與iOS上的本地庫名稱“ libMMKV.so”衝突,我們需要將外掛名稱“ mmkv”更改為“ mmkvflutter”。

對於純flutter應用程式,請將此功能fix_mmkv_plugin_name()新增到ios / Podfile,在呼叫任何flutter_xxx()函式之前先呼叫它。 執行pod install。

def fix_mmkv_plugin_name(flutter_application_path)
  is_module = false
  plugin_deps_file = File.expand_path(File.join(flutter_application_path, '..', '.flutter-plugins-dependencies'))
  if not File.exists?(plugin_deps_file)
    is_module = true;
    plugin_deps_file = File.expand_path(File.join(flutter_application_path, '.flutter-plugins-dependencies'))
  end

  plugin_deps = JSON.parse(File.read(plugin_deps_file)).dig('plugins', 'ios') || []
  plugin_deps.each do |plugin|
    if plugin['name'] == 'mmkv' || plugin['name'] == 'mmkvflutter'
      require File.expand_path(File.join(plugin['path'], 'tool', 'mmkvpodhelper.rb'))
      mmkv_fix_plugin_name(flutter_application_path, is_module)
      return
    end
  end
  raise "找不到任何mmkv外掛依賴項。 如果您是手動執行Pod安裝,請確保先執行flutter pub get"
end

fix_mmkv_plugin_name(File.dirname(File.realpath(__FILE__)))

複製程式碼
要將flutter用作現有iOS App的模組,請將上面的功能fix_mmkv_plugin_name()新增到iOS App的Podfile中,在呼叫任何flutter_xxx()函式之前先呼叫它。 執行pod install,我們就準備好了。
def fix_mmkv_plugin_name(flutter_application_path)
  .....
end

flutter_application_path = 'path/to/your/flutter_module'

fix_mmkv_plugin_name(flutter_application_path)
複製程式碼

Android

如果您以前在Android應用中使用com.tencent.mmkv,則應轉到com.tencent.mmkv-static。 並且,如果您的應用程式依賴於嵌入com.tencent.mmkv的任何第三個SDK,則可以將以下行新增到build.gradle中,以避免發生衝突:

    dependencies {
        ...

        modules {
            module("com.tencent:mmkv") {
                replacedBy("com.tencent:mmkv-static", "Using mmkv-static for flutter")
            }
        }
    }
複製程式碼

使用

import 'package:mmkv/mmkv.dart';

void main() async {

  // must wait for MMKV to finish initialization
  final rootDir = await MMKV.initialize();
  print('MMKV for flutter with rootDir = $rootDir');

  runApp(MyApp());
}


複製程式碼
  import 'package:mmkv/mmkv.dart';

  var mmkv = MMKV.defaultMMKV();
  mmkv.encodeBool('bool', true);
  print('bool = ${mmkv.decodeBool('bool')}');

  mmkv.encodeInt32('int32', (1<<31) - 1);
  print('max int32 = ${mmkv.decodeInt32('int32')}');

  mmkv.encodeInt('int', (1<<63) - 1);
  print('max int = ${mmkv.decodeInt('int')}');

  String str = 'Hello Flutter from MMKV';
  mmkv.encodeString('string', str);
  print('string = ${mmkv.decodeString('string')}');

  str = 'Hello Flutter from MMKV with bytes';
  var bytes = MMBuffer.fromList(Utf8Encoder().convert(str));
  mmkv.encodeBytes('bytes', bytes);
  bytes.destroy();

  bytes = mmkv.decodeBytes('bytes');
  print('bytes = ${Utf8Decoder().convert(bytes.asList())}');
  bytes.destroy();
複製程式碼

更多使用方法

相關文章