【问题标题】:Value detected of type null when passing data via routes in flutter在颤振中通过路由传递数据时检测到 null 类型的值
【发布时间】:2022-01-20 20:29:29
【问题描述】:

这个错误只是在数据从加载屏幕成功传递之前的一段时间。

传递数据的加载界面:

如果我在这里打印实例,则不会出现错误

void setupWorldTime() async {
    WorldTime instance = WorldTime(location: 'Jawa Timur', flag: 'jakarta.png', url: 'Asia/Jakarta');
    await instance.getTime();
    Navigator.pushReplacementNamed(context, '/home', arguments: {
      'location': instance.location,
      'flag': instance.flag,
      'time': instance.time,
    });
  }

正在接收数据的主屏幕:

Map data = {};
  
  @override
  Widget build(BuildContext context) {

    data = ModalRoute.of(context)!.settings.arguments as Map;
    print(data['location']);

    return Scaffold(
      body: SafeArea(
        child: Padding(
          padding: const EdgeInsets.only(top: 50),
          child: Column(
            children: [
              TextButton.icon(
                onPressed: () {
                  Navigator.pushNamed(context, '/location');
                },
                icon: const Icon(Icons.edit_location),
                label: const Text('Edit Location'),
              ),
              const SizedBox(
                height: 20,
              ),
              Row(mainAxisAlignment: MainAxisAlignment.center, children: [
                Text(
                  data['time'],
                  style: const TextStyle(
                    fontSize: 30,
                  ),
                ),
              ]),
            ],
          ),
        ),
      ),
    );
  }

打印(数据['位置']);完美地打印数据,但在它之前立即显示上面的错误,这是否意味着打印方法在接收值之前期望数据的值为空?如何解决它

【问题讨论】:

    标签: flutter dart asynchronous routes


    【解决方案1】:

    您的方法setupWorldTime 是一个异步函数,在instance.getTime() 返回之前不会调用Navigator.pushReplacementNamed 位。因为您的主屏幕在没有设置参数的情况下启动,data = ModalRoute.of(context)!.settings.arguments as Map 会将数据设置为 null,从而导致您的错误。只有instance.getTime() 返回后,build() 才会再次被调用,这次是data != null,您的消息就会消失。

    要解决此问题,您应该在 build 函数中测试 data == null 并在数据确实仍然为空时显示其他内容(如加载指示器),或者使用 FutureBuilder(首选)。

    【讨论】:

    • 谢谢,你拯救了我的一天!
    猜你喜欢
    • 2020-01-13
    • 1970-01-01
    • 2021-06-26
    • 2020-07-29
    • 2022-12-11
    • 2022-11-02
    • 2020-07-24
    • 2020-09-27
    • 1970-01-01
    相关资源
    最近更新 更多