Flutter - 那点事(2020.05.24更新)

2019-12-24  本文已影响0人  Cosecant

隐藏手机号码的实现

与JavaScript/Java/Kotlin都不同,需要使用replaceAllMapped方法,利用分组再组合的方式得到我们想要的结果

实现效果:15900000000 => 159****0000

"15900000000".replaceAllMapped(RegExp(r'^(\d{3})\d{4}(\d{4})$'),
        (Match m) => '${m.group(1)}****${m.group(2)}')

V2插件&V1插件混合效果时:

这是由Flutter自动生成的方法(类:GeneratedPluginRegistrant),然而方法参数变成了FlutterEngine,但是我需要是的是PluginRegistry.Registrar,怎么办?

@Keep
public final class GeneratedPluginRegistrant {
  public static void registerWith(@NonNull FlutterEngine flutterEngine) {
    ShimPluginRegistry shimPluginRegistry = new ShimPluginRegistry(flutterEngine);
    flutterEngine.getPlugins().add(new io.flutter.plugins.connectivity.ConnectivityPlugin());
    flutterEngine.getPlugins().add(new io.flutter.plugins.pathprovider.PathProviderPlugin());
      com.tekartik.sqflite.SqflitePlugin.registerWith(shimPluginRegistry.registrarFor("com.tekartik.sqflite.SqflitePlugin"));
  }
}

不用担心,既然不支持了,要么我们升级我们的主HostActivity使用io.flutter.embedding包里面的FlutterActivity, 要么就像我下面这样,使用类加载并使用反射来调用方法把插件绑定到Flutter中。

特别注意,确认你需要的插件是否提供了兼容V1版本的静态方法regsiterWith

try {
        arrayOf(
            "io.flutter.plugins.connectivity.ConnectivityPlugin",
            "io.flutter.plugins.pathprovider.PathProviderPlugin",
            "com.tekartik.sqflite.SqflitePlugin"
        ).forEach { key ->
            Class.forName(key)
                .getDeclaredMethod("registerWith", PluginRegistry.Registrar::class.java)
                .run {
                    isAccessible = true
                    invoke(null, registrarFor(key))
                }
        }
} catch (e: Exception) {
        e.printStackTrace()
}
上一篇下一篇

猜你喜欢

热点阅读