#android #ios #flutter #view #flutter-platform-channel
Вопрос:
Я новичок в flutter, но я читал, что в flutter не было простого способа анимировать векторную графику, как это позволял Android.
У меня есть векторный индикатор выполнения, который я хочу анимировать, чтобы добиться прогресса. Затем я попытался использовать канал платформы, чтобы получить собственный код Android / iOS для анимации моего вектора.
На данный момент я тестировал только Android, и это мой код, который не работает из-за представления :
Трепетать :
static const progressChannel = const MethodChannel("progress");
Widget progressBar;
Future<void> _getProgressBar() async {
Widget progressBarView;
try {
var result = await progressChannel.invokeMapMethod('start');
print("Result : ---- " result.toString());
progressBarView = result as Widget;
}
catch (e) {
print("error channel : " e.toString());
}
setState(() {
progressBar = progressBarView;
});
}
Android :
class MainActivity: FlutterActivity() {
private val CHANNEL = "progress"
override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) {
super.configureFlutterEngine(flutterEngine)
MethodChannel(flutterEngine.dartExecutor.binaryMessenger, CHANNEL).setMethodCallHandler { call, result ->
if (call.method == "start") {
val view = ImageView(this)
result.success(startProgressBar(view))
}
}
}
private var vector: AnimatedVectorDrawableCompat? = null
fun startProgressBar(view: ImageView): ImageView {
val mainHandler = Handler(Looper.getMainLooper())
vector = AnimatedVectorDrawableCompat.create(view.context, R.drawable.avd_progress_bar)
view.setImageDrawable(vector)
if (vector != null) {
vector!!.registerAnimationCallback(object : androidx.vectordrawable.graphics.drawable.Animatable2Compat.AnimationCallback() {
override fun onAnimationEnd(drawable: Drawable) {
super.onAnimationEnd(drawable)
mainHandler.post { vector!!.start() }
}
})
vector!!.start()
}
return view
}
}
Очевидно, я не могу создать ImageView
код из Android и извлечь его.
Ошибка :
E/MethodChannel#progress(32414): Failed to handle method call
E/MethodChannel#progress(32414): java.lang.IllegalArgumentException: Unsupported value: android.widget.ImageView{40dfc22 V.ED..... ......ID 0,0-0,0}
Is there a way to create a native View
and retrieve it from Flutter ? Or another way to achieve this ?