Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Multiple widgets used the same GlobalKey. #21

Closed
HetalGohil opened this issue Jul 20, 2020 · 8 comments
Closed

Multiple widgets used the same GlobalKey. #21

HetalGohil opened this issue Jul 20, 2020 · 8 comments

Comments

@HetalGohil
Copy link

i am taking screenshot in list view but it is not working and showing error like "Multiple widgets used the same GlobalKey."

@shivampandey0
Copy link

Same here, any solutions?

@SachinGanesh
Copy link
Owner

Are you using the same controller multiple times?

@shivampandey0
Copy link

I was using a single controller in a list. But I tried with the local controller in the list item. It worked.

@arpit-d
Copy link

arpit-d commented Jan 19, 2021

I was using a single controller in a list. But I tried with the local controller in the list item. It worked.

Could you please expand on local controller? How exactly did you use it?

@shivampandey0
Copy link

I was using a single controller in a list. But I tried with the local controller in the list item. It worked.

Could you please expand on local controller? How exactly did you use it?

It may not be the best solution, but here is what I did.

Previously I made a single controller inside a screen i.e stateful widget and I was using it in the listview item.

To fix the issue. >>>

I made an independent widget for the listview item and made the controller in that widget, So now every item in the listview has its own controller.

@arpit-d
Copy link

arpit-d commented Jan 19, 2021

Thanks a lot. Could you please post your code? That would be very helpful!

@peter100u
Copy link

Thanks a lot. Could you please post your code? That would be very helpful!

Thanks a lot. Could you please post your code? That would be very helpful!

@md-rifatkhan
Copy link

md-rifatkhan commented Mar 21, 2024

@peter100u define the controller under listview itemBuilder,
the code might look weired but you can check:

              itemScrollController: itemScrollController,
              itemCount: arabicJuzzData.verses?.length ?? 0,
              itemBuilder: (ctx, index) {
                final currentVerse = arabicJuzzData.verses?[index];
                final isMetadata = currentVerse?.textUthmaniTajweed == null;

                if (isMetadata) {
                  final surahNumber = currentVerse!.number!;
                  final surahName = currentVerse.englishName!;
                  surahMap[surahNumber] = surahName;
                  currentJuzzSurahList.add(surahNumber.toString());
                  print("Current Juzz Surah $surahNumber");
                }
                if (isMetadata) {
                  return SurahHeadMeta(
                    containerColor: Colors.blueAccent,
                    englishName: currentVerse!.englishName!,
                    snumber: currentVerse.number!.toString(),
                    relevationType: currentVerse.revelationType!,
                    numberOfAyahs: currentVerse.numberOfAyahs!.toString(),
                    englishTranslation: currentVerse.englishNameTranslation!,
                  );
                } else {
                  final globalKey = GlobalKey();
                  ScreenshotController screenshotController = ScreenshotController();
                  final verseNumber = currentVerse!.verseno!.split(':')[1];
                  final splittedSurah = currentVerse.verseno!.split(':')[0];
                  final editionIndex =
                      cumulativeAyahCount + currentSurahAyahCount;
                  currentSurahAyahCount++;

                  final surahName = surahMap[int.parse(splittedSurah)] ?? '';

                  Color? getContainerColor() {
                    if (currentVerse.obligatory != null &&
                        currentVerse.recommended != null) {
                      if (currentVerse.recommended!) {
                        return const Color(0xff023020);
                      } else if (currentVerse.obligatory!) {
                        return const Color(0xff8B0000);
                      }
                    }
                    return null;
                  }

                  return Screenshot(
                    controller: screenshotController,
                    key: globalKey,
                    child: JuzzReader(
                      onIcon1Pressed: () async {
                        // Capture the screenshot
                        Uint8List? image = await screenshotController.capture(
                            delay: const Duration(milliseconds: 10));

                        // Check if the image capture was successful
                        if (image != null) {
                          try {
                            // Save the image to the device's gallery
                            final result =
                                await ImageGallerySaver.saveImage(image);
                            // Check if image was saved successfully
                            if (result['isSuccess']) {
                              print('Image saved to gallery');
                            } else {
                              print('Failed to save image: ${result['error']}');
                            }
                          } catch (error) {
                            // Error handling if image save fails
                            print('Failed to save image: $error');
                          }
                        } else {
                          // Image capture failed
                          print('Failed to capture image');
                        }
                      },
                      onIcon5Pressed: () {
                        Get.toNamed(tafsir, arguments: {
                          'surahName': RxString(surahName),
                          'surahNumber': splittedSurah,
                          'ayahNumber': int.parse(verseNumber),
                        });
                      },
                      number: int.parse(verseNumber),
                      edition: editionJuzzData[editionIndex].text,
                      showNumber: true,
                      containerColor: getContainerColor(),
                      arabicTextStyle: TextStyle(
                        fontSize: fontsizesForArabic.value,
                        fontFamily: 'uthmanic_hafs',
                      ),
                      arabicText:
                          "${currentVerse.textUthmaniTajweed} ${currentVerse.end}",
                      onIcon4Pressed: () {
                        showDialog(
                          context: context,
                          builder: (context) {
                            return AlertDialog(
                              title: const Text('Copy Text'),
                              content: Column(
                                mainAxisSize: MainAxisSize.min,
                                children: [
                                  ListTile(
                                    title: const Text('Copy Arabic Text'),
                                    onTap: () {
                                      Clipboard.setData(
                                        ClipboardData(
                                          text:
                                              currentVerse.textUthmaniTajweed!,
                                        ),
                                      );
                                      ScaffoldMessenger.of(context)
                                          .showSnackBar(
                                        const SnackBar(
                                          content: Text(
                                              'Arabic text copied to clipboard'),
                                        ),
                                      );
                                      Navigator.pop(context);
                                    },
                                  ),
                                  ListTile(
                                    title: const Text('Copy Edition Text'),
                                    onTap: () {
                                      Clipboard.setData(
                                        ClipboardData(
                                          text: editionJuzzData[editionIndex]
                                              .text,
                                        ),
                                      );
                                      ScaffoldMessenger.of(context)
                                          .showSnackBar(
                                        const SnackBar(
                                          content: Text(
                                              'Edition text copied to clipboard'),
                                        ),
                                      );
                                      Navigator.pop(context);
                                    },
                                  ),
                                ],
                              ),
                            );
                          },
                        );
                      },
                    ),
                  );
                }
              },
            );

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

7 participants