Дротик - тип конфликтов - PullRequest
       17

Дротик - тип конфликтов

0 голосов
/ 20 февраля 2019

В настоящее время я работаю с файлом прото, который определяет количество типов, используемых системой.

Компиляция этого кода в dart с protoc работает нормально, однако попытка использовать его в проекте вызывает проблемы

Одним из сообщений, определенных в протоколе, является String, которое имеет значение string, это похоже на конфликт с типом ядра String Дартса. Я поместил фрагмент сгенерированного кода ниже:

import 'dart:core' show int, bool, double, String, List, Map, override;
import 'package:fixnum/fixnum.dart';
import 'package:protobuf/protobuf.dart' as $pb;
import 'Framework.pbenum.dart';
export 'Framework.pbenum.dart';

class String extends $pb.GeneratedMessage {
  static final $pb.BuilderInfo _i = new $pb.BuilderInfo('String', package: const $pb.PackageName('sila2.org.silastandard'))
    ..aOS(1, 'value')
    ..hasRequiredFields = false
  ;

  String() : super();
  String.fromBuffer(List<int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) : super.fromBuffer(i, r);
  String.fromJson(String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) : super.fromJson(i, r);
  String clone() => new String()..mergeFromMessage(this);
  String copyWith(void Function(String) updates) => super.copyWith((message) => updates(message as String));
  $pb.BuilderInfo get info_ => _i;
  static String create() => new String();
  String createEmptyInstance() => create();
  static $pb.PbList<String> createRepeated() => new $pb.PbList<String>();
  static String getDefault() => _defaultInstance ??= create()..freeze();
  static String _defaultInstance;
  static void $checkItem(String v) {
    if (v is! String) $pb.checkItemFailed(v, _i.qualifiedMessageName);
  }

  // Warning here
  String get value => $_getS(0, '');
  set value(String v) { $_setString(0, v); }
  bool hasValue() => $_has(0);
  void clearValue() => clearField(1);
}

Я получаю ошибки в свойстве value, так как неясно, можно ли получить / установить стандартную строку дротика или строку сообщения прототипа.

Я не могу изменитьПрото, поэтому я попытался изменить импорт и префикс имени, где это необходимо:

import 'dart:core' show int, bool, double, List, Map, override;
import 'dart:core' as core;

core.String get value => $_getS(0, '');
set value(core.String v) { $_setString(0, v); 

Но это не идеально, так как я не хочу модифицировать сгенерированный код, есть ли более правильный способсделать это?

Копия ошибки ниже:

Error: The argument type 'String (.../Framework.pb.dart)' can't be assigned to the parameter type 'String (C:\src\flutter\bin\cache\pkg\sky_engine\lib\core\string.dart)'. (argument_type_not_assignable at (.../Framework.pb.dart:50)

Прото фрагмент:

syntax = "proto3";

message String {
    string value = 1;
}
...