Ошибка Flutter «Несколько виджетов использовали один и тот же глобальный ключ» — использование скриншота с плагинами SocialShare

#flutter #dart #screenshot #socialshare

#flutter #dart #скриншот #socialshare

Вопрос:

Я не уверен, где найти дополнительный виджет, использующий тот же глобальный ключ, что и другой виджет в моем приложении. Я использую плагины Screenshot и Social Share.

https://pub.dev/packages/screenshot

https://pub.dev/packages/social_share

Я хотел бы загрузить скриншот при публикации в социальных сетях, таких как Facebook Messenger. Но я получаю следующую ошибку в своей консоли, которая возникла только после того, как я добавил контроллер скриншотов;

 Flutter Multiple widgets used the same GlobalKey
  

Откуда у меня эта проблема? Я создал экземпляр скриншота в состоянии;

 class _StageBuilderState extends State<StageBuilder> {
    ScreenshotController screenshotController = ScreenshotController();
  

Вот сборка;

 Widget createViewItem() {
    return Screenshot(
    controller: screenshotController,
          Column(
             children: <Widget>[
              child: Image.network( myavatar),
              child: IconButton(
                 icon: Icon(Icons.share),
                onPressed: () async {
                   await screenshotController.capture().then((image) async {
                   SocialShare.shareOptions("http://myurl", imagePath: image.path);
                      }
                   );
                 },
              ),
          ],
       ),
    ),
}
  

Итак, где этот дополнительный виджет, использующий тот же глобальный ключ, что и что-то еще в моем приложении? С чего мне начать устранение неполадок?

Ответ №1:

Оказывается, мне пришлось сделать контроллер скриншота локальным и поместить его сюда;

 Widget createViewItem() {
   ScreenshotController _screenshotController = ScreenshotController();
    return Screenshot(
    controller: screenshotController,
          Column(
             children: <Widget>[
              child: Image.network( myavatar),
              child: IconButton(
                 icon: Icon(Icons.share),
                onPressed: () async {
                   await screenshotController.capture().then((image) async {
                   SocialShare.shareOptions("http://myurl", imagePath: image.path);
                      }
                   );
                 },
              ),
          ],
       ),
    ),
}