Flutter图像处理插件pix_bb的使用

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

Flutter图像处理插件pix_bb的使用

关于这个项目

本插件提供了一个简单易用的界面,用于在您的 Flutter 应用程序中集成 Banco do Brasil 的 Pix API。通过此插件,您可以快速高效地获取交易信息。


前置条件


开始使用

要将此插件添加到您的项目中,请遵循以下步骤:

a) 在 pubspec.yaml 中添加依赖项

dependencies:
  pix_bb: <最新版本>

b) 或使用命令行安装

dart pub add pix_bb

如何使用

此插件可以快速获取交易信息!

首先实例化类并传递适当的参数:

final pixBB = PixBB(
  ambiente: Ambiente.homologacao,
  basicKey: 'BASIC_KEY',
  applicationDeveloperKey: 'APP_DEV_KEY',
);

然后发起请求以获取过去四天内的交易列表:

await pixBB.getToken().then((token) {
  pixBB.fetchTransactions(token: token).then((response) {
    print(response); // 返回一个 Pix 列表。
  }).catchError((e) {
    print(e);
    // 这是一个 PixException。
    // 此插件提供了几种处理可能发生的错误的方法。
    // 请参阅文档!
  });
});

示例代码

以下是完整的示例代码,展示了如何使用此插件来获取和展示交易信息:

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

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

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

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      theme: ThemeData(
        useMaterial3: true,
      ),
      debugShowCheckedModeBanner: false,
      home: const HomePage(),
    );
  }
}

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

  @override
  State<HomePage> createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  late PixBB pixBB;

  @override
  void initState() {
    super.initState();
    pixBB = PixBB(
      ambiente: Ambiente.producao,
      basicKey: '', // 请替换为您的实际密钥
      developerApplicationKey: '', // 请替换为您的实际开发者密钥
    );
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Pix API Banco do Brasil'),
      ),
      body: FutureBuilder(
        future: pixBB.getToken().then(
          (token) => pixBB.fetchTransactions(
            token: token,
            dateTimeRange: DateTimeRange(
              start: DateTime.now().subtract(const Duration(days: 4)),
              end: DateTime.now(),
            ),
          ),
        ),
        builder: (context, snapshot) {
          switch (snapshot.connectionState) {
            case ConnectionState.none:
            case ConnectionState.waiting:
            case ConnectionState.active:
              return const Center(child: CircularProgressIndicator());
            case ConnectionState.done:
              if (snapshot.hasData && snapshot.data!.isNotEmpty) {
                int length = snapshot.data!.length;

                return RefreshIndicator(
                  onRefresh: () {
                    return Future(() => setState(() {}));
                  },
                  child: ListView.builder(
                    itemCount: length,
                    itemBuilder: (context, index) {
                      var transaction = snapshot.data![index];

                      return ListTile(
                        title: Text(transaction.pagador.nome.split(' ')[0]),
                        subtitle: Text(transaction.valor),
                        trailing: Text(transaction.horario),
                      );
                    },
                  ),
                );
              } else if (snapshot.hasError) {
                if (snapshot.error is PixException) {
                  final error = snapshot.error;
                  final errorMessage = error is PixException
                      ? error.error
                      : snapshot.error.toString();
                  return Center(
                    child: Text(errorMessage),
                  );
                }
              }
              return const Center(
                child: Text('未找到任何交易'),
              );
          }
        },
      ),
    );
  }
}

功能特性

  • 查询功能:

    • 获取最近的交易
    • 按日期获取交易
  • 其他功能(当前正在进行开发):

    • 动态二维码配置:创建具有唯一标识的 Pix 账单;
    • 收据验证:验证生成账单的状态;
    • 审查:允许更改生成的账单数据;
    • 退款(请求和查询):允许部分或全额退还 Pix 给付款人,并可查询退款。

使用案例

请求访问令牌

请求令牌:

final token = await pixBB.getToken();

获取 Pix 交易

默认时间范围:

final listPix = await pixBB.fetchTransactions(
  token: token,
);
// 返回过去四天的交易

自定义时间范围:

final listPix = await pixBB.fetchTransactions(
  token: token,
  dateTimeRange: DateTimeRange(
    start: DateTime.now().subtract(Duration(days: 1)),
    end: DateTime.now(),
  ),
);
// 返回指定日期范围内的交易
// 注意:日期差不能超过 4 天

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

1 回复

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


当然,以下是一个关于如何在Flutter项目中使用pix_bb图像处理插件的示例代码。pix_bb插件通常用于图像裁剪、选择特定区域等操作。以下是一个基本的示例,展示了如何使用该插件进行图像选择和裁剪。

首先,确保在pubspec.yaml文件中添加pix_bb依赖:

dependencies:
  flutter:
    sdk: flutter
  pix_bb: ^最新版本号  # 请替换为当前最新版本号

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

接下来,我们编写一个Flutter应用来演示如何使用pix_bb插件。

1. 导入必要的包

import 'package:flutter/material.dart';
import 'package:pix_bb/pix_bb.dart';
import 'dart:ui' as ui;
import 'dart:typed_data';

2. 创建主应用

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

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

3. 创建图像裁剪屏幕

class ImageCropScreen extends StatefulWidget {
  @override
  _ImageCropScreenState createState() => _ImageCropScreenState();
}

class _ImageCropScreenState extends State<ImageCropScreen> {
  Uint8List? _imageBytes;
  PixBBController? _pixBBController;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Image Crop with pix_bb'),
      ),
      body: Column(
        children: [
          Expanded(
            child: _imageBytes == null
                ? Center(child: Text('No Image Selected'))
                : PixBBPicker(
                    controller: _pixBBController!,
                    imageProvider: MemoryImage(_imageBytes!),
                    onResult: (result) {
                      setState(() {
                        // 处理裁剪结果
                        final croppedImageBytes = result.imageBytes;
                        // 可以在这里显示或保存裁剪后的图像
                      });
                    },
                  ),
          ),
          ElevatedButton(
            onPressed: _pickImage,
            child: Text('Pick Image'),
          ),
        ],
      ),
    );
  }

  Future<void> _pickImage() async {
    final pickedFile = await ImagePicker().pickImage(source: ImageSource.gallery);
    if (pickedFile != null) {
      setState(() {
        _imageBytes = pickedFile.readAsBytesSync();
        _pixBBController = PixBBController(
          imageBytes: _imageBytes!,
          maxCropArea: Size(500, 500),  // 设置最大裁剪区域大小
        );
      });
    }
  }
}

4. 添加ImagePicker依赖

由于我们从设备图库中选择图像,因此需要image_picker插件。在pubspec.yaml中添加以下依赖:

dependencies:
  flutter:
    sdk: flutter
  pix_bb: ^最新版本号
  image_picker: ^最新版本号  # 请替换为当前最新版本号

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

5. 处理ImagePicker权限

AndroidManifest.xml中添加必要的权限:

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

并在iOS的Info.plist中添加权限描述(如果需要)。

总结

上述代码展示了如何在Flutter中使用pix_bb插件进行图像选择和裁剪。你可以根据需求进一步定制裁剪区域的外观、行为等。确保在实际项目中处理图像数据时考虑到性能和内存管理。

回到顶部