Flutter卡片展示插件card_flutter的使用

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

Flutter卡片展示插件card_flutter的使用

在Flutter应用中集成Card SDK可以帮助你实现卡片支付功能。以下是关于如何使用card_flutter插件的完整示例和详细步骤。

介绍

在开始开发之前,确保你的项目满足以下要求:

  • iOS 13.0+
  • Dart 3.0.0+
  • Java版本11
  • Android SDK/API级别至少为24
  • 需要在iOS项目的info.plist中添加相机权限以支持卡片扫描功能。
  • 在Android项目的manifest文件中添加互联网权限以支持在线支付。
<key>NSCameraUsageDescription</key> 
<string>Card SDK needs it for scanner functionality</string>
<uses-permission android:name="android.permission.INTERNET" />

示例演示

示例演示

步骤1:需求

确保你的项目满足上述要求,并准备好必要的API密钥。

步骤2:获取公共密钥

访问Tap公司的注册页面并注册你的包名以获取所需的Tap Key。

步骤3:安装

在你的Flutter项目的pubspec.yaml文件中添加以下依赖:

dependencies:
  card_flutter: 1.0.8

然后在你的代码库中导入该插件:

import 'package:card_flutter/card_flutter.dart';

步骤4:集成Card-Flutter

这里提供简单集成和高级集成两种方式。我们将主要关注简单集成。

简单集成

创建一个包含必要参数的Map对象,并将其传递给TapCardViewWidget

Map<String, dynamic> parameters = {
  "customer": {
    "name": [
      {"first": "TAP", "middle": "", "lang": "en", "last": "PAYMENTS"}
    ],
    "contact": {
      "email": "tap@tap.company",
      "phone": {"countryCode": "+965", "number": "88888888"}
    }
  },
  "purpose": "Charge",
  "operator": {"publicKey": "pk_test_YhUjg9PNT8oDlKJ1aE2fMRz7"},
  "scope": "Token",
  "order": {
    "description": "",
    "currency": "SAR",
    "amount": 1.0
  }
};

将这些参数传递给TapCardViewWidget

TapCardViewWidget(
  sdkConfiguration: parameters,
  generateToken: generateToken,
);
完整代码示例
import 'package:card_flutter/card_flutter.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';

class CardViewScreen extends StatefulWidget {
  final Map<String, dynamic> dictionaryMap;

  const CardViewScreen({super.key, required this.dictionaryMap});

  @override
  State<CardViewScreen> createState() => _CardViewScreenState();
}

class _CardViewScreenState extends State<CardViewScreen> {
  dynamic mCardSDKResponse;
  bool generateToken = false;
  bool showTapTokenButton = false;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Plugin example app'),
        leading: IconButton(
          onPressed: () {
            Navigator.pushAndRemoveUntil(
              context,
              MaterialPageRoute(builder: (context) => const ConfigSettingsScreen()),
              (route) => false,
            );
          },
          icon: const Icon(CupertinoIcons.back),
        ),
      ),
      body: Column(
        mainAxisSize: MainAxisSize.min,
        children: [
          TapCardViewWidget(
            sdkConfiguration: widget.dictionaryMap,
            onReady: () {
              setState(() {
                showTapTokenButton = true;
              });
            },
            onFocus: () {
              setState(() {
                generateToken = false;
              });
            },
            onSuccess: (String? success) {
              setState(() {
                mCardSDKResponse = success.toString();
                generateToken = false;
              });
            },
            onValidInput: (String? validInput) {
              setState(() {
                mCardSDKResponse = validInput.toString();
                generateToken = false;
              });
            },
            onHeightChange: (String? heightChange) {
              setState(() {
                mCardSDKResponse = heightChange.toString();
              });
            },
            onBinIdentification: (String? bindIdentification) {
              setState(() {
                mCardSDKResponse = bindIdentification.toString();
              });
            },
            onChangeSaveCard: (String? saveCard) {
              setState(() {
                mCardSDKResponse = saveCard.toString();
              });
            },
            onError: (String? error) {
              setState(() {
                mCardSDKResponse = error.toString();
                generateToken = false;
              });
            },
            generateToken: generateToken,
            cardNumber: "512345000000****",
            cardExpiry: "01/39",
          ),
          const SizedBox(height: 10),
          Visibility(
            visible: showTapTokenButton,
            child: Padding(
              padding: const EdgeInsets.symmetric(horizontal: 12),
              child: FilledButton(
                onPressed: () {
                  setState(() {
                    generateToken = true;
                  });
                },
                style: FilledButton.styleFrom(
                  fixedSize: Size(MediaQuery.sizeOf(context).width * 0.96, 50),
                  shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(8)),
                ),
                onHover: (bool? value) {},
                child: const Text("Get Tap Token"),
              ),
            ),
          ),
          const SizedBox(height: 10),
          Expanded(
            child: Padding(
              padding: const EdgeInsets.all(16.0),
              child: SingleChildScrollView(
                child: SelectableText(
                  mCardSDKResponse == null ? "" : "SDK RESPONSE : $mCardSDKResponse",
                  textAlign: TextAlign.center,
                  style: const TextStyle(color: Colors.black, fontSize: 12),
                ),
              ),
            ),
          ),
        ],
      ),
    );
  }
}

令牌化卡片

通过改变generateToken变量为true来启动令牌化过程。

setState(() {
  generateToken = true;
});

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

1 回复

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


当然,以下是如何在Flutter项目中使用card_flutter插件(请注意,实际上并没有一个广泛知名的叫做card_flutter的官方插件。通常,Flutter中的卡片展示是通过Card组件来实现的,这是Flutter Material库的一部分。不过,为了符合你的要求,这里我会展示如何使用Flutter内置的Card组件来创建一个卡片展示的例子)。

首先,确保你的Flutter项目已经设置好。如果你还没有一个Flutter项目,你可以使用以下命令创建一个新的Flutter项目:

flutter create my_card_app
cd my_card_app

接下来,打开lib/main.dart文件,并替换其内容为以下代码,这将展示如何使用Card组件来创建一个简单的卡片展示:

import 'package:flutter/material.dart';

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

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

class MyHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Card Demo'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          children: <Widget>[
            Card(
              elevation: 8.0,
              shape: RoundedRectangleBorder(
                borderRadius: BorderRadius.circular(16.0),
              ),
              child: Container(
                decoration: BoxDecoration(
                  color: Colors.white,
                ),
                child: Column(
                  crossAxisAlignment: CrossAxisAlignment.start,
                  children: <Widget>[
                    ListTile(
                      leading: Icon(Icons.account_circle),
                      title: Text('User Name'),
                      subtitle: Text('user@example.com'),
                    ),
                    Divider(),
                    Padding(
                      padding: const EdgeInsets.symmetric(vertical: 8.0),
                      child: Row(
                        mainAxisAlignment: MainAxisAlignment.spaceBetween,
                        children: <Widget>[
                          Text('Likes:'),
                          Text('123', style: TextStyle(fontSize: 18.0, fontWeight: FontWeight.bold)),
                        ],
                      ),
                    ),
                    Padding(
                      padding: const EdgeInsets.symmetric(vertical: 8.0),
                      child: Row(
                        mainAxisAlignment: MainAxisAlignment.spaceBetween,
                        children: <Widget>[
                          Text('Comments:'),
                          Text('45', style: TextStyle(fontSize: 18.0, fontWeight: FontWeight.bold)),
                        ],
                      ),
                    ),
                  ],
                ),
              ),
            ),
          ],
        ),
      ),
    );
  }
}

这个代码做了以下几件事:

  1. 创建了一个Flutter应用,并设置了主题。
  2. 创建了一个包含AppBar的Scaffold。
  3. 在Scaffold的body中,使用了一个Padding来提供内边距。
  4. 使用了一个Column来垂直排列子Widget。
  5. 在Column中,添加了一个Card组件,这个Card组件有一个elevation属性来设置阴影,一个shape属性来设置圆角,以及一个child属性来包含卡片的内容。
  6. 卡片的内容是一个Container,它包含了一个Column,Column中包括了一个ListTile(用于显示用户信息和图标),一个Divider,以及两行显示喜欢数量和评论数量的Row。

这个示例展示了如何使用Flutter内置的Card组件来创建一个基本的卡片展示。如果你确实是在寻找一个叫做card_flutter的特定插件,并且这个插件不是Flutter官方的一部分,你可能需要查看该插件的文档来获取具体的用法,因为不同的插件可能有不同的API和用法。

回到顶部