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 构建失败,权限被拒绝:来自 android 的广播要求以用户 -1 的身份运行,但从用户 0 调用