Flutter日期选择器插件full_picker的使用

发布于 1周前 作者 yibo5220 来自 Flutter

Flutter日期选择器插件full_picker的使用

插件简介

logo

Full Picker 是一个Flutter包,旨在帮助您以不同的模式选择文件。该插件支持多种功能,如多文件选择、视频压缩、图片裁剪、自定义相机、为文件设置自定义名称、语音记录等,并且兼容Material 1, 2, 3设计规范。

pub package

主要特性

  • 多文件选择
  • 视频压缩(仅支持Android和iOS)
  • 图片裁剪(仅支持Android和iOS)
  • 自定义相机
  • 文件的自定义名称
  • 语音记录
  • URL选择
  • 支持Material 1,2,3

使用示例

以下是一个简单的FullPicker使用示例:

import 'package:flutter/material.dart';
import 'package:full_picker/full_picker.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) => MaterialApp(
        debugShowCheckedModeBanner: false,
        theme: ThemeData(
          useMaterial3: true,
          brightness: Brightness.light,
          colorScheme: ThemeData().colorScheme.copyWith(primary: Colors.black),
        ),
        home: const FilePickerTest(),
      );
}

class FilePickerTest extends StatefulWidget {
  const FilePickerTest({super.key});

  @override
  State<FilePickerTest> createState() => _ExonFilePicker();
}

class _ExonFilePicker extends State<FilePickerTest> {
  String info = 'Not Selected !';

  @override
  Widget build(BuildContext context) => Scaffold(
        appBar: AppBar(title: const Text('Full Picker Example')),
        body: Column(
          children: <Widget>[
            ElevatedButton(
              style: ButtonStyle(
                backgroundColor: MaterialStateProperty.all<Color>(Colors.black),
              ),
              child: const Padding(
                padding: EdgeInsets.all(8),
                child: Text(
                  'Open Full Picker',
                  style: TextStyle(fontSize: 25, color: Colors.white),
                ),
              ),
              onPressed: () {
                FullPicker(
                  context: context,
                  prefixName: 'test',
                  file: true,
                  voiceRecorder: true,
                  video: true,
                  videoCamera: true,
                  imageCamera: true,
                  imageCropper: true,
                  multiFile: true,
                  url: true,
                  onError: (int value) {
                    if (kDebugMode) {
                      print(' ----  onError ----=$value');
                    }
                  },
                  onSelected: (FullPickerOutput value) async {
                    if (kDebugMode) {
                      print(' ----  onSelected ----');
                    }

                    if (value.fileType != FullPickerType.url) {
                      info = '';
                      for (int i = 0; i < value.name.length; i++) {
                        final String fileSizeInt = fileSize(
                          await value.xFile[i]!.readAsBytes(),
                        );

                        info =
                            '${info}File Type :${value.fileType}\nPath File :${value.name[i]}\nSize File :$fileSizeInt\n--------\n';
                      }
                    } else {
                      info = value.data as String;
                    }

                    setState(() {});
                  },
                );
              },
            ),
            Expanded(
              child: SingleChildScrollView(
                child: Padding(
                  padding: const EdgeInsets.all(2),
                  child: Row(
                    children: <Widget>[
                      Expanded(
                        child: Text(
                          'Output :\n\n$info',
                          style: const TextStyle(fontSize: 18),
                        ),
                      ),
                    ],
                  ),
                ),
              ),
            ),
          ],
        ),
      );
}

配置说明

Android配置

  • API < 29

    AndroidManifest.xml中添加权限:

    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="28"/>
    
  • API >= 29

    AndroidManifest.xml中添加权限:

    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    

    并在Project-level build.gradle中添加仓库:

    allprojects {
        repositories {
            ...
            maven { url 'https://jitpack.io' }
        }
    }
    

    Module-level build.gradle中添加依赖:

    implementation 'com.github.AbedElazizShe:LightCompressor:1.0.0'
    

iOS配置

  • Info.plist文件中添加:

    <key>NSPhotoLibraryUsageDescription</key>
    <string>${PRODUCT_NAME} library Usage</string>
    
  • 如果需要语音记录功能,在Info.plist中添加:

    <key>NSMicrophoneUsageDescription</key>
    <string>We need to access to the microphone to record audio file</string>
    

macOS配置

  • Info.plist文件中添加:

    <key>NSMicrophoneUsageDescription</key>
    <string>We need to access to the microphone to record audio file</string>
    

多语言支持

Full Picker 支持多语言定制化。例如:

FullPickerLanguage language = FullPickerLanguage.copy(
    camera: S.current.camera,
    selectFile: S.current.selectFile,
    file: S.current.file,
    voiceRecorder: S.current.voiceRecorder,
    url: S.current.url,
    enterURL: S.current.enterURL,
    cancel: S.current.cancel,
    ok: S.current.ok,
    gallery: S.current.gallery,
    cropper: S.current.cropper,
    onCompressing: S.current.onCompressing,
    tapForPhotoHoldForVideo: S.current.tapForPhotoHoldForVideo,
    cameraNotFound: S.current.cameraNotFound,
    noVoiceRecorded: S.current.noVoiceRecorded,
    denyAccessPermission: S.current.denyAccessPermission);

FullPicker(
  ...
  language: language,
  ...
);

其中 S 是来自 intl Package 的国际化工具。

以上是关于full_picker插件的基本介绍和使用方法。如果您有任何问题或需要进一步的帮助,请随时提问!


更多关于Flutter日期选择器插件full_picker的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter日期选择器插件full_picker的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是一个关于如何在Flutter项目中使用full_picker日期选择器插件的示例代码。这个插件允许你选择日期和时间。请确保你已经将full_picker添加到你的pubspec.yaml文件中:

dependencies:
  flutter:
    sdk: flutter
  full_picker: ^最新版本号  # 请替换为实际的最新版本号

然后,运行flutter pub get来安装依赖。

接下来是一个完整的示例代码,展示如何在Flutter应用中使用full_picker

import 'package:flutter/material.dart';
import 'package:full_picker/full_picker.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Full Picker Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  DateTime? selectedDateTime;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Full Picker Demo'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              selectedDateTime == null
                  ? 'No date selected'
                  : 'Selected Date: ${selectedDateTime!.toLocal()}',
              style: TextStyle(fontSize: 20),
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: () {
                _showDatePicker(context);
              },
              child: Text('Select Date and Time'),
            ),
          ],
        ),
      ),
    );
  }

  Future<void> _showDatePicker(BuildContext context) async {
    final DateTime? picked = await showFullPicker(
      context: context,
      initialDate: selectedDateTime ?? DateTime.now(),
      firstDate: DateTime(2000),
      lastDate: DateTime(2101),
      locale: Localizations.localeOf(context),
    );

    if (picked != null && picked != selectedDateTime) {
      setState(() {
        selectedDateTime = picked;
      });
    }
  }
}

解释

  1. 依赖安装:确保在pubspec.yaml文件中添加了full_picker依赖,并运行flutter pub get

  2. 主应用结构

    • MyApp:MaterialApp的根组件。
    • MyHomePage:主页面,包含状态管理。
  3. 状态管理

    • _MyHomePageState类中包含一个DateTime? selectedDateTime变量,用于存储用户选择的日期和时间。
  4. UI组件

    • AppBar:应用栏,显示标题。
    • Column:包含文本和按钮的列。
    • Text:显示当前选择的日期和时间,或者提示用户未选择日期。
    • ElevatedButton:按钮,点击后显示日期选择器。
  5. 日期选择器

    • _showDatePicker方法使用showFullPicker函数显示日期和时间选择器。
    • 选择完成后,使用setState更新UI,显示新的日期和时间。

这个示例代码展示了如何使用full_picker插件在Flutter应用中实现日期和时间的选择功能。你可以根据需要进一步自定义和扩展这个示例。

回到顶部