मैं अपने स्पंदन परियोजना के लिए कस्टम बिल्डर बनाने की कोशिश कर रहा हूँ। मैं build_value कोड पीढ़ी के समान कुछ हासिल करना चाहता हूं।

मैंने अपने प्रोजेक्ट के रूट फोल्डर में build.yaml बनाकर शुरुआत की है

targets:
  $default:
    builders:
      app|db_builder:
        enabled: true

builders:
  db_builder:
    target: ":db_builder"
    import: "package:app/db/build/builder.dart"
    builder_factories: ["dbBuilder"]
    build_extensions: {".dart": [".db.g.part"]}
    auto_apply: dependents
    build_to: cache
    applies_builders: ["source_gen|combining_builder"]

फिर dbBuilder कारखाने को app/db/build/builder.dart पर लागू किया

import 'package:build/build.dart';
import 'package:source_gen/source_gen.dart';

import 'db_generator.dart';

Builder dbBuilder(BuilderOptions _) =>
    SharedPartBuilder([DBAccessGenerator()], 'built_value');

DBAccessGenerator एक खाली वर्ग है जो Generator से विरासत में मिला है

मेरे प्रोजेक्ट में build_value_generator भी है।

उपर्युक्त चरणों के बाद, flutter pub run build_runner build चलाते समय मुझे निम्न त्रुटि मिली है:

Both app:db_builder and built_value_generator:built_value may output
test/widget_test.built_value.g.part. Potential outputs must be unique across all builders.

ऐसा क्यूँ होता है? मैंने build_value_generator का स्रोत कोड देखा है और यह बिल्ड एक्सटेंशन को build_extensions: {".dart": [".built_value.g.part"]} के रूप में घोषित करता है लेकिन मेरी घोषणा अलग है, मैं एक और लक्ष्य एक्सटेंशन का उपयोग कर रहा हूं।

0
Olegas 17 अप्रैल 2020, 00:18

1 उत्तर

सबसे बढ़िया उत्तर

कारण app/db/build/builder.dart फ़ाइल के अंदर है।

SharedPartBuilder बनाते समय, दूसरा तर्क एक partId है और यह जेनरेट की गई फ़ाइल का वास्तविक आउटपुट एक्सटेंशन है, न कि build.yaml फ़ाइल में निर्दिष्ट।

इसलिए, यहां दूसरा नाम सेट करने से समस्या ठीक हो जाती है।

यहां और अधिक: https://github.com/dart-lang/build/issues/2670

0
Olegas 20 अप्रैल 2020, 21:03