美文网首页
Flutter - 那点事(2020.05.24更新)

Flutter - 那点事(2020.05.24更新)

作者: Cosecant | 来源:发表于2019-12-24 21:58 被阅读0次

    隐藏手机号码的实现

    与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()
    }
    

    相关文章

      网友评论

          本文标题:Flutter - 那点事(2020.05.24更新)

          本文链接:https://www.haomeiwen.com/subject/voxqoctx.html