所以我有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楼 票数:0

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

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

     onPressed: _user != null ? (){
        Navigator.push(
          context, 
          MaterialPageRoute(
            builder: (context)=> Screen2(user: _user)
          )
        );
     } : null,

  ask by Kingsley Kbc Comics translate from so

未解决问题?本站智能推荐:

1回复

Flutter-将数据从孩子传递给父母和另一个孩子

我有一个班级限制和 3 个孩子。 我想将 CountryDropDown(以及看起来几乎相同的 FieldDropDown 类,以及 DateSelector 类,但可能稍后)类的数据传递给 Restrictions,然后传递给 UserOffers(通过点击按钮更新 List)。 现在我只能在 R
1回复

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

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

Flutter-在Null上调用了方法“+”

在个人理财应用程序上工作,编码更精确。 getter 应该返回一个日期列表,其中包含分配给每个日期的键。 当我运行代码时,它应该打印出空列表,除非它没有并且当我添加一个新事务时,这个错误出现在模拟器中NoSuchMethodError: The methos '+' was called on N
2回复

Flutter-如何将个人资料图片和姓名数据从登录屏幕传递到抽屉

我是新手,在将个人资料图片和姓名的数据从登录屏幕传递到主屏幕抽屉时会遇到麻烦,请提供帮助。谢谢。 我可以通过获取个人资料图片 和使用的名称 我想在另一个名为main.dart屏幕上的抽屉中显示此图像和个人资料图片
2回复

flutter-如何延迟ListView,所以项目逐一显示

我有一个ListView ,它包含通过StreamBuilder生成的动态项。 目前,这些项目像普通的ListView一样显示。 但是,我想让ListView的项目一个接一个地显示延迟 。 它甚至可能吗?
1回复

Flutter-解析HTML数据时出错

我一直在试图修改代码, 可在这里 ,这样的title和dateAdded从VMoneyNews是在应用程序可见listView 。 不幸的是,当我尝试运行以下已编辑的代码时,出现以下图像中指出的错误。
2回复

Flutter-来自firebase的readData()导致该方法在null上被调用

我正在通过名为“flutter-firebase-crud-build-2-apps-super-easy”的 Udemy 课程学习 Flutter。 我在第八班学习从 firebase 读取数据。 我的 readData() 方法如下: 正在返回此错误: 这是我的火力基地: 我找不到这个错误的原
1回复

Firebase/Flutter-无法将数据写入数据库

我正在编写我的 Flutter 应用程序,它要求用户将某些图像上传到 Firebase。 一切都可以完美地进行用户身份验证并将图像存储到 Firebase 存储。 在要求用户从他的手机上传带有描述的图片的部分中,我得到的只是 Firebase 存储部分中的图片,但我的数据库中没有描述和其他元数据。