繁体   English   中英

Flutter-从SharedPreferences传递的数据显示为null

Flutter - data passed from SharedPreferences showing as null

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

所以我有2个屏幕。 在屏幕1上,我从SharedPreferences中检索了一个编码的JSON,并且有一个按钮导航到屏幕2并传递检索到的数据。 但是在屏幕2上,数据始终显示为空。 当前一个小部件的状态更新时,该小部件不是要更新吗?

屏幕1

import 'package:flutter/material.dart';
import 'dart:async';
import 'dart:convert';
import 'package:shared_preferences/shared_preferences.dart';

import 'screen2.dart';

class ScreenA extends StatefulWidget {
  @override
  _ProfileState createState() => new _ScreenAState();
}

class _ScreenAState extends State<Profile> {
    Map _user;

    @override
    void initState() {
      _getUser();

      super.initState();
    }

    Future<bool> _getUser() async {
      SharedPreferences prefs = await SharedPreferences.getInstance(); 
      String result = prefs.getString("user") ?? "";
      if(result != ""){
        setState(() {
          _user = json.decode(result);  
        });
      }
      return true;
    }

    @override
    Widget build(BuildContext context) {
      return new Scaffold(
        body: Container(
           child: RaisedButton(
             child: Text("Go to Screen 2"),
             onPressed: (){
                Navigator.push(
                  context, 
                  MaterialPageRoute(
                    builder: (context)=> Screen2(user: user)
                  )
                );
             }
          )
        )
      )
    }
}

屏幕2

import 'package:flutter/material.dart';

class Screen2 extends StatefulWidget {
  Screen2({this.user});
  final Map user;
  @override
  _Screen2State createState() => new _Screen2State();
}

class _Screen2State extends State<Screen2> {
  Map _user;
  @override
    void initState() {
      _user = widget.user;
      super.initState();
    }
  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      body: Text(_user["name"])
    );
  }
}

但是,当我单击ScreenA的按钮时,将ScreenA此错误。

在此处输入图片说明

因此,如何将数据从共享的首选项传递到另一个屏幕?

1 个回复

您的代码不会检查_user变量是否不为null。

您可以做的一件事是仅在_user不为null时启用按钮。 因此,您确定只用非null用户调用第二页。

     onPressed: _user != null ? (){
        Navigator.push(
          context, 
          MaterialPageRoute(
            builder: (context)=> Screen2(user: _user)
          )
        );
     } : null,
1 Flutter - 在 PageView 中传递数据

我试图在我的综合浏览量的一个“页面”上键入一条消息,并希望该消息显示在另一个“页面”上。 我了解如何使用两个单独的 Scaffold 小部件来完成此操作,但我正在努力思考如何在具有嵌套 Stack/Pageview 的单个脚手架中执行此操作。 这是我设置浏览量的地方: 这是我的 InsideR ...

2 Flutter-在小部件之间传递数据

我有2个小部件: ReportList ReportDetail 我正在尝试将报告数据从RepostList小部件传递到ReportDetail小部件,并再次调用API以在ReportDetail小部件中获取有关报告的更多信息。 在我的ReportList中,导航 ...

3 Flutter-如何从IGDB API检索和显示数据?

我有一个将成为视频游戏集合的应用程序,ApiHelper类可帮助我从IGDB API获取数据,我正在使用lib igdb_client从IGDB中搜索和检索数据,但我不知道如何显示数据,映射到地图变量或其他内容,以显示在屏幕上。 我尝试阅读IGDB文档,但这是我第一次使用API​​,但我不 ...

6 Flutter - 该方法在 null 上被调用

我正在编写一个应用程序,该应用程序通过一个水平listView和一个垂直listView在同一视图中显示两个媒体流。 我目前正在使用一些可以在此处找到的漂亮样板将信息实施到底部listView 。 我是新手,我相信我的代码有点乱,总之我收到了错误; 试图执行代码时,发现这里在home_page ...

8 Flutter - 将数据从 Future 变量(sqlite)传递到小部件

我对 Flutter 和 Dart 非常陌生,但我正在尝试从 sqlite 方法中获取数据并将其作为参数传递给新的小部件。 我试过使用 FutureBuilder,但没有帮助。 我正在调用加载数据的方法,等待 .then() 中的数据,然后在内部设置类变量的状态,以便稍后将其分配给小部件,但即使在 ...

10 Flutter - 在同一屏幕上的小部件之间传递数据

我有一个屏幕分成两半。 上半部分有一个列表视图,下半部分将显示基于onTap:来自上面列表视图中的 listTile 的详细信息。 删除所有不相关的部分后,我的代码看起来像这样: 因此,为了从 listview 获取基于 onTap() 的数据填充 detailsView,我必须将一些变量(或 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM