Flutter资源选择插件simple_asset_picker的使用
Flutter资源选择插件simple_asset_picker的使用
simple_asset_picker 插件介绍
simple_asset_picker
是一个参考了 KakaoTalk UI 设计的 Flutter 图片选择插件。它仅支持 Android 和 iOS 平台,并且依赖于 photo_manager
、flutter_riverpod
和 video_player
这些库。该插件支持照片和视频的选择、拍摄、预览等功能。
使用方法
添加依赖
在 pubspec.yaml
文件中添加以下依赖:
dependencies:
simple_asset_picker: 最新版本使用
Android 部署
在 AndroidManifest.xml
中添加权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO" />
<uses-permission android:name="android.permission.READ_MEDIA_AUDIO" />
<uses-permission android:name="android.permission.READ_MEDIA_VISUAL_USER_SELECTED" />
<uses-permission android:name="android.permission.INTERNET" />
确保 Gradle 版本(gradle-wrapper.properties
)为 7.5.1 及以上,Kotlin 版本(ext.kotlin_version
)为 1.7.22 及以上,AGP 版本(com.android.tools.build:gradle
)为 7.2.2 及以上。
修改 build.gradle
中的最小 SDK 版本:
defaultConfig {
...
minSdkVersion 22
...
}
iOS 部署
在 Info.plist
中添加权限设置:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
<key>NSPhotoLibraryUsageDescription</key>
<string>ギャラリーアクセス権限が必要です.</string>
<key>NSPhotoLibraryAddUsageDescription</key>
<string>写真や動画の撮影を行うための権限が必要です.</string>
<key>NSCameraUsageDescription</key>
<string>カメラアクセス権限が必要です.</string>
<key>NSMicrophoneUsageDescription</key>
<string>映像撮影のために必要な権限です.</string>
<!-- localize -->
<key>CFBundleDevelopmentRegion</key>
<array>
<string>ko-KR</string>
<string>en-US</string>
</array>
<key>CFBundleLocalizations</key>
<array>
<string>ko-KR</string>
<string>en-US</string>
</array>
如果权限被拒绝,会显示“权限未授予”信息。为了确保权限总是被授予,可以使用 permission_handler
库来处理权限请求:
import 'package:permission_handler/permission_handler.dart';
void main() async {
await PermissionHandler().request();
runApp(const ProviderScope(child: MyApp()));
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
useMaterial3: true,
),
home: const Home(),
);
}
}
class Home extends StatefulWidget {
const Home({super.key});
[@override](/user/override)
State<Home> createState() => _HomeState();
}
class _HomeState extends State<Home> {
List<AssetEntity> list = [];
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
body: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
ElevatedButton(
onPressed: () async {
list = await Picker.pickAssets(
context,
pickerConfig: PickerConfig(
mainColor: Colors.green,
brightness: Brightness.light,
gridCount: 3,
maxAssets: 10,
pageSize: 30,
requestType: RequestType.common,
selectedAssets: list,
useCamera: true,
),
);
setState(() {});
},
child: const Text('사진선택'),
),
const SizedBox(
height: 50,
),
Container(
color: Colors.grey[200],
height: list.isEmpty ? 0 : 120,
padding: const EdgeInsets.symmetric(
vertical: 5,
horizontal: 15,
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
const Text('선택한 사진'),
Expanded(
child: ListView.separated(
scrollDirection: Axis.horizontal,
itemCount: list.length,
itemBuilder: (_, index) {
return SizedBox(
width: 100,
child: Stack(
fit: StackFit.expand,
children: [
Padding(
padding: const EdgeInsets.all(5),
child: AssetEntityImage(
list[index],
isOriginal: false,
thumbnailSize: const ThumbnailSize.square(80),
fit: BoxFit.contain,
),
),
],
),
);
},
separatorBuilder: (_, __) {
return const SizedBox(
width: 5,
);
},
),
),
],
),
),
],
),
);
}
}
更多关于Flutter资源选择插件simple_asset_picker的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter资源选择插件simple_asset_picker的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是一个关于如何在Flutter项目中使用simple_asset_picker
插件的示例代码。simple_asset_picker
是一个强大的资源选择插件,允许用户从设备中选择图片、视频等多媒体资源。
1. 添加依赖
首先,在你的pubspec.yaml
文件中添加simple_asset_picker
依赖:
dependencies:
flutter:
sdk: flutter
simple_asset_picker: ^x.y.z # 请替换为最新版本号
然后运行flutter pub get
来获取依赖。
2. 导入包
在你的Dart文件中导入simple_asset_picker
包:
import 'package:flutter/material.dart';
import 'package:simple_asset_picker/simple_asset_picker.dart';
3. 使用AssetPicker
下面是一个简单的示例,展示如何使用AssetPicker
来选择图片和视频:
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Asset Picker Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
List<AssetEntity> _assets = [];
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Asset Picker Demo'),
),
body: Column(
children: <Widget>[
Expanded(
child: GridView.builder(
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 3,
crossAxisSpacing: 4.0,
mainAxisSpacing: 4.0,
),
itemCount: _assets.length,
itemBuilder: (context, index) {
AssetEntity asset = _assets[index];
AssetThumbData? thumbData = asset.thumbDataWithSize(
width: 100,
height: 100,
);
return GestureDetector(
onTap: () {
// 你可以在这里添加点击图片后的逻辑,比如预览图片
},
child: Image.memory(
thumbData!.bytes!,
fit: BoxFit.cover,
),
);
},
),
),
ElevatedButton(
onPressed: () async {
final List<AssetEntity> result = await AssetPicker.pickAssets(
context,
requestType: RequestType.imageAndVideo,
maxAssets: 9,
selectedAssets: _assets,
);
setState(() {
_assets = result;
});
},
child: Text('选择图片和视频'),
),
],
),
);
}
}
代码解释
- 依赖添加:首先在
pubspec.yaml
中添加simple_asset_picker
依赖。 - 导入包:在Dart文件中导入
simple_asset_picker
包。 - UI构建:
- 使用
Scaffold
和AppBar
创建了一个简单的页面结构。 - 使用
GridView.builder
展示已选择的资源(图片和视频)。 - 使用
ElevatedButton
创建一个按钮,点击按钮时会调用AssetPicker.pickAssets
方法,允许用户从设备中选择资源。
- 使用
- 资源选择:
AssetPicker.pickAssets
方法允许用户选择图片和视频。requestType: RequestType.imageAndVideo
表示用户可以选择图片和视频。maxAssets: 9
限制用户最多选择9个资源。selectedAssets: _assets
传递已选择的资源列表,以便在下次打开选择器时显示已选择的资源。
这样,你就可以在你的Flutter项目中使用simple_asset_picker
插件来选择图片和视频资源了。