Flutter图片选择插件fb_image_picker的使用

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

Flutter图片选择插件fb_image_picker的使用

描述

A Flutter插件用于iOS和Android从图库中选择图片,并通过相机拍摄新照片。- 使用爱

设置

在你的gradle.properties文件中添加以下内容:

android.useAndroidX=true
android.enableJetifier=true

确保在你的android/app/build.gradle文件中将compileSdkVersion设置为31:

android {
  compileSdkVersion 31
  ...
}

确保在你的android/app/build.gradle文件中将minSdkVersion设置为21:

android {
  minSdkVersion 21
  ...
}

设置权限:

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

截图

选择图片: 截图

显示骨架: 截图

显示文件夹: 截图

显示相机: 截图

开始使用

在你的pubspec.yaml文件中添加包的URL。

使用

只需导航到FBImagePicker:

TextButton(
  child: const Text(
    'FB Image Picker',
  ),
  onPressed: () {
    Navigator.push(
      context,
      MaterialPageRoute(
        builder: (context) => FBImagePicker(
          btnColor: Colors.blue,
          title: 'FB Image Picker',
          afterNextBTN: () {
            Navigator.pop(context);
          },
          backOnSystem: () {
            Navigator.pop(context);
          },
          onComplete: (final imagePickerList) {
            setState(() {
              imageList = imagePickerList;
            });
          },
        ),
      ),
    );
  }
)

所有参数

backgroundColor: Colors.white,
btnColor: Colors.blue,
textStyle: TextStyle(color: Colors.black),
title: 'FB Image Picker',
enableCamera: true,
afterNextBTN: () {},
backOnSystem: () {},
onComplete: (imagePickerList) {},

示例代码

example/main.dart

import 'dart:io';

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

void main() => runApp(const MyApp());

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return const MaterialApp(
      title: 'FB Image Picker',
      home: Example(),
    );
  }
}

class Example extends StatefulWidget {
  const Example({Key? key}) : super(key: key);

  @override
  State<Example> createState() => _ExampleState();
}

class _ExampleState extends State<Example> {
  List imageList = [];

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: SingleChildScrollView(
        child: Container(
          width: MediaQuery.of(context).size.width,
          // height: MediaQuery.of(context).size.height,
          color: Colors.black.withOpacity(0.9),
          child: Column(
            crossAxisAlignment: CrossAxisAlignment.center,
            children: [
              const Padding(
                padding: EdgeInsets.only(top: 60, bottom: 20),
                child: Text(
                  'FB Image Picker',
                  style: TextStyle(color: Colors.white, fontSize: 18),
                ),
              ),
              Padding(
                padding: const EdgeInsets.only(bottom: 15),
                child: TextButton(
                  child: const Text(
                    'FB Image Picker',
                    style: TextStyle(color: Colors.green, fontSize: 16),
                  ),
                  onPressed: () {
                    Navigator.push(
                      context,
                      MaterialPageRoute(
                        builder: (context) => FBImagePicker(
                          btnColor: Colors.blue,
                          title: 'FB Image Picker',
                          afterNextBTN: () {
                            Navigator.pop(context);
                          },
                          backOnSystem: () {
                            Navigator.pop(context);
                          },
                          onComplete: (final imagePickerList) {
                            setState(() {
                              imageList = imagePickerList;
                            });
                          },
                        ),
                      ),
                    );
                  },
                ),
              ),
              if (imageList.length == 1)
                Image.file(
                  File(imageList[0]),
                  fit: BoxFit.cover,
                ),
              if (imageList.length == 2)
                Column(
                  children: [
                    Image.file(
                      File(imageList[0]),
                      fit: BoxFit.cover,
                    ),
                    Image.file(
                      File(imageList[1]),
                      fit: BoxFit.cover,
                    ),
                  ],
                )
            ],
          ),
        ),
      ),
    );
  }
}

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

1 回复

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


当然,以下是一个关于如何在Flutter项目中使用fb_image_picker插件来选择图片的示例代码。需要注意的是,fb_image_picker可能是一个特定版本或自定义的插件名称,但通常Flutter社区更常使用image_picker插件。为了说明如何使用类似的图片选择功能,我将基于image_picker插件来展示,因为fb_image_picker可能并不广为人知或已经过时。如果你确实有一个特定的fb_image_picker插件,请确保参考其官方文档。

首先,你需要在pubspec.yaml文件中添加image_picker依赖:

dependencies:
  flutter:
    sdk: flutter
  image_picker: ^0.8.4+4  # 请检查最新版本号并更新

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

接下来,在你的Dart文件中,你可以这样使用image_picker来选择图片:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: ImagePickerDemo(),
    );
  }
}

class ImagePickerDemo extends StatefulWidget {
  @override
  _ImagePickerDemoState createState() => _ImagePickerDemoState();
}

class _ImagePickerDemoState extends State<ImagePickerDemo> {
  File? _imageFile;
  final ImagePicker _picker = ImagePicker();

  Future<void> _pickImage(ImageSource source) async {
    final XFile? image = await _picker.pickImage(source: source);
    if (image != null) {
      final File imageFile = File(image.path);
      setState(() {
        _imageFile = imageFile;
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Image Picker Demo'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            if (_imageFile != null)
              Image.file(
                _imageFile!,
                width: 300,
                height: 300,
                fit: BoxFit.cover,
              ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: () => _pickImage(ImageSource.gallery),
              child: Text('Pick Image from Gallery'),
            ),
            SizedBox(height: 10),
            ElevatedButton(
              onPressed: () => _pickImage(ImageSource.camera),
              child: Text('Pick Image from Camera'),
            ),
          ],
        ),
      ),
    );
  }
}

在这个示例中:

  1. 我们首先导入了必要的包。
  2. MyApp类中,我们定义了应用程序的主入口。
  3. ImagePickerDemo是一个有状态的widget,它包含一个用于存储所选图片的File对象。
  4. _pickImage方法使用ImagePicker实例从指定的ImageSource(图库或相机)中选择图片。
  5. build方法中,我们构建了一个包含两个按钮的UI:一个用于从图库中选择图片,另一个用于从相机中选择图片。如果已选择图片,则显示该图片。

请确保在Android和iOS项目中配置必要的权限(如访问相机和存储的权限),以便能够正常使用这些功能。对于Android,你需要在AndroidManifest.xml中添加权限声明;对于iOS,你需要在Info.plist中添加相应的权限描述。

如果你确实有一个特定的fb_image_picker插件,并且它与image_picker的用法有所不同,请参考该插件的官方文档或GitHub仓库以获取准确的使用指南和示例代码。

回到顶部