两个包中有相同的类名

3

我导入了 google_maps_flutteraugmented_reality_plugin_wikitude

两者都使用与 CameraPosition 相同的类名。

我没有在 google_maps_futter 中使用 CameraPostion 类。

我该如何避免名称冲突?

lib/main.dart:6:1: Error: 'CameraPosition' is imported from both 'package:google_maps_flutter/google_maps_flutter.dart' and 'package:augmented_reality_plugin_wikitude/startupConfiguration.dart'.
import 'package:augmented_reality_plugin_wikitude/startupConfiguration.dart'
4个回答

8
你可以使用as关键字引用所有相关的变量和方法。
例如:
import 'package:google_maps_flutter/google_maps_flutter.dart' as cp1;
import 'package:augmented_reality_plugin_wikitude/startupConfiguration.dart' as cp2;

现在,要使用google_maps_flutter中的CameraPosition或其他方法,您可以使用"cp1"引用,例如cp1.method1()。
同样地,要使用augmented_reality_plugin中的CameraPosition或其他方法,您可以使用"cp2"引用,例如cp2.method1()。
as关键字的主要目的是类型转换和指定库前缀。因此,这是您的用例的最佳解决方案。

6
隐藏导入google_maps_flutter时的CameraPosition
import 'package:google_maps_flutter/google_maps_flutter.dart' hide CameraPosition;

1
对我来说,需要用到的是File类,它在dart:htmldart:io两个包中都有。由于我需要从dart:io中使用它,所以将 import 'dart:html' hide File 隐藏掉,没错,这样就行了。 - undefined

2

以下是两种解决方法:

  1. 指定导入前缀,例如:import '../../something.dart' as st;

    然后可以这样使用:st.ImportedClass some = st.ImportedClass(); 也支持这样写:import '../../something.dart' show thisthing hide thatthing;

  2. 绝对导入:import 'package:my_lib/shared/something.dart


1

您可以通过将其中一个以另一个名称导入来避免此类冲突。因此,在导入两个中的一个时,假设您可以将其导入为google_maps。

import 'package:google_maps_flutter/google_maps_flutter.dart' as gmaps;

因此,来自Google Maps插件的CameraPosition将使用gmaps.CameraPosition进行访问,因此不再存在任何冲突。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接