You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用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

火山引擎 最新活动