Flutter卡片展示插件card_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
更多关于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)),
],
),
),
],
),
),
),
],
),
),
);
}
}
这个代码做了以下几件事:
- 创建了一个Flutter应用,并设置了主题。
- 创建了一个包含AppBar的Scaffold。
- 在Scaffold的body中,使用了一个Padding来提供内边距。
- 使用了一个Column来垂直排列子Widget。
- 在Column中,添加了一个Card组件,这个Card组件有一个elevation属性来设置阴影,一个shape属性来设置圆角,以及一个child属性来包含卡片的内容。
- 卡片的内容是一个Container,它包含了一个Column,Column中包括了一个ListTile(用于显示用户信息和图标),一个Divider,以及两行显示喜欢数量和评论数量的Row。
这个示例展示了如何使用Flutter内置的Card
组件来创建一个基本的卡片展示。如果你确实是在寻找一个叫做card_flutter
的特定插件,并且这个插件不是Flutter官方的一部分,你可能需要查看该插件的文档来获取具体的用法,因为不同的插件可能有不同的API和用法。