Flutter 未来建设者:“;应为类型为';未来<;地图<;动态,动态>>';,但是得到了一个类型'_JsonMap'&引用;

Flutter 未来建设者:“;应为类型为';未来<;地图<;动态,动态>>';,但是得到了一个类型'_JsonMap'&引用;,flutter,future,flutter-futurebuilder,Flutter,Future,Flutter Futurebuilder,在尝试将Future Map传递给Future builder小部件时,会出现以下错误 JsonMap已使用cast as操作符强制转换为未来映射,并且已使用Future.value()返回值,但以下错误仍然存在 更多详细信息: 如果SharedReferences中的值未初始化,则构建器应该获取这些初始值 但是,在传递映射的初始值时,flatter不会将返回的_JsonMap视为未来的映射,并给出以下错误 如何将JsonMap转换为未来地图 错误: Expected a value of ty

在尝试将Future Map传递给Future builder小部件时,会出现以下错误

JsonMap已使用
cast as
操作符强制转换为未来映射,并且已使用
Future.value()
返回值,但以下错误仍然存在

更多详细信息:
如果SharedReferences中的值未初始化,则构建器应该获取这些初始值

但是,在传递映射的初始值时,flatter不会将返回的_JsonMap视为未来的映射,并给出以下错误

如何将JsonMap转换为未来地图

错误:

Expected a value of type 'Future<Map<dynamic, dynamic>>?', but got one of type '_JsonMap'
需要一个类型为“Future”的值,但得到了类型为“\u JsonMap”的值
代码:

导入'dart:convert';
导入“dart:js”;
进口“包装:颤振/材料.省道”;
导入“package:shared_preferences/shared_preferences.dart”;
类用户{
字符串名;
智力年龄;
布尔签署;
用户({this.name,this.age,this.subscribed});
}
void main()=>runApp(MyApp());
类MyApp扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回材料PP(
debugShowCheckedModeBanner:false,
标题:“JsonMap”,
主题:ThemeData.dark(),
家:脚手架(
appBar:appBar(
标题:正文(
“SharedReferences返回空值”,
样式:TextStyle(),
),
),
正文:UserScreen1(),
//正文:UserScreen1(sessionDataScreen1:_sessionDataMain),
),
);
}
}
类UserScreen1扩展了StatefulWidget{
@凌驾
_UserScreen1State createState()=>\u UserScreen1State();
}
类_UserScreen1State扩展状态{
=
用户_User=User();
var_mapGet;
var_映射集;
final _formKey=GlobalKey();
Future\u GetSharedReferences(\u userDataKey)异步{
var_userJsonInitial=''{
“名称”:“模拟”,
“年龄”:20岁,
“订阅”:true}';
final prefs=wait SharedPreferences.getInstance();
final rawJsonGet=prefs.getString(_userDataKey)??_userJsonInitial;
_mapGet=等待jsonDecode(rawJsonGet)作为未来;
打印(“\u mapGet=$\u mapGet”);
_forEach((k,v)=>print('${k}:${v}');
//return Future.from(json.decode(rawJsonGet));
返回Future.value(_mapGet);
}
void initState(){
super.initState();
_mapGet=\u GetSharedReferences(“\u userDataKey”);
_然后(_mapGet){
设置状态(){
_user=user(姓名:_-mapGet['name'],年龄:_-mapGet['age'],订阅:_-mapGet['subscribed']);
打印('User InitState:name=${u User.name},age=${{u User.age},subscribed=${u User.subscribed},');
});});
}
@凌驾
小部件构建(构建上下文){
返回列(
mainAxisAlignment:mainAxisAlignment.center,
儿童:[
容器(子项:FutureBuilder)(
未来:_mapGet,
生成器:(BuildContext上下文,异步快照){
交换机(快照.连接状态){
案例连接状态。正在等待:
return const CircularProgressIndicator();
违约:
if(snapshot.hasError){
返回文本('Error:${snapshot.Error}');
}否则{
//返回文本('User(BuildContext):name=${snapshot.data['name']},age=${snapshot.data['age']},subscribed=${snapshot.data['subscribed']},');
返回文本('User(BuildContext):nameMap=${snapshot.data},nameUser=${u User.name}');
}
}
})),
]
);
}}

尝试将地图更改为MAPTREED…不起作用。因为字符串是一种动态类型,所以它仍然保持不变。
import 'dart:convert';
import 'dart:js';
import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';

class User{
  String name;
  int age;
  bool subscribed;

  User({this.name, this.age, this.subscribed});
}


void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {

    return MaterialApp(
      debugShowCheckedModeBanner: false,
      title: 'JsonMap',
      theme: ThemeData.dark(),

      home: Scaffold(


        appBar: AppBar(
          title: Text(
            'SharedPreferences returns null values',
            style: TextStyle(),
          ),
        ),
        body: UserScreen1(),
        // body: UserScreen1( sessionDataScreen1 : _sessionDataMain ),
      ),
    );
  }
}
class UserScreen1 extends StatefulWidget {
  @override
  _UserScreen1State createState() => _UserScreen1State();
}

class _UserScreen1State extends State<UserScreen1> {

  =

    User _user = User();
    var _mapGet;
     var _mapSet;


    final _formKey = GlobalKey<FormState>();


    Future<Map<dynamic, dynamic>> _getSharedPreferences (_userDataKey)  async {



      var  _userJsonInitial = '''{
        "name" : "Mock",
         "age" : 20,
         "subscribed" : true}''';


      final prefs =   await SharedPreferences.getInstance();
      final rawJsonGet =  prefs.getString(_userDataKey) ?? _userJsonInitial;
      _mapGet = await jsonDecode(rawJsonGet) as Future<Map<dynamic,dynamic>>;
      print('_mapGet = $_mapGet ');


      _mapGet.forEach((k, v) => print('${k}: ${v}'));



    // return   Future<Map<String, dynamic>>.from(json.decode(rawJsonGet));

      return Future.value(_mapGet);

   }



  void initState() {
    super.initState();

    _mapGet =   _getSharedPreferences ('_userDataKey');
    _mapGet.then((_mapGet){
    setState(() {
      _user =  User(name : _mapGet['name'], age : _mapGet['age'], subscribed : _mapGet['subscribed']);
      print(' User InitState : name = ${_user.name}, age = ${_user.age},subscribed = ${_user.subscribed},');
    });});

    }



  @override
  Widget build(BuildContext context) {
    return Column(
        mainAxisAlignment: MainAxisAlignment.center ,
        children: [
          Container(child:FutureBuilder<Map>(
          future: _mapGet,
          builder: (BuildContext context, AsyncSnapshot<Map> snapshot) {
            switch (snapshot.connectionState) {
              case ConnectionState.waiting:
                return const CircularProgressIndicator();
              default:
                if (snapshot.hasError) {
                  return Text('Error: ${snapshot.error}');
                } else {
                  // return  Text(' User (BuildContext) : name = ${snapshot.data.['name']}, age = ${snapshot.data['age']},subscribed = ${snapshot.data['subscribed']},');
                  return  Text(' User (BuildContext) : nameMap = ${snapshot.data} , nameUser = ${_user.name},');

                }
            }
          })),

    

    ]
    );
  }}