隐藏手机号码的实现
与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()
}