当我用于调试时打印出的类型是--> Flutter中的 'Future' 的实例。
当我用于调试时打印出的类型是--> Flutter中的 'Future' 的实例。
我的任务很简单,就是将共享数据给变量"type",请帮帮我。
*这个示例代码是main.dart,我使用了shared preferences进行数据传输,type的键是"typeOfUser",我看了很多博客,甚至在stackoverflow上看了很多问题,但没有一个适合我*
代码如下:
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart';
import 'package:nativestore/database/datatrans.dart';
import 'package:nativestore/homepage.dart';
import 'package:nativestore/loginout/loginpage.dart';
import 'package:nativestore/shophomepage.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'loginout/auth.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
home: routePage(),
);
}
}
class routePage extends StatefulWidget {
@override
routePageState createState() => routePageState();
}
class routePageState extends State
final AuthService _auth = AuthService();
int type;
bool isLoggedin = false;
getIntValuesSF() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
int val = prefs.getInt('typeOfUser');
return val;
}
@override
void initState() {
super.initState();
print("type-->${getIntValuesSF()}");
print("Init state");
_auth.autoLogin().then((value) {
if (value == 'null') {
print(isLoggedin);
setState(() {
isLoggedin = false;
});
} else if (value != null) {
setState(() {
isLoggedin = true;
});
} else {
setState(() {
isLoggedin = false;
});
}
});
}
@override
Widget build(BuildContext context) {
return isLoggedin == true
? (type == 2)
? homePage()
: ShopHomePage()
: loginPage();
}
}
输出:
Performing hot restart...
Syncing files to device Redmi Note 8...
Restarted application in 2,645ms.
I/flutter (14262): type-->Instance of 'Future
I/flutter (14262): Init state
所以请帮帮我。
提前感谢...
当我在Flutter中打印调试信息时,它显示的类型是'Future
问题原因:
问题出现在print语句中,当使用getIntValuesSF()函数作为参数时,getIntValuesSF()函数返回的是一个Future对象,而不是直接的值。因此,打印出来的类型是'Future
解决方法:
我们需要等待getIntValuesSF()函数返回结果,然后再进行打印操作。可以使用await关键字来等待Future对象的结果。
修改代码如下:
var value = await getIntValuesSF();
print("type-->${value.toString()}");
然而,即使我们做出了修改,问题仍然存在。打印结果仍然显示为'Future
解决方法2:
在问题出现的代码处添加async修饰符,并将其包裹在void initState()函数中。这样可以确保在执行打印操作之前,getIntValuesSF()函数已经返回了结果。
修改代码如下:
void initState() async {
var value = await getIntValuesSF();
print("type-->${value.toString()}");
// 其他初始化操作
}
希望以上方法对解决问题有所帮助。