Flutter集成flutter_stripe支付时同一页面使用Card组件报错
你遇到的是Dart编译期的命名冲突问题,原始错误信息如下:
"The name 'Card' is defined in the libraries 'package:flutter/src/material/card.dart (via package:flutter/material.dart)' and 'package:stripe_platform_interface/src/models/payment_methods.dart'.
Try using 'as prefix' for one of the import directives, or hiding the name from all but one of the imports."
错误翻译:
名称
Card同时在package:flutter/src/material/card.dart(通过package:flutter/material.dart导入)和package:stripe_platform_interface/src/models/payment_methods.dart两个库中定义。
请尝试为其中一个导入指令使用as 前缀的写法,或者从除一个导入之外的所有导入中隐藏该名称。
触发原因是当前页面同时导入了flutter/material.dart和Stripe相关依赖库,两个库都对外暴露了名为Card的类,编译器无法判断你调用Card时指向的是哪个库的实现。
可根据你的实际使用场景选择对应方案:
- 方案1:为其中一个导入声明添加前缀
如果你当前页面需要同时使用两个库的Card类,就给其中一个导入加前缀区分,示例如下:
给Stripe相关导入加stripe前缀:
// 修改导入语句,添加as关键字声明前缀 import 'package:flutter/material.dart'; import 'package:stripe_platform_interface/stripe_platform_interface.dart' as stripe;
使用时按前缀区分即可:
- 调用Material的卡片组件:直接写
Card - 调用Stripe的Card支付方法类:写
stripe.Card - 方案2:隐藏不需要用到的
Card类
如果你当前页面只需要用到其中一个库的Card,可以直接从另一个库的导入里隐藏Card类:
仅使用Material的Card组件,不需要用到Stripe的Card类:
import 'package:flutter/material.dart'; // 从stripe导入中隐藏Card类 import 'package:stripe_platform_interface/stripe_platform_interface.dart' hide Card;
仅使用Stripe的Card类,不需要用到Material的Card组件:
// 从material导入中隐藏Card类 import 'package:flutter/material.dart' hide Card; import 'package:stripe_platform_interface/stripe_platform_interface.dart';
内容的提问来源于stack exchange,提问作者Muhammad Umair Saqib

