【问题标题】:Flutter can't read from ClipboardFlutter 无法从剪贴板读取
【发布时间】:2019-04-22 21:08:30
【问题描述】:

我来询问有关 Flutter 和 Future 和 await 机制的一个非常具体的问题,这似乎正在工作,但我的剪贴板在使用我的可编辑文本字段操作时并没有真正起作用,即使遵循 Google 的实施建议......

这是我的粘贴代码:

onPressed: () async {
  await getMyData('text');
  _encodingController.text = clipData;
  Scaffold.of(context).showSnackBar(
    new SnackBar(
      content: new Text(
        "Pasted from Clipboard"),
      ),
    );
},

我的粘贴功能不起作用...在调试以下函数的结果为空时,wth?????????

static Future<ClipboardData> getMyData(String format) async {
    final Map<String, dynamic> result =
        await SystemChannels.platform.invokeMethod(
      'Clipboard.getData',
      format,
    );

    if (result == null) {
      return null;
    } else {
      clipData = ClipboardData(text: result['text']).text;
      return ClipboardData(text: result['text'].text);
    }
  }

我可能正在使用 Futures 和 async await 错误,希望得到一些指导!!!正在使用剪贴板管理器插件进行复制!非常感谢!

【问题讨论】:

    标签: asynchronous dart flutter clipboard future


    【解决方案1】:

    这对我有用:

      _getFromClipboard() async {
        Map<String, dynamic> result =
            await SystemChannels.platform.invokeMethod('Clipboard.getData');
        if (result != null) {
          return result['text'].toString();
        }
        return '';
      }
    

    【讨论】:

      【解决方案2】:

      您可以简单地将 Flutter 现有的库代码重新使用到剪贴板中的getData

      ClipboardData data = await Clipboard.getData('text/plain');
      

      【讨论】:

        【解决方案3】:

        如果您想监听来自系统剪贴板的定期更新,这也很有用。 Originally I replied here,只是重新发布解决方案:

        #creating a listening Stream:
        final clipboardContentStream = StreamController<String>.broadcast();
        
        #creating a timer for updates:
        Timer clipboardTriggerTime;
        
        clipboardTriggerTime = Timer.periodic(
        # you can specify any duration you want, roughly every 20 read from the system
              const Duration(seconds: 5),
              (timer) {
                Clipboard.getData('text/plain').then((clipboarContent) {
                  print('Clipboard content ${clipboarContent.text}');
        
                  # post to a Stream you're subscribed to
                  clipboardContentStream.add(clipboarContent.text);
                });
              },
            );
        
        # subscribe your view with
        Stream get clipboardText => clipboardController.stream
        
        # and don't forget to clean up on your widget
        @override
        void dispose() {
          clipboardContentStream.close();
        
          clipboardTriggerTime.cancel();
        }
        

        【讨论】:

          【解决方案4】:

          首先创建一个方法

          Future<String> getClipBoardData() async {
                  ClipboardData data = await Clipboard.getData(Clipboard.kTextPlain);
                  return data.text;
                }
          

          然后在构建方法中

          FutureBuilder(
                          future: getClipBoardData(),
                          initialData: 'nothing',
                          builder: (context, snapShot){
                            return Text(snapShot.data.toString());
                          },
                        ),
          

          【讨论】:

            猜你喜欢
            • 2013-11-16
            • 1970-01-01
            • 2010-09-11
            • 1970-01-01
            • 1970-01-01
            • 2015-08-13
            • 2019-09-25
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多