Flutter应用小部件插件flutter_app_widget的使用
Flutter应用小部件插件flutter_app_widget的使用
flutter_app_widget
是一个适用于 Flutter 的应用小部件插件,支持 Android 和 iOS 平台。
示例代码
以下是使用 flutter_app_widget
插件的一个完整示例。该示例展示了如何在 Flutter 应用中初始化小部件插件、监听点击事件,并更新和移除小部件数据。
import 'dart:convert';
import 'package:flutter/material.dart';
import 'dart:async';
import 'package:flutter/services.dart';
import 'package:flutter_app_widget/flutter_app_widget.dart';
import 'flutter_widget_data.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatefulWidget {
const MyApp({Key? key}) : super(key: key);
[@override](/user/override)
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
String _platformVersion = '未知';
String uri = '';
[@override](/user/override)
void initState() {
super.initState();
initPlatformState();
// 初始化插件并设置 App Group ID
FlutterAppWidget.initialized(appGroupId: 'group.com.toner');
// 监听小部件点击事件
FlutterAppWidget.widgetClicked.listen((event) {
uri = event?.toString() ?? '';
setState(() {});
print('小部件点击事件: $event');
});
}
// 异步方法用于获取平台版本信息
Future<void> initPlatformState() async {
String platformVersion;
// 尝试获取平台版本信息,如果失败则返回未知
try {
platformVersion = await FlutterAppWidget.platformVersion ?? '未知平台版本';
} on PlatformException {
platformVersion = '无法获取平台版本';
}
// 如果小部件被移除且消息还在处理中,则返回
if (!mounted) return;
// 更新状态
setState(() {
_platformVersion = platformVersion;
});
}
late final textController = TextEditingController();
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('插件示例应用'),
),
body: Column(
children: [
Text(
'请输入文本 🙏🏻, 启动 URI: $uri',
),
TextField(
controller: textController,
),
ElevatedButton(
onPressed: () async {
print(jsonEncode(
FlutterWidgetData(true, textController.text)));
final result = await FlutterAppWidget.setWidgetDataAndUpdate(
key: 'widgetData',
value: jsonEncode(
FlutterWidgetData(true, textController.text)),
androidWidgetProviderClass: 'RunningWidgetProvider');
print('[更新按钮]: $result');
},
child: const Text('开始')),
ElevatedButton(
onPressed: () async {
await FlutterAppWidget.removeWidgetDataAndUpdate(
key: 'widgetData',
androidWidgetProviderClass: 'RunningWidgetProvider');
},
child: const Text('暂停')),
],
),
),
);
}
}
代码说明
-
导入依赖库:
import 'dart:convert'; import 'package:flutter/material.dart'; import 'dart:async'; import 'package:flutter/services.dart'; import 'package:flutter_app_widget/flutter_app_widget.dart'; import 'flutter_widget_data.dart';
-
初始化应用:
void main() { runApp(const MyApp()); }
-
定义主应用类:
class MyApp extends StatefulWidget { const MyApp({Key? key}) : super(key: key); [@override](/user/override) State<MyApp> createState() => _MyAppState(); }
-
定义状态类:
class _MyAppState extends State<MyApp> { String _platformVersion = '未知'; String uri = ''; [@override](/user/override) void initState() { super.initState(); initPlatformState(); // 初始化插件并设置 App Group ID FlutterAppWidget.initialized(appGroupId: 'group.com.toner'); // 监听小部件点击事件 FlutterAppWidget.widgetClicked.listen((event) { uri = event?.toString() ?? ''; setState(() {}); print('小部件点击事件: $event'); }); }
-
异步方法用于获取平台版本信息:
Future<void> initPlatformState() async { String platformVersion; // 尝试获取平台版本信息,如果失败则返回未知 try { platformVersion = await FlutterAppWidget.platformVersion ?? '未知平台版本'; } on PlatformException { platformVersion = '无法获取平台版本'; } // 如果小部件被移除且消息还在处理中,则返回 if (!mounted) return; // 更新状态 setState(() { _platformVersion = platformVersion; }); }
-
定义文本控制器:
late final textController = TextEditingController();
-
构建应用界面:
[@override](/user/override) Widget build(BuildContext context) { return MaterialApp( home: Scaffold( appBar: AppBar( title: const Text('插件示例应用'), ), body: Column( children: [ Text( '请输入文本 🙏🏻, 启动 URI: $uri', ), TextField( controller: textController, ), ElevatedButton( onPressed: () async { print(jsonEncode( FlutterWidgetData(true, textController.text))); final result = await FlutterAppWidget.setWidgetDataAndUpdate( key: 'widgetData', value: jsonEncode( FlutterWidgetData(true, textController.text)), androidWidgetProviderClass: 'RunningWidgetProvider'); print('[更新按钮]: $result'); }, child: const Text('开始')), ElevatedButton( onPressed: () async { await FlutterAppWidget.removeWidgetDataAndUpdate( key: 'widgetData', androidWidgetProviderClass: 'RunningWidgetProvider'); }, child: const Text('暂停')), ], ), ), ); }
更多关于Flutter应用小部件插件flutter_app_widget的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter应用小部件插件flutter_app_widget的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
flutter_app_widget
是一个用于在 Flutter 应用中创建和管理应用小部件(App Widgets)的插件。应用小部件通常用于在 Android 主屏幕上显示应用的某些信息或功能,用户可以直接与小部件进行交互。
1. 添加依赖
首先,你需要在 pubspec.yaml
文件中添加 flutter_app_widget
插件的依赖:
dependencies:
flutter:
sdk: flutter
flutter_app_widget: ^1.0.0 # 请使用最新版本
然后,运行 flutter pub get
来获取依赖。
2. 配置 Android 项目
由于应用小部件是 Android 特有的功能,你需要在 Android 项目中做一些配置。
2.1 创建小部件布局文件
在 android/app/src/main/res/layout/
目录下创建一个 XML 布局文件,例如 widget_layout.xml
,用于定义小部件的外观。
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/widget_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello, Widget!"
android:textSize="18sp"
android:layout_centerInParent="true"/>
</RelativeLayout>
2.2 创建小部件提供者
在 android/app/src/main/java/com/example/yourapp/
目录下创建一个 Java 或 Kotlin 类,例如 MyAppWidgetProvider.java
,用于处理小部件的更新逻辑。
package com.example.yourapp;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.Context;
import android.widget.RemoteViews;
public class MyAppWidgetProvider extends AppWidgetProvider {
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
for (int appWidgetId : appWidgetIds) {
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget_layout);
views.setTextViewText(R.id.widget_text, "Updated Text");
appWidgetManager.updateAppWidget(appWidgetId, views);
}
}
}
2.3 配置 AndroidManifest.xml
在 android/app/src/main/AndroidManifest.xml
文件中注册小部件提供者。
<application>
<receiver android:name=".MyAppWidgetProvider">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data
android:name="android.appwidget.provider"
android:resource="@xml/app_widget_info" />
</receiver>
</application>
2.4 创建小部件信息文件
在 android/app/src/main/res/xml/
目录下创建一个 XML 文件,例如 app_widget_info.xml
,用于配置小部件的基本信息。
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
android:minWidth="40dp"
android:minHeight="40dp"
android:updatePeriodMillis="86400000"
android:initialLayout="@layout/widget_layout"
android:resizeMode="horizontal|vertical"
android:widgetCategory="home_screen">
</appwidget-provider>
3. 在 Flutter 中使用 flutter_app_widget
在 Flutter 代码中,你可以使用 flutter_app_widget
插件来更新小部件的内容。
import 'package:flutter/material.dart';
import 'package:flutter_app_widget/flutter_app_widget.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Flutter App Widget Example'),
),
body: Center(
child: ElevatedButton(
onPressed: () {
// 更新小部件内容
FlutterAppWidget.updateWidget(
title: 'New Title',
message: 'New Message',
);
},
child: Text('Update Widget'),
),
),
),
);
}
}