Flutter WhatsApp贴纸注入插件whatsapp_stickers_injector的使用
Flutter WhatsApp贴纸注入插件whatsapp_stickers_injector的使用
whatsapp_stickers_injector
是一个用于将贴纸添加到 WhatsApp 的 Flutter 插件。该插件是从 applicazza/whatsapp_stickers_plus
分支更新而来,仅更新了 Android 构建文件。
注意事项
trayImageFileName
使用的是 PNG 数据,而贴纸使用的是 WebP 数据。
使用方法
要使用此插件,在你的 pubspec.yaml
文件中添加 whatsapp_stickers_injector
作为依赖项。
Android
在你的 app\build.gradle
文件中添加以下选项。这会防止所有 WebP 文件被压缩:
android {
aaptOptions {
noCompress "webp"
}
}
iOS
不要忘记在 Info.plist
文件中添加以下条目,并将其与 Runner
目标关联:
<key>LSApplicationQueriesSchemes</key>
<array>
<string>whatsapp</string>
</array>
示例
本地资源
将贴纸放在任何文件夹中,例如 assets
。不要忘记在 pubspec.yaml
中添加此文件夹。
const stickers = {
'01_Cuppy_smile.webp': ['☕', '🙂'],
'02_Cuppy_lol.webp': ['😄', '😀'],
'03_Cuppy_rofl.webp': ['😆', '😂'],
'04_Cuppy_sad.webp': ['😃', '😍'],
'05_Cuppy_cry.webp': ['😭', '💧'],
'06_Cuppy_love.webp': ['😍', '♥'],
'07_Cuppy_hate.webp': ['💔', '👎'],
'08_Cuppy_lovewithmug.webp': ['😍', '💑'],
'09_Cuppy_lovewithcookie.webp': ['😘', '🍪'],
'10_Cuppy_hmm.webp': ['🤔', '😐'],
'11_Cuppy_upset.webp': ['😱', '😵'],
'12_Cuppy_angry.webp': ['😡', '😠'],
'13_Cuppy_curious.webp': ['❓', '🤔'],
'14_Cuppy_weird.webp': ['🌈', '😜'],
'15_Cuppy_bluescreen.webp': ['💻', '😩'],
'16_Cuppy_angry.webp': ['😡', '😤'],
'17_Cuppy_tired.webp': ['😩', '😨'],
'18_Cuppy_workhard.webp': ['😔', '😨'],
'19_Cuppy_shine.webp': ['🎉', '✨'],
'20_Cuppy_disgusting.webp': ['🤮', '👎'],
'21_Cuppy_hi.webp': ['🖐', '🙋'],
'22_Cuppy_bye.webp': ['🖐', '👋'],
};
Future installFromAssets() async {
var stickerPack = WhatsappStickers(
identifier: 'cuppyFlutterWhatsAppStickers',
name: 'Cuppy Flutter WhatsApp Stickers',
publisher: 'John Doe',
trayImageFileName: WhatsappStickerImage.fromAsset('assets/tray_Cuppy.png'),
publisherWebsite: '',
privacyPolicyWebsite: '',
licenseAgreementWebsite: '',
);
stickers.forEach((sticker, emojis) {
stickerPack.addSticker(WhatsappStickerImage.fromAsset('assets/$sticker'), emojis);
});
try {
await stickerPack.sendToWhatsApp();
} on WhatsappStickersException catch (e) {
print(e.cause);
}
}
远程资源
从远程服务器下载贴纸并安装它们。
const stickers = {
'01_Cuppy_smile.webp': ['☕', '🙂'],
'02_Cuppy_lol.webp': ['😄', '😀'],
'03_Cuppy_rofl.webp': ['😆', '😂'],
'04_Cuppy_sad.webp': ['😃', '😍'],
'05_Cuppy_cry.webp': ['😭', '💧'],
'06_Cuppy_love.webp': ['😍', '♥'],
'07_Cuppy_hate.webp': ['💔', '👎'],
'08_Cuppy_lovewithmug.webp': ['😍', '💑'],
'09_Cuppy_lovewithcookie.webp': ['😘', '🍪'],
'10_Cuppy_hmm.webp': ['🤔', '😐'],
'11_Cuppy_upset.webp': ['😱', '😵'],
'12_Cuppy_angry.webp': ['😡', '😠'],
'13_Cuppy_curious.webp': ['❓', '🤔'],
'14_Cuppy_weird.webp': ['🌈', '😜'],
'15_Cuppy_bluescreen.webp': ['💻', '😩'],
'16_Cuppy_angry.webp': ['😡', '😤'],
'17_Cuppy_tired.webp': ['😩', '😨'],
'18_Cuppy_workhard.webp': ['😔', '😨'],
'19_Cuppy_shine.webp': ['🎉', '✨'],
'20_Cuppy_disgusting.webp': ['🤮', '👎'],
'21_Cuppy_hi.webp': ['🖐', '🙋'],
'22_Cuppy_bye.webp': ['🖐', '👋'],
};
Future installFromRemote() async {
var applicationDocumentsDirectory = await getApplicationDocumentsDirectory();
var stickersDirectory = Directory('${applicationDocumentsDirectory.path}/stickers');
await stickersDirectory.create(recursive: true);
final dio = Dio();
final downloads = <Future>[];
stickers.forEach((sticker, emojis) {
downloads.add(
dio.download(
'https://github.com/applicazza/whatsapp_stickers_plus/raw/master/example/assets/$sticker',
'${stickersDirectory.path}/$sticker',
),
);
});
await Future.wait(downloads);
var stickerPack = WhatsappStickers(
identifier: 'cuppyFlutterWhatsAppStickers',
name: 'Cuppy Flutter WhatsApp Stickers',
publisher: 'John Doe',
trayImageFileName: WhatsappStickerImage.fromAsset('assets/tray_Cuppy.png'),
publisherWebsite: '',
privacyPolicyWebsite: '',
licenseAgreementWebsite: '',
);
stickers.forEach((sticker, emojis) {
stickerPack.addSticker(WhatsappStickerImage.fromFile('${stickersDirectory.path}/$sticker'), emojis);
});
try {
await stickerPack.sendToWhatsApp();
} on WhatsappStickersException catch (e) {
print(e.cause);
}
}
完整示例
import 'dart:io';
import 'package:dio/dio.dart';
import 'package:flutter/material.dart';
import 'package:path_provider/path_provider.dart';
import 'package:whatsapp_stickers_injector/exceptions.dart';
import 'package:whatsapp_stickers_injector/whatsapp_stickers.dart';
void main() {
runApp(AppRoot());
}
class AppRoot extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('WhatsApp Stickers Flutter Demo'),
),
body: Container(
child: Column(
children: <Widget>[
Center(
child: Padding(
padding: const EdgeInsets.only(bottom: 32.0),
child: ElevatedButton(
child: Text('Install from assets'),
onPressed: installFromAssets,
),
),
),
Center(
child: Padding(
padding: const EdgeInsets.only(top: 32.0),
child: ElevatedButton(
child: Text('Install from remote'),
onPressed: installFromRemote,
),
),
),
],
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.center,
mainAxisSize: MainAxisSize.max,
),
),
),
);
}
}
const stickers = {
'01_Cuppy_smile.webp': ['☕', '🙂'],
'02_Cuppy_lol.webp': ['😄', '😀'],
'03_Cuppy_rofl.webp': ['😆', '😂'],
'04_Cuppy_sad.webp': ['😃', '😍'],
'05_Cuppy_cry.webp': ['😭', '💧'],
'06_Cuppy_love.webp': ['😍', '♥'],
'07_Cuppy_hate.webp': ['💔', '👎'],
'08_Cuppy_lovewithmug.webp': ['😍', '💑'],
'09_Cuppy_lovewithcookie.webp': ['😘', '🍪'],
'10_Cuppy_hmm.webp': ['🤔', '😐'],
'11_Cuppy_upset.webp': ['😱', '😵'],
'12_Cuppy_angry.webp': ['😡', '😠'],
'13_Cuppy_curious.webp': ['❓', '🤔'],
'14_Cuppy_weird.webp': ['🌈', '😜'],
'15_Cuppy_bluescreen.webp': ['💻', '😩'],
'16_Cuppy_angry.webp': ['😡', '😤'],
'17_Cuppy_tired.webp': ['😩', '😨'],
'18_Cuppy_workhard.webp': ['😔', '😨'],
'19_Cuppy_shine.webp': ['🎉', '✨'],
'20_Cuppy_disgusting.webp': ['🤮', '👎'],
'21_Cuppy_hi.webp': ['🖐', '🙋'],
'22_Cuppy_bye.webp': ['🖐', '👋'],
};
Future installFromAssets() async {
var stickerPack = WhatsappStickers(
identifier: 'cuppyFlutterWhatsAppStickers',
name: 'Cuppy Flutter WhatsApp Stickers',
publisher: 'John Doe',
trayImageFileName: WhatsappStickerImage.fromAsset('assets/tray_Cuppy.png'),
publisherWebsite: '',
privacyPolicyWebsite: '',
licenseAgreementWebsite: '',
);
stickers.forEach((sticker, emojis) {
stickerPack.addSticker(WhatsappStickerImage.fromAsset('assets/$sticker'), emojis);
});
try {
await stickerPack.sendToWhatsApp();
} on WhatsappStickersException catch (e) {
print(e.cause);
}
}
Future installFromRemote() async {
var applicationDocumentsDirectory = await getApplicationDocumentsDirectory();
var stickersDirectory = Directory('${applicationDocumentsDirectory.path}/stickers');
await stickersDirectory.create(recursive: true);
final dio = Dio();
final downloads = <Future>[];
stickers.forEach((sticker, emojis) {
downloads.add(
dio.download(
'https://github.com/applicazza/whatsapp_stickers_plus/raw/master/example/assets/$sticker',
'${stickersDirectory.path}/$sticker',
),
);
});
await Future.wait(downloads);
var stickerPack = WhatsappStickers(
identifier: 'cuppyFlutterWhatsAppStickers',
name: 'Cuppy Flutter WhatsApp Stickers',
publisher: 'John Doe',
trayImageFileName: WhatsappStickerImage.fromAsset('assets/tray_Cuppy.png'),
publisherWebsite: '',
privacyPolicyWebsite: '',
licenseAgreementWebsite: '',
);
stickers.forEach((sticker, emojis) {
stickerPack.addSticker(WhatsappStickerImage.fromFile('${stickersDirectory.path}/$sticker'), emojis);
});
try {
await stickerPack.sendToWhatsApp();
} on WhatsappStickersException catch (e) {
print(e.cause);
}
}
更多关于Flutter WhatsApp贴纸注入插件whatsapp_stickers_injector的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter WhatsApp贴纸注入插件whatsapp_stickers_injector的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,下面是一个关于如何使用 whatsapp_stickers_injector
插件的详细代码示例。这个插件允许你在Flutter应用中向WhatsApp注入贴纸包。请注意,这要求你的设备已经获得root权限,并且你可能需要一些Android开发的基本知识。
首先,确保你已经在你的 pubspec.yaml
文件中添加了 whatsapp_stickers_injector
依赖:
dependencies:
flutter:
sdk: flutter
whatsapp_stickers_injector: ^最新版本号
然后运行 flutter pub get
来获取依赖。
接下来,在你的Flutter应用中,你需要请求必要的权限,并编写代码来注入贴纸包。以下是一个完整的示例:
import 'package:flutter/material.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:whatsapp_stickers_injector/whatsapp_stickers_injector.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: HomeScreen(),
);
}
}
class HomeScreen extends StatefulWidget {
@override
_HomeScreenState createState() => _HomeScreenState();
}
class _HomeScreenState extends State<HomeScreen> {
String status = "Checking permissions...";
@override
void initState() {
super.initState();
_checkPermissions();
}
Future<void> _checkPermissions() async {
var status = await Permission.storage.status;
if (!status.isGranted) {
Map<Permission, PermissionStatus> permissions = await Permission.request([
Permission.storage,
]);
status = permissions[Permission.storage] ?? PermissionStatus.denied;
}
if (status.isGranted) {
setState(() {
this.status = "Permissions granted. Injecting stickers...";
_injectStickers();
});
} else {
setState(() {
this.status = "Permissions denied. Cannot inject stickers.";
});
}
}
Future<void> _injectStickers() async {
try {
// 替换为你的贴纸包路径
String stickerPackPath = "/path/to/your/sticker/pack";
bool success = await WhatsAppStickersInjector.injectStickers(
packName: "My Sticker Pack",
authorName: "Your Name",
trayImageAssetPath: "path/to/tray_image.png", // 托盘图片的路径
stickerImagesAssetPaths: [
"path/to/sticker1.png",
"path/to/sticker2.png",
// 添加更多的贴纸图片路径
],
stickerPackPath: stickerPackPath,
);
if (success) {
setState(() {
status = "Stickers injected successfully!";
});
} else {
setState(() {
status = "Failed to inject stickers.";
});
}
} catch (e) {
setState(() {
status = "Error: ${e.message}";
});
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("WhatsApp Sticker Injector"),
),
body: Center(
child: Text(status),
),
);
}
}
注意事项:
- 权限:此代码请求存储权限,因为贴纸包需要被复制到WhatsApp的特定目录中。
- 路径:你需要将
stickerPackPath
和各个贴纸图片路径替换为你的实际路径。 - Root权限:
whatsapp_stickers_injector
插件通常要求设备已经root,因为它需要访问和修改WhatsApp的内部存储。 - 错误处理:代码中有基本的错误处理,但你可能需要根据实际情况进行更多的定制。
确保你已经仔细阅读了 whatsapp_stickers_injector
插件的文档,因为不同版本的插件可能会有不同的API和要求。