Flutter 未来建设者:“;应为类型为';未来<;地图<;动态,动态>>';,但是得到了一个类型'_JsonMap'&引用;
在尝试将Future Map传递给Future builder小部件时,会出现以下错误 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
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},');
}
}
})),
]
);
}}