Flutter - 尝试构建未来的上下文以检查用户是不是已登录,但我的构建方法有错误

Posted

技术标签:

【中文标题】Flutter - 尝试构建未来的上下文以检查用户是不是已登录,但我的构建方法有错误【英文标题】:Flutter - Trying to build a future context to check if user is logged in, but my build method has an errorFlutter - 尝试构建未来的上下文以检查用户是否已登录,但我的构建方法有错误 【发布时间】:2020-09-24 10:13:15 【问题描述】:

Flutter 还算新鲜,我有一个可以成功登录 Firebase 的应用。但是现在我正在努力做到这一点,如果用户已经注册,应用程序会跳过注册页面。我为这篇文章创建了一个新模板。

我使用了这个帖子:How to correctly check if a user is logged in 来获得灵感,但我的似乎抛出了一个错误。如果有区别,我正在使用 VSCODE:

import 'package:buildfuture/FirstPage.dart';
import 'package:buildfuture/SecondPage.dart';
import 'package:flutter/material.dart';
import 'package:firebase_auth/firebase_auth.dart';

void main() 
  runApp(MyApp());


class MyApp implements StatelessWidget 

  @override 
    Widget build() 
      return FutureBuilder<FirebaseUser>( 
        future: FirebaseAuth.instance.currentUser(),
        builder: (BuildContext context, AsyncSnapshot<FirebaseUser> snapshot) 

          if (snapshot.hasData) 
            FirebaseUser user = snapshot.data;
            return First();
          
           return Second();
          
      );
    

我不明白错误:

'Object.toString' ('String Function()') 不是有效的覆盖 'Diagnosticable.toString' ('字符串函数(DiagnosticLevel minLevel)')。

'MyApp.build' ('Widget Function()') 不是有效的覆盖 'StatelessWidget.build' ('Widget Function(BuildContext)')。

以防万一我还包括 FirstPage.dart。 SecondPage.dart 完全一样,只是类被命名为 Second

import 'package:flutter/material.dart';

class First extends StatelessWidget 

  @override
  Widget build(BuildContext context)
    return new Container(
      child: new Center(
        child: new Icon(Icons.accessibility_new, size: 150.0, color: Colors.brown)
      )
    );
  

【问题讨论】:

【参考方案1】:

错误是class MyApp implements StatelessWidget这一行

您应该使用extends 关键字而不是implements

试试:

class MyApp extends StatelessWidget // your class body ... 

还有build 方法签名必须包含BuildContext 参数。

@override
Widget build(BuildContext context) return ... 

【讨论】:

谢谢马科斯。我假设因为您的其他示例不包含 BuildContext 参数,并且它仅作为未来构建的一部分包含在内,所以这就是所需要的。现已修复。 @vwdewaal 哦……那是我的错。对不起!也谢谢。【参考方案2】:

“MyApp.build”(“Widget Function()”)不是“StatelessWidget.build”(“Widget Function(BuildContext)”)的有效覆盖。

错误的override 签名。

你在 MyApp 类中的 build() 方法必须是 build(BuildContext context):

@override 
Widget build(BuildContext context) 
  return FutureBuilder<FirebaseUser>( 
    future: FirebaseAuth.instance.currentUser(),
    builder: (BuildContext context, AsyncSnapshot<FirebaseUser> snapshot) 

      if (snapshot.hasData) 
        FirebaseUser user = snapshot.data;
        return First();
      
       return Second();
      
  );

如果在FirebaseUser user = snapshot.data; 行设置断点,snapshot.data 的值是多少?

【讨论】:

【参考方案3】:

叹息。

我没有看到...在我的原始代码中,我“实现”而不是“扩展”。它已经杀死了我 2 天。

【讨论】:

以上是关于Flutter - 尝试构建未来的上下文以检查用户是不是已登录,但我的构建方法有错误的主要内容,如果未能解决你的问题,请参考以下文章

传递正确的上下文以在flutter中构建按钮小部件

Flutter:当我抛出异常时,构建器在未来的构建器中调用了两次

Dart/Flutter:快速检查 404 链接列表

三星手机中的 Flutter 构建失败,权限被拒绝:来自 android 的广播要求以用户 -1 的身份运行,但从用户 0 调用

Flutter 在 initState 方法中获取上下文

Flutter,内部流构建器,如何根据未来获取流?