1

画像を Uint8List にエンコードしようとしていますが、null が返されます

  List<int> bytes;
  I.Image _img;

  @override
  void initState() {
    super.initState();
    WidgetsFlutterBinding.ensureInitialized();
    String file = 'lib/graphics/logo.png';
    readFileAsync(file);
  }

  Future<dynamic> readFileAsync(String filePath) async {
    var imageData = await rootBundle.load('lib/graphics/logo.png');
    bytes = Uint8List.view(imageData.buffer);
    _img = I.decodeImage(bytes);
  }

ウィジェットツリーから呼び出す

Container(
  child: Image.memory(_img.getBytes()),
),

エラー

I/flutter (26125): ══╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY ╞═══════════════════════════════════════════════════════════
I/flutter (26125): The following NoSuchMethodError was thrown building LayoutBuilder:
I/flutter (26125): The method 'getBytes' was called on null.
I/flutter (26125): Receiver: null
I/flutter (26125): Tried calling: getBytes()
4

1 に答える 1

2

loadメソッドが でFutureあり、ビルド メソッドでそれを待機しないため、null が返されます。

が nullかどうかを確認し、次の場合_imgは Text や CircularProgressIndicator などの別のウィジェットを表示する必要があります。

Container(
  child: _img ? Image.memory(_img.getBytes()) : Text('loading...'),
), 

setState()その後、メソッドを呼び出して、メソッドでウィジェットを再構築する必要がありますreadFileAsync

setState() {
  _img = I.decodeImage(bytes);
}
于 2020-04-07T07:13:12.987 に答える