在 Flutter 中,如何在主屏幕中接收图像,然后将其重定向到另一个屏幕?

水先生

我正在开发一个卡片游戏,用户可以在其中添加新卡片。每张卡片都有一个图像路径。我正在尝试使用来自另一个应用程序(例如:图库)的图像预填充我的新卡屏幕。为此,我正在使用包receive_sharing_intent,已成功设法打印以控制台我的应用程序中的图像路径。现在我不能做的是在获取图像后重定向到新屏幕。这是我的主屏幕上的相关代码:

class Menu extends StatefulWidget {
  final String title;

  Menu({Key key, this.title}) : super(key: key);

  @override
  _MenuState createState() => _MenuState();
}

class _MenuState extends State<Menu> {
  StreamSubscription _intentDataStreamSubscription;
  List<SharedMediaFile> _sharedFiles;

  @override
  void initState() {
    super.initState();
    bootstrapCards();
    getOurCards();
    // For sharing images coming from outside the app while the app is in the memory
    _intentDataStreamSubscription = ReceiveSharingIntent.getMediaStream()
        .listen((List<SharedMediaFile> value) {
      setState(() {
        _sharedFiles = value;
        print("Shared:" + (_sharedFiles?.map((f) => f.path)?.join(",") ?? ""));
        _goCardAdd((_sharedFiles?.map((f) => f.path)?.join(",") ?? ""));

      });
    }, onError: (err) {
      print("getIntentDataStream error: $err");
    });

    // For sharing images coming from outside the app while the app is closed
    ReceiveSharingIntent.getInitialMedia().then((List<SharedMediaFile> value) {
      setState(() {
        _sharedFiles = value;
        print("Shared:" + (_sharedFiles?.map((f) => f.path)?.join(",") ?? ""));
        _goCardAdd((_sharedFiles?.map((f) => f.path)?.join(",") ?? ""));

      });
    });

  }
  @override
  void dispose() {
    _intentDataStreamSubscription.cancel();
    super.dispose();
  }
  void _goCardAdd(path) {
    MyCard myEmptyCard = new MyCard();
    myEmptyCard.url=path;
    Navigator.of(context).push(
      MaterialPageRoute<void>(
          builder: (BuildContext context) => AddEditScreen(myCard: myEmptyCard)),
    );
  }

似乎 _goCardAdd 调用没有做任何事情,我不明白为什么。如果我把它放在 setState 调用之后,我会收到一个错误提示

在构建期间调用 setState() 或 markNeedsBuild() 。

完整代码可以在https://github.com/diogocsc/papoapapoFlutter找到

水先生

似乎它可能是某种构建问题,因为我只对代码进行了微小的更改,它就开始工作了。同时我需要添加一个 if 子句来检查文件是否存在,因为如果没有,它总是会在我打开我的应用程序时将我重定向到新的卡片屏幕,即使没有图像文件正在进行中。检查下面的代码。

class _MenuState extends State<Menu> {
  StreamSubscription _intentDataStreamSubscription;
  List<SharedMediaFile> _sharedFiles;

  @override
  void initState() {
    super.initState();
    bootstrapCards();
    // For sharing images coming from outside the app while the app is in the memory
    _intentDataStreamSubscription = ReceiveSharingIntent.getMediaStream()
        .listen((List<SharedMediaFile> value) {
      setState(() {
        _sharedFiles = value;
        print("Shared 1:" + (_sharedFiles?.map((f) => f.path)?.join(",") ?? ""));
        if (_sharedFiles != null) _goCardAdd((_sharedFiles?.map((f) => f.path)?.join(",") ?? ""));

      });

    }, onError: (err) {
      print("getIntentDataStream error: $err");
    });

    // For sharing images coming from outside the app while the app is closed
    ReceiveSharingIntent.getInitialMedia().then((List<SharedMediaFile> value) {
      setState(() {
        _sharedFiles = value;
        print("Shared 2:" + (_sharedFiles?.map((f) => f.path)?.join(",") ?? ""));
        if (_sharedFiles != null) _goCardAdd((_sharedFiles?.map((f) => f.path)?.join(",") ?? ""));

      });

    });

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在 FLUTTER 中几秒钟后重定向到 Stream Builder 中的另一个屏幕/页面?

如何在Flutter中从一个屏幕导航到另一个屏幕(开始活动)并关闭当前屏幕(完成)

Flutter:如何将图像文件传递到另一个屏幕

如何从另一个屏幕在Flutter中重置表单?

如何将List <Map>的信息获取到Flutter中的另一个屏幕?

如何在Flutter中将一个小部件对齐到屏幕顶部,并将另一个小部件居中对齐到屏幕中间?

如何在flutter中使用bloc将数据传递到另一个屏幕

从Flutter中的另一个屏幕调用Future函数

Flutter API 从一个屏幕获取和发送数据到另一个屏幕

Flutter:从另一个回来时更新屏幕

使用 Flutter Provider 将数据传递到另一个屏幕

Flutter:从StreamBuilder构建器回调内部导航到另一个屏幕

Flutter ListView 单击导航到另一个屏幕

如果导航到 Flutter 上的另一个屏幕,则停止计时器

如何将值从SearchBar传递到Flutter中的上一个屏幕

如何在Flutter中在屏幕顶部创建一个半椭圆形?

在 Flutter 中完成 CircularProgressIndicator 后如何导航到另一个页面?

如何使用 Flutter 中的 onSubmitted 导航到另一个小部件

如何在 Flutter 中顯示從上一個屏幕接收到的 json 數據

如何在没有 Flutter 上一个屏幕的应用栏的情况下推送到 Flutter 中的新屏幕?

如何在Flutter中从另一个类访问类方法?

Flutter提供者导航到另一个屏幕时失去了价值

Flutter Azure AD 身份验证:如何显示在登录到另一个屏幕期间检索到的用户电子邮件和名称

如何在Flutter中拍摄屏幕截图?

如何在 Flutter 中创建加载屏幕?

如何从Flutter中的路线中删除第一个屏幕?

Flutter:从另一个小部件或屏幕清除文本字段

如何在Flutter中将列表值复制到另一个列表

如何在Flutter中加载时导航到另一个页面