Несоответствие типов: предполагаемый тип - MainActivity, но ожидался FlutterEngine
Я новичок в флаттере, и я хочу изменить обои устройства, но для этого нужны вызовы методов из канала платформы https://developer.android.com/reference/android/Manifest.permission?hl=en и собственного android wallpaperManager
в папке android /MainActivity.kt файл Kotlin выдает ошибку.
Я пробовал это ниже:
- Новый свежий проект с файлом MainActivity.java
- порхать чисто
- ремонт кеша в пабе
Я читал здесь о других вопросах об ошибках несоответствия типов, но, к сожалению, ничего не нашел.
Любая помощь приложена. Мой код приведен ниже.
MainActivity.kt
package com.combasis.wallpaper_son_app
import android.os.Bundle
import io.flutter.app.FlutterActivity
import io.flutter.plugin.common.MethodChannel
import io.flutter.plugins.GeneratedPluginRegistrant
import java.io.IOException
import android.app.WallpaperManager
import android.graphics.BitmapFactory
import java.io.File
import android.os.Build
import android.annotation.TargetApi
import android.content.Context
import io.flutter.Log
private const val CHANNEL = "com.combasis.wallpaper_son_app"
class MainActivity: FlutterActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
GeneratedPluginRegistrant.registerWith(this)
MethodChannel(flutterView, CHANNEL).setMethodCallHandler { call, result ->
if (call.method == "setWallpaper") {
val arguments = call.arguments as ArrayList<*>
val setWallpaper = setWallpaper(arguments[0] as String, applicationContext, arguments[1] as Int)
if (setWallpaper == 0) {
result.success(setWallpaper)
} else {
result.error("UNAVAILABLE", "", null)
}
} else {
result.notImplemented()
}
}
}
@TargetApi(Build.VERSION_CODES.ECLAIR)
private fun setWallpaper(path: String, applicationContext: Context, wallpaperType: Int): Int {
var setWallpaper = 1
val bitmap = BitmapFactory.decodeFile(path)
val wm: WallpaperManager? = WallpaperManager.getInstance(applicationContext)
setWallpaper = try {
wm?.setBitmap(bitmap, null, true, wallpaperType)
0
} catch (e: IOException) {
1
}
return setWallpaper
}
}
main.dart:...
static const platform = const MethodChannel('com.combasis.wallpaper_son_app');
Future<void> _setWallpaper(int wallpaperType, String url) async {
var file =
await DefaultCacheManager().getSingleFile(url);
try {
final int result = await platform
.invokeMethod('setWallpaper', [file.path, wallpaperType]);
print('Wallpaper Updated.... $result');
} on PlatformException catch (e) {
print("Failed to Set Wallpaper: '${e.message}'.");
}
}
Пробег:
Launching lib/main.dart on AOSP on IA Emulator in debug mode...
Running Gradle task 'assembleDebug'...
e: /Users/username/AndroidStudioProjects/walpaperz_app/wallpaper_son_app/android/app/src/main/kotlin/com/combasis/wallpaper_son_app/MainActivity.kt: (21, 48): Type mismatch: inferred type is MainActivity but FlutterEngine was expected
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':app:compileDebugKotlin'.
> Compilation error. See log for more details
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
* Get more help at https://help.gradle.org
BUILD FAILED in 13s
Exception: Gradle task assembleDebug failed with exit code 1
-Android Studio версия: 4.0.1
-Kotlin версия: 1.3.72-release-Studio4.0-5 стабильная
-Флаттер версия: 1.17.2 стабильная
3 ответа
Пожалуйста удалите
GeneratedPluginRegistrant.registerWith(flutterEngine);
из
MainActivity.kt
и обновите следующим образом.
import io.flutter.embedding.android.FlutterActivity
class MainActivity: FlutterActivity() {
}
Чтобы передать значение Flutter Engine, мы можем использовать метод provideFlutterEngine. А для flutterView мы можем использовать flutterEngine.dartExecutor. Ниже приведен фрагмент кода.
class MainActivity: FlutterActivity() {
private val CHANNEL = "com.startActivity/testChannel"
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
provideFlutterEngine(this)?.let { GeneratedPluginRegistrant.registerWith(it) }
MethodChannel(flutterEngine?.dartExecutor,CHANNEL).setMethodCallHandler{ call, result ->
if(call.method.equals("StartSecondActivity")){
val intent= Intent(this,KotlinActivity::class.java)
startActivity(intent)
result.success("ActivityStarted")
}
else{
result.notImplemented()
}
}
}}
Вы можете создать новое приложение, используя flutter create
или через мастер IDE MainActivity.kt
может быть следующим:
class MainActivity: FlutterActivity() {
override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) {
GeneratedPluginRegistrant.registerWith(flutterEngine);
}
}
затем начните с него работу.