当我用于调试时打印出的类型是--> Flutter中的 'Future' 的实例。

12 浏览
0 Comments

当我用于调试时打印出的类型是--> 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

所以请帮帮我。

提前感谢...

0
0 Comments

你的代码打印 "Instance of 'Future'" 的原因是因为打印的是 getIntValuesSF() 的实例,而不是它返回的值。你可以通过运行异步函数并使用 then 方法来获取 future 完成时的返回值。

以下是解决方法的代码示例:

void initState() {

super.initState();

getIntValuesSF().then((value) {

debugPrint('type-->$value');

// 执行需要 value 参数的函数

});

}

谢谢,它有效了,我完全忘记使用 then 方法了,谢谢。

0
0 Comments

当我在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()}");

// 其他初始化操作

}

希望以上方法对解决问题有所帮助。

0