前两天打开一个Flutter工程的时候,发现其中一个文件报错,把光标移到报错的位置,弹出一段错误描述:
The name 'Router' is defined in the libraries 'package:fluro/src/router.dart (via package:fluro/fluro.dart)' and 'package:flutter/src/widgets/router.dart'. Try using 'as prefix' for one of the import directives, or hiding the name from all but one of the imports.
啥意思?感觉有点懵。。。。。。
经过一番仔细的阅读理解和翻译,才知道是Router
这个名字在package:fluro/src/router.dart
和package:flutter/src/widgets/router.dart
中都被定义了,于是打开这两个文件,发现这两个文件都有一个取名为Router
的class。这种情况下,Flutter不知道Router
到底是哪个文件中,所以报了错。问题已经知道了,该如何解决呢?上面的错误描述中,后半部分其实给出了解决问题的方法,方法有两个:
- 使用as关键字为其中一个库指定前缀。指定库的前缀之后,就可以通过前缀来访问文件中的类。例如,指定
package:fluro/fluro.dart
的前缀为fluro
,就可以通过fluro
来访问fluro.dart
中的成员。
import 'package:fluro/fluro.dart' as fluro;
fluro.Router router;
- 使用
hide
关键字隐藏其中一个文件中的Router
。hide
关键字可以隐藏文件中指定的成员。例如,隐藏package:flutter/material.dart
中的Router
后,将无法访问到package:flutter/material.dart
中的Router
。
import 'package:flutter/material.dart' hide Router;
从上述案例中我们了解到了as
和hide
关键字,其实,在Dart中使用库的时候,除了as
和hide
,常用的还有两个关键字deferred as
和show
。
deferred as
用于实现库的延迟加载,show
和hide
相反,表示只使用看中的某个成员。show
和hide
都可以同时指定多个成员。