创建布局文件
android/app/src/main/res/layout/xxx.xml
案例中指定了背景widget_background
定义 Android 小部件接收器AndroidManifest.xml
定义小部件提供程序的小部件android/app/src/main/res/xml/xxx.xml
编写原生代码android/app/src/main/kotlin/com.example.battery/xxx.kt 注意头部需要添加包名
package com.example.battery
import android.appwidget.AppWidgetManager
import android.content.Context
import android.content.SharedPreferences
import android.net.Uri
import android.widget.RemoteViews
import com.example.battery.MainActivity
import com.example.battery.R
import es.antonborri.home_widget.HomeWidgetBackgroundIntent
import es.antonborri.home_widget.HomeWidgetLaunchIntent
import es.antonborri.home_widget.HomeWidgetProvider
class BatteryProvider : HomeWidgetProvider() {
override fun onUpdate(context: Context, appWidgetManager: AppWidgetManager, appWidgetIds: IntArray, widgetData: SharedPreferences) {
appWidgetIds.forEach { widgetId ->
val views = RemoteViews(context.packageName, R.layout.battery).apply {
// Open App on Widget Click
val pendingIntent = HomeWidgetLaunchIntent.getActivity(
context,
MainActivity::class.java)
setOnClickPendingIntent(R.id.widget_container, pendingIntent)
// Swap Title Text by calling Dart Code in the Background
setTextViewText(R.id.widget_title, widgetData.getString("title", null)
?: "No Title Set")
val backgroundIntent = HomeWidgetBackgroundIntent.getBroadcast(
context,
Uri.parse("battery://titleClicked")
)
setOnClickPendingIntent(R.id.widget_title, backgroundIntent)
val message = widgetData.getString("message", null)
setTextViewText(R.id.widget_message, message
?: "No Message Set")
// Detect App opened via Click inside Flutter
val pendingIntentWithData = HomeWidgetLaunchIntent.getActivity(
context,
MainActivity::class.java,
Uri.parse("battery://message?message=$message"))
setOnClickPendingIntent(R.id.widget_message, pendingIntentWithData)
}
appWidgetManager.updateAppWidget(widgetId, views)
}
}
}编写dart代码main.dartHomeWidget.saveWidgetData("title", "剩余电量: "); HomeWidget.saveWidgetData("message", "80%"); HomeWidget.updateWidget( name: "BatteryProvider", iOSName: "Battery", );
