Flutter Instagram风格图片选择插件flutter_instagram_image_picker的使用

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

Flutter Instagram风格图片选择插件flutter_instagram_image_picker的使用

flutter_instagram_image_picker

这是一个用于从Instagram中选择图片的Flutter包。

开始使用

该插件根据提供的访问令牌显示用户的Instagram相册和照片。它自己处理授权和登录,然后只提供访问数据(userId+SessionKey)给相册。

使用方法

  1. 检查用户是否已登录,如果没有,则提示他输入登录信息,并导航到InstagramLoginPage

    bool isLogged = await InstagramAuth().isLogged;
    // 检查用户是否已经登录,如果未登录则让用户登录
    if (!isLogged) {
      bool loginStatus = await InstagramAuth().signUserIn(context);
    
      // 如果用户取消了操作
      if (!loginStatus)
        return;
    }
    
  2. 通过访问他的数据来检查用户是否成功登录。

    final accessMapData = await InstagramAuth().accessData;
    if(accessMapData == null){
      return null;
    }
    
  3. 获取访问数据后,可以导航到InstagramImagePicker

    Navigator.push(
      context,
      MaterialPageRoute(
        builder: (context) => InstagramImagePicker(
          accessMapData, // 访问数据
          showLogoutButton: true, // 显示退出按钮
          onDone: (photos) {
            // photos是你在选择器中选择的照片
            // 每张照片都有url
            Navigator.pop(context);
          },
          onCancel: () => Navigator.pop(context), // 取消选择时的操作
        ),
      ),
    );
    

截图

  • 登录页面: Login Page

  • 图片选择器: Image Picker

  • 图片选择器(选择后): Image Picker (after selection)

完整示例代码

import 'package:flutter/material.dart';
import 'package:flutter_instagram_image_picker/instagram_auth.dart';
import 'package:flutter_instagram_image_picker/picker.dart';

void main() => runApp(
      MaterialApp(
        title: 'Instagram picker Demo',
        theme: ThemeData(primarySwatch: Colors.blue),
        home: const LoginPage(),
        debugShowCheckedModeBanner: false,
      ),
    );

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Instagram login demo'),
      ),
      body: Center(
        child: ElevatedButton(
            child: const Text("Continue with instagram"),
            onPressed: () async {
              // 检查用户是否已经登录
              bool isLogged = await InstagramAuth().isLogged;
              if (!isLogged) {
                // 如果未登录,则尝试登录
                bool loginStatus = await InstagramAuth().signUserIn(context);

                // 如果用户取消了操作
                if (!loginStatus) return;
              }

              // 获取访问数据
              final accessMapData = await InstagramAuth().accessData;
              if (accessMapData == null) {
                return;
              }

              // 获取到访问数据后,跳转到图片选择器界面
              Navigator.push(
                context,
                MaterialPageRoute(
                  builder: (context) => InstagramImagePicker(
                    accessMapData, // 访问数据
                    showLogoutButton: true, // 显示退出按钮
                    onDone: (items) {
                      // 打印选中的图片URL
                      for (var element in items) {
                        print('selected: ${element.url}');
                      }
                      Navigator.pop(context); // 关闭选择器界面
                    },
                    onCancel: () => Navigator.pop(context), // 取消选择时关闭界面
                  ),
                ),
              );
            }),
      ),
    );
  }
}

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

1 回复

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


当然,以下是如何在Flutter项目中集成和使用flutter_instagram_image_picker插件的一个代码案例。这个插件允许你以类似于Instagram的风格选择图片。

首先,确保你已经在pubspec.yaml文件中添加了该插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  flutter_instagram_image_picker: ^latest_version  # 请替换为最新版本号

然后,运行flutter pub get来获取依赖。

接下来,你可以在你的Flutter项目中导入并使用这个插件。以下是一个简单的示例,展示了如何使用flutter_instagram_image_picker来选择图片:

import 'package:flutter/material.dart';
import 'package:flutter_instagram_image_picker/flutter_instagram_image_picker.dart';
import 'package:image_picker/image_picker.dart'; // 这个插件用于实际获取图片数据

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

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

class ImagePickerScreen extends StatefulWidget {
  @override
  _ImagePickerScreenState createState() => _ImagePickerScreenState();
}

class _ImagePickerScreenState extends State<ImagePickerScreen> {
  File? _selectedImage;

  final InstagramImagePicker _instagramImagePicker = InstagramImagePicker();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Instagram Image Picker Demo'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            _selectedImage == null
                ? Text('No image selected.')
                : Image.file(_selectedImage!),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: _pickImage,
              child: Text('Pick Image'),
            ),
          ],
        ),
      ),
    );
  }

  Future<void> _pickImage() async {
    try {
      final List<InstagramImage> pickedImages = await _instagramImagePicker.pickImages(
        count: 1, // 选择图片的数量
        width: 800, // 图片宽度
        height: 800, // 图片高度
        enableCircularCrop: true, // 是否启用圆形裁剪
      );

      if (pickedImages.isNotEmpty) {
        final InstagramImage pickedImage = pickedImages.first;
        final File imageFile = File(pickedImage.path);

        // 这里我们使用image_picker插件的ImagePicker来获取实际的图片数据,
        // 因为flutter_instagram_image_picker只提供了图片路径,不直接提供File对象。
        // 但在本例中,我们已经有了File对象,所以这一步可以省略,仅作说明。
        // final XFile? xFile = await ImagePicker().pickImage(source: ImageSource.gallery);
        // if (xFile != null) {
        //   final File imageFile = File(xFile.path);

        setState(() {
          _selectedImage = imageFile;
        });
      }
    } catch (e) {
      print(e);
    }
  }
}

注意

  1. flutter_instagram_image_picker插件的pickImages方法返回一个包含InstagramImage对象的列表,每个对象包含图片的路径等信息。
  2. 在这个例子中,由于flutter_instagram_image_picker直接返回了图片路径,我们直接使用这个路径创建了一个File对象。如果你需要更多关于图片处理的功能,可以结合image_picker插件使用,但在这个例子中已经足够。
  3. 请确保你已经添加了必要的权限到你的AndroidManifest.xmlInfo.plist文件中,以允许应用访问设备的图库。

这是一个基本的示例,你可以根据需要进一步自定义和扩展。

回到顶部