',flutter,dart"/>

首页 > 解决方案 > 颤振错误:“对象?”类型的值 不能分配给“地图”类型的变量'

问题描述

“对象?”类型的值 不能分配给“地图<动态,动态>”类型的变量。

这一行的错误data = ModalRoute.of(context).settings.arguments;

class WorldTime {

  String location; //location name for UI
  late String time; //the time in location
  String flag;  //url to an asset flag icon
  String url;  //location url for api endpoint

  WorldTime({required this.location, required this.flag, required this.url});

   Future<void> getTime() async{

     try{
       
       //make the request
       Response response = await get(Uri. parse('http://worldtimeapi.org/api/timezone/$url'));
       Map data = jsonDecode(response.body);

       //print(data);

       //get properties from data
       String datetime = data['datetime'];
       String offset = data['utc_offset'].substring(1,3);
       
       //create datetime object
       DateTime now = DateTime.parse(datetime);
       now = now.subtract(Duration(hours: int.parse(offset)));

       // set the time property
       time = now.toString();
     }
     catch(e){
       print('caught error : $e');
       time = 'could not get time data';
     }
  }
}

在这里使用该类对象

void setupWorldTime() async {
WorldTime x =WorldTime(location: 'kolkata', flag: 'g.png', url: '/Asia/Kolkata');
await x.getTime();
Navigator.pushReplacementNamed(context, '/home',arguments: {
  'location' : x.location,
  'flag' : x.flag,
  'time' : x.time,
});

}

我正在尝试使用pushReplacementNamed();

Map data = {};

  @override
  Widget build(BuildContext context) {

    data = ModalRoute.of(context).settings.arguments;

标签: flutterdart

解决方案


  1. 为参数创建一个类:
class MyArguments {
  String? myString;
  int? myInt;
  MyArguments(this.myString, this.myInt);
}

  1. 例如传递这样的值:
Navigator.pushNamed(
  context,
  '/route',
  arguments: MyArguments("a",1),
);
  1. 使用它作为目标小部件的构建器:
@override
  Widget build(BuildContext context) {
    final args = ModalRoute.of(context)!.settings.arguments as MyArguments;
    // do something with args.myString, args.myInt


推荐阅读