Uint8List 图像为 null - Flutter
Image is null with Uint8List - Flutter
我正在尝试将图像编码为 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()
你得到一个空值,因为 load
方法是一个 Future
而你不需要在你的构建方法上等待它。
您必须检查 _img
是否为 null 并显示另一个小部件,如 Text 或 CircularProgressIndicator 如果它是:
Container(
child: _img ? Image.memory(_img.getBytes()) : Text('loading...'),
),
之后,您需要在 readFileAsync
方法中调用 setState()
方法来重建您的小部件:
setState() {
_img = I.decodeImage(bytes);
}
我正在尝试将图像编码为 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()
你得到一个空值,因为 load
方法是一个 Future
而你不需要在你的构建方法上等待它。
您必须检查 _img
是否为 null 并显示另一个小部件,如 Text 或 CircularProgressIndicator 如果它是:
Container(
child: _img ? Image.memory(_img.getBytes()) : Text('loading...'),
),
之后,您需要在 readFileAsync
方法中调用 setState()
方法来重建您的小部件:
setState() {
_img = I.decodeImage(bytes);
}