You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter使用tflite_flutter加载模型时报Null check operator错误如何解决?

问题根因

抛出Null check operator used on a null value的核心原因是Interpreter.fromAsset方法执行时依赖的Flutter平台层绑定未完成初始化,或者模型加载过程中底层返回了空对象被库的空检查运算符捕获。

解决方案
  • 补全Flutter运行环境初始化逻辑,调用异步方法前先确保WidgetsFlutterBinding已初始化,修改代码如下:
import 'package:flutter/widgets.dart';
import 'package:tflite_flutter/tflite_flutter.dart';

final modelFile = 'model.tflite';

void main() async {
  // 必须先初始化平台绑定,才能正常访问资源文件
  WidgetsFlutterBinding.ensureInitialized();
  await foo();
}

Future<void> foo() async {
  // 可按需配置线程数等参数,避免使用默认配置的兼容问题
  final interpreterOptions = InterpreterOptions()..threads = 4;
  Interpreter inter = await Interpreter.fromAsset(
    modelFile,
    options: interpreterOptions,
  );
}
  • 若运行在Android设备上,需在android/app/build.gradle的android块中添加配置,避免tflite模型被压缩导致加载失败:
android {
    // 保留原有配置不变,新增以下配置
    aaptOptions {
        noCompress "tflite"
    }
}
  • 若以上步骤未解决问题,可改用字节流方式加载模型,绕过资产路径的兼容问题:
import 'package:flutter/services.dart';
import 'package:tflite_flutter/tflite_flutter.dart';

final modelFile = 'model.tflite';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await foo();
}

Future<void> foo() async {
  final buffer = await rootBundle.load(modelFile);
  final modelBytes = buffer.buffer.asUint8List();
  final inter = Interpreter.fromBuffer(modelBytes);
}

内容的提问来源于stack exchange,提问作者Nano

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 11:18:04