我尝试在createGroup方法中上载URL posterImg,但收到以下错误“参数类型'String'无法分配给参数类型'File”
为了提供更多的上下文,我目前使用变量posterImg捕获在线存储的图像的URL,然后我希望将路径转换为文件,而不是将图像存储在本地,然后将其保存到文件中,以便可以将其上传到firebase。
在下面的代码片段中,我尝试将posterImg强制转换为image(类型为file),但失败了。
有谁能告诉我如何修改我的代码,将存储在posterImg中的URL传递给Firebase?
请任何人都可以分享节日精灵和这个问题,因为我拉我的头发了。
class _CreateGroupScreenState extends ConsumerState<CreateGroupScreen> {
final TextEditingController groupNameController = TextEditingController();
File? image;
late String name;
late String posterImg = "";
void selectImage2() async {
image = await pickImageFromGallery(context);
setState(() {});
}
Future<void> createGroup() async {
bool groupLive;
if (await groupExist(context)) {
groupLive = true;
} else {
groupLive = false;
}
if (!groupLive && groupNameController.text
.trim()
.isNotEmpty && image != null) {
ref.read(groupControllerProvider).createGroup(
context,
name,
posterImg!,
ref.read(selectedGroupContacts),
);
ref.read(selectedGroupContacts.state).update((state) => []);
Navigator.pop(context);
}
}
@override
void dispose() {
super.dispose();
groupNameController.dispose();
}
Future<bool> groupExist(context) async {
var groupRepository = ref.read(groupRepositoryProvider);
var groupExists = await groupRepository.groupExists(widget.groupContainer.mid);
return groupExists;
}
@override
Widget build(BuildContext context) {
name = widget.groupContainer.name;
if (widget.groupContainer.img != null) {
posterImg = widget.groupContainer.img;
} else {
posterImg = '';
}
return Scaffold(
appBar: AppBar(
title: const Text('Create Group'),
),
body: Center(
child: Column(
children: [
const SizedBox(height: 10),
Stack(
children: [
image == null
? const CircleAvatar(
//backgroundImage: NetworkImage(posterImg),
backgroundImage: AssetImage('assets/nobody.png'),
//backgroundImage: AssetImage(Assets),
radius: 64,
)
: CircleAvatar(
backgroundImage: FileImage(
// posterImg,
//widget.groupContainer.img,
image!,
),
radius: 64,
),
Positioned(
bottom: -10,
left: 80,
child: IconButton(
onPressed: selectImage,
icon: const Icon(
Icons.add_a_photo,
),
),
),
],
),
Padding(
padding: const EdgeInsets.all(10.0),
child: TextField(
controller: groupNameController,
decoration: const InputDecoration(
hintText: 'Enter Group Name',
),
),
),
Container(
alignment: Alignment.topLeft,
padding: const EdgeInsets.all(8),
child: const Text(
'Select Contacts',
style: TextStyle(
fontSize: 18,
fontWeight: FontWeight.w600,
),
),
),
const SelectContactsGroup(),
],
),
),
floatingActionButton: FloatingActionButton(
onPressed: createGroup,
backgroundColor: tabColor,
child: const Icon(
Icons.done,
color: Colors.white,
),
),
);
}
}
1条答案
按热度按时间wgmfuz8q1#
无法通过Firebase SDK从URL将文件上传到云存储。唯一的选项是从本地文件、blob或包含二进制数据的base64编码字符串上传。
如果您只有要存储在云存储中的文件的URL,则必须将数据加载到应用程序中,然后从那里将其上传到云存储。
另见: