首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么会打印出小部件的名称?

为什么会打印出小部件的名称?
EN

Stack Overflow用户
提问于 2022-07-23 14:14:48
回答 2查看 64关注 0票数 0

运行应用程序后,我在打印名称和呈现Widget名称时遇到了问题

代码语言:javascript
运行
复制
class MyApp extends StatefulWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  autoLogin() async {
    SharedPreferences prefs = await SharedPreferences.getInstance();
    bool? loggedIn = prefs.getBool('loggedin');
    if (loggedIn == true) {
       Home();
    } else {
      return LoginOrSignup();
    }
  }

  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
        home: Scaffold(body:SafeArea(
          child: FutureBuilder(
            future: autoLogin(),
            builder: (BuildContext context, snapshot) {
              if (snapshot.hasData) {
                return Text('${snapshot.data}');
              } else {
                return LoginOrSignup();
              }
            }),

        ))
    );
  }
}

运行该应用程序后,输出为LoginOrSignup()

代码语言:javascript
运行
复制
class LoginOrSignup extends StatelessWidget {
  const LoginOrSignup({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Column(
        mainAxisAlignment: MainAxisAlignment.spaceEvenly,
        children: [
          Center(
            child: MaterialButton(
              onPressed: () {
                Navigator.push(
                  context,
                  MaterialPageRoute(builder: (context) => Login()),
                );

              },
              child: Text('Loginsss'),
            ),
          ),
          Center(
            child: MaterialButton(
              onPressed: (){
                 Navigator.push(
                  context,
                  MaterialPageRoute(builder: (context) => Signup()),
                );
              },
              child: Text('Signup'),
            ),
          )
        ],
      ),
    );
  }
}

我尝试使用了另一个小部件,如Text(),但在移动应用程序上运行应用程序时,它仍然打印出相同的小部件。问题似乎出现在我所拥有的autoLogin()函数中

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-07-23 15:37:39

问题是您未来的return本身,当您使用Text('${snapshot.data}')它打印小部件时,为了简化这个问题,您可以从未来返回数据(这是我们通常所做的)。假设您喜欢返回小部件本身。

我们需要对未来进行一点修正。

代码语言:javascript
运行
复制
  Future<Widget> autoLogin() async {
    SharedPreferences prefs = await SharedPreferences.getInstance();
    bool? loggedIn = prefs.getBool('loggedin');
    if (loggedIn == true) {
      return Home();
    } else {
      return LoginOrSignup();
    }
  }

代码语言:javascript
运行
复制
return MaterialApp(
    home: Scaffold(
        body: SafeArea(
  child: FutureBuilder<Widget>(
    future: autoLogin(),
    builder: (BuildContext context, snapshot) {
      if (snapshot.hasData) {
        return snapshot.data!;
      } else {
        return LoginOrSignup();
      }
    }),
)));
票数 1
EN

Stack Overflow用户

发布于 2022-07-23 15:36:57

您将在Widget函数中返回一个autoLogin。相反,您应该返回一个bool

代码语言:javascript
运行
复制
Future<bool?> autoLogin() async {
    SharedPreferences prefs = await SharedPreferences.getInstance();
    bool? loggedIn = prefs.getBool('loggedin');
if (loggedIn == null) return null;
    if (loggedIn == true) {
       return true;
    } else {
      return false;
    }
  }

然后在FutueBuilder中,您可以检查它是否返回Home()

代码语言:javascript
运行
复制
if (snapshot.hasData && snapshot.data! == true) {
                return Home();
              } else {
                 return LoginOrSignup();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73091465

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档