Dart导入时如何仅为单个类设置别名其余类无需前缀调用
解决方案
有两种可行方案可以实现你的需求:
方案1:仅给冲突的State类设置别名,其余类正常使用
利用Dart导入语法的hide和show组合,即可实现只针对单个类设置别名,不影响其他所有导入类的使用:
// 导入所有widgets库的类,仅隐藏内置的State类 import 'package:flutter/widgets.dart' hide State; // 单独导入内置的State类,仅给它设置别名base import 'package:flutter/widgets.dart' as base show State; // 自定义基类直接继承带别名的内置State即可 abstract class State<T extends StatefulWidget> extends base.State<T> { @override Widget build(BuildContext context) { // 其余类比如BuildContext、Widget、StatefulWidget都可以直接用,不需要加前缀 // ... } }
注意:自定义State类不要忘记加上泛型约束
T extends StatefulWidget,否则会和内置State的泛型定义不匹配。
方案2:修改自定义基类命名(更推荐)
你也可以直接给自定义的基类起一个不冲突的名字,比如BaseState、CommonState等,完全不需要修改导入逻辑,也可以避免后续代码中出现两个State定义导致的理解混淆:
import 'package:flutter/widgets.dart'; // 类名不冲突就不会出现继承报错 abstract class BaseState<T extends StatefulWidget> extends State<T> { @override Widget build(BuildContext context) { // ... } }
内容的提问来源于stack exchange,提问作者Rafał G.
相关产品推荐
相关产品推荐

