我目前正在开发一个应用程序,它可以从画廊中获取图片,然后将它们列出。但我似乎做不好。目前面临一个问题,我得到错误
"_TypeError(类型"Future"不是类型"Widget"的子类型(";。
有什么想法吗
// ignore_for_file: prefer_const_constructors
import 'package:flutter/material.dart';
import 'package:multi_image_picker2/multi_image_picker2.dart';
import 'package:image_picker/image_picker.dart';
import 'package:permission_handler/permission_handler.dart';
class TestPage extends StatefulWidget {
const TestPage({Key? key}) : super(key: key);
@override
_TestPageState createState() => _TestPageState();
}
class _TestPageState extends State<TestPage> {
List<Asset> claims = <Asset>[];
final ImagePicker imgpicker = ImagePicker();
List<Asset>? imagefiles;
loadLimitedImages() async {
try {
var pickedfiles = await MultiImagePicker.pickImages(maxImages: 3);
if (pickedfiles != null) {
setState(() {
imagefiles = pickedfiles;
});
} else {
print("No image is selected.");
}
} catch (e) {
print("error while picking file.");
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.white,
appBar: AppBar(
title: Text(
'Testing Functions',
style: TextStyle(color: Colors.black),
),
centerTitle: true,
backgroundColor: Colors.white,
iconTheme: IconThemeData(color: Colors.black),
),
body: SingleChildScrollView(
child: Padding(
padding: EdgeInsets.all(10),
child: Center(
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
imagefiles != null ? loadLimitedImages() : Container(),
imagefiles?.length == 3
? Container()
: IconButton(
onPressed: () => loadLimitedImages(),
icon: Icon(Icons.camera_enhance),
iconSize: 100,
),
],
),
),
),
),
);
}
}
我最多只能有3个图像,它必须堆叠成一行,当图像被拾取时,它会回到屏幕上。如果显示了3个图像,则相机图标会消失,否则,如果少于3个,则会出现在拾取的图像旁边。
由于build()
方法中的以下行,导致出现此错误。
imagefiles != null ? loadLimitedImages() : Container(),
在这里,您调用loadLimitedImages()
,它将返回一个Future
,它不是Widget。这个方法不会返回任何东西,所以这不会以你尝试使用它的方式工作
如果我理解正确,你想挑选3张图像,该操作应该是一个动作的结果,例如用户点击按钮挑选图像。这就是您可以调用loadLimitedImages()
方法的地方。您不应该在build()
方法内部调用这样的方法,因为它可能会频繁运行。build()
方法的目的是基于当前状态构建UI。
如果您需要在没有用户交互的情况下拾取图像,您可以在State
的initState()
中启动它。