Flutter随笔(一)——从解决类冲突到认识Dart使用库的规则

三味码屋 2020年09月11日 1,528次浏览

前两天打开一个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.dartpackage:flutter/src/widgets/router.dart中都被定义了,于是打开这两个文件,发现这两个文件都有一个取名为Router的class。这种情况下,Flutter不知道Router到底是哪个文件中,所以报了错。问题已经知道了,该如何解决呢?上面的错误描述中,后半部分其实给出了解决问题的方法,方法有两个:

  1. 使用as关键字为其中一个库指定前缀。指定库的前缀之后,就可以通过前缀来访问文件中的类。例如,指定package:fluro/fluro.dart的前缀为fluro,就可以通过fluro来访问fluro.dart中的成员。
import 'package:fluro/fluro.dart' as fluro;

fluro.Router router;
  1. 使用hide关键字隐藏其中一个文件中的Routerhide关键字可以隐藏文件中指定的成员。例如,隐藏package:flutter/material.dart中的Router后,将无法访问到package:flutter/material.dart中的Router
import 'package:flutter/material.dart' hide Router;

从上述案例中我们了解到了ashide关键字,其实,在Dart中使用库的时候,除了ashide,常用的还有两个关键字deferred asshow
deferred as用于实现库的延迟加载,showhide相反,表示只使用看中的某个成员。showhide都可以同时指定多个成员。