使用flutter将URL文件传递给firebase

hmae6n7t  于 2022-12-30  发布在  Flutter
关注(0)|答案(1)|浏览(134)

我尝试在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,
        ),
      ),
    );
  }
}
wgmfuz8q

wgmfuz8q1#

无法通过Firebase SDK从URL将文件上传到云存储。唯一的选项是从本地文件、blob或包含二进制数据的base64编码字符串上传。
如果您只有要存储在云存储中的文件的URL,则必须将数据加载到应用程序中,然后从那里将其上传到云存储。
另见:

相关问题