使用flutter_flavorizr配置Flutter多Flavor时报错,求解决方法
问题:Flutter Flavorizr执行报错:Missing [app]字段 & NoSuchMethodError: The getter 'flavorizr' was called on null
我正在开发一款Flutter应用,想要添加两个不同的Flavor来隔离特定功能。我已按照文档操作,以下是我的pubspec.yaml文件内容:
name: flutter_app version: 1.0.20+20 environment: sdk: ">=2.3.0 <3.0.0" dependencies: flutter: sdk: flutter provider: ^4.0.1 cupertino_icons: ^0.1.2 intl: ^0.16.0 shared_preferences: http: ^0.12.0+4 sqflite: ^1.2.0 path_provider: permission_handler: ^4.1.0 package_info: ^0.4.0+18 flutter_localizations: sdk: flutter #flutter_local_notifications: ^0.7.1+1 #firebase_messaging: ^5.0.1+1 #fluttertoast: ^3.1.0 dev_dependencies: flutter_test: sdk: flutter flutter_flavorizr: ^1.0.7 flavorizr: app: android: flavorDimensions: "flavor-type" ios: flavors: mainapp: app: name: "Main App" android: applicationId: "com.example.app1" ios: bundleId: "com.example.app2" banana: master: name: "App Master" android: applicationId: "com.example.app2" ios: bundleId: "com.example.app2" flutter: uses-material-design: true assets: - assets/ - assets/fonts/ - assets/drawables/ - assets/icon/ - assets/lang/en.json - assets/lang/de.json - assets/lang/de-DE.json - assets/lang/de-CH.json - assets/lang/de-AT.json - assets/lang/en-IN.json fonts: - family: Poppins-Bold fonts: - asset: assets/fonts/Poppins-Bold.ttf - family: Poppins-Medium fonts: - asset: assets/fonts/Poppins-Medium.ttf
执行flutter pub run flutter_flavorizr后出现如下报错:
The following fields were missing: [app]. Read the docs for further details Unhandled exception: NoSuchMethodError: The getter 'flavorizr' was called on null. Receiver: null Tried calling: flavorizr Object.noSuchMethod (dart:core-patch/object_patch.dart:51:5) Processor._initAvailableProcessors (package:flutter_flavorizr/processors/processor.dart:110:18) new Processor (package:flutter_flavorizr/processors/processor.dart:88:5) execute (package:flutter_flavorizr/flutter_flavorizr.dart:52:25) main (file:///D:/Users/Dhaval/Flutter/.pub-cache/hosted/pub.dartlang.org/flutter_flavorizr-1.0.7/bin/flutter_flavorizr.dart:4:3) _startIsolate.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:299:32) _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:168:12) pub finished with exit code 255
请问我遗漏了什么内容?该如何解决此问题?感谢帮助。
回答
这个报错的核心原因是你在banana flavor的配置里用了错误的字段名,导致flutter_flavorizr无法正确解析配置结构。
看你的flavors配置段:
banana: master: name: "App Master" android: applicationId: "com.example.app2" ios: bundleId: "com.example.app2"
这里你错误地使用了master字段,但每个flavor的应用名称应该放在app字段下面,和你第一个mainapp的配置保持一致。flutter_flavorizr期望每个flavor都包含app节点,找不到这个节点就会抛出The following fields were missing: [app]的错误,进而引发后续的空指针异常。
修复方案:
把banana flavor里的master改成app即可,同时顺便修正mainapp的iOS bundleId重复问题,修改后的flavors配置应该是这样:
flavors: mainapp: app: name: "Main App" android: applicationId: "com.example.app1" ios: bundleId: "com.example.app1" banana: app: name: "App Master" android: applicationId: "com.example.app2" ios: bundleId: "com.example.app2"
修改完成后,重新执行flutter pub run flutter_flavorizr命令,应该就能正常生成flavor配置了。
内容的提问来源于stack exchange,提问作者Dhaval Bhagwat




