gpt4 book ai didi

flutter - 使用提供商登录

转载 作者:IT王子 更新时间:2023-10-29 07:17:25 27 4
gpt4 key购买 nike

我正在尝试使用提供商模式创建登录。到目前为止,这是我尝试过的...

首先这是我的 UserRepository:

enum Status { Uninitialized, Authenticated, Authenticating, Unauthenticated }
class UserRepository with ChangeNotifier{
User user;
Status _status =Status.Uninitialized;

Status get status => _status;
User get authUser => user;

Future<bool> signIn(String email, String password) async {
try{
var body = jsonEncode({
'email': email,
'password': password
});

var res = await http.post(('http://192.168.178.35:8000/auth/login'),
body: body,
headers: {
"Accept": "application/json",
"content-type": "application/json"
});
var response = jsonDecode(res.body);

if(response.status == 200)
{
notifyListeners();
return true;
}
}
catch(e)
{
_status = Status.Unauthenticated;
notifyListeners();
return false;
}
}
}

这应该是我的入口页面(主页):

class HomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return ChangeNotifierProvider<UserRepository>(
child: Consumer(
builder: (context, UserRepository user, _) {
switch (user.status) {
case Status.Uninitialized:
return Login();
case Status.Unauthenticated:
case Status.Authenticating:
return Login();
case Status.Authenticated:
return DriverDashboard(user: user.user);
}
},
),
);
}
}

在我尝试运行该应用程序后,出现此错误:

enter image description here

有人知道为什么会这样吗?这是实现 ChangeNotifierProvider 的正确方法吗?

我正在努力学习本教程 https://medium.com/flutter-community/flutter-firebase-login-using-provider-package-54ee4e5083c7 ...

但是,除了 Firebase,我使用自定义创建的 RESTful API 作为后端。

最佳答案

虽然这个错误消息并不直观,但我猜你可能会在 builder 函数中返回一个 null

    class HomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return ChangeNotifierProvider<UserRepository>(
child: Consumer(
builder: (context, UserRepository user, _) {
//NOTICE HERE: What If your user is null?
switch (user.status) {
case Status.Uninitialized:
return Login();
case Status.Unauthenticated:
case Status.Authenticating:
return Login();
case Status.Authenticated:
return DriverDashboard(user: user.user);
}
// return SplashPageHere();
},
),
);
}
}

您应该提供一个初始页面,或者为构建器返回 Widget 的内容。

编辑:这是使用 ChangeNotifierProvider

的示例
    ChangeNotifierProvider<AppState>(
builder: (_) => AppState(),
child: MyHomePage(),
));

这是您从媒体发布的代码:

      @override
Widget build(BuildContext context) {
return ChangeNotifierProvider(
builder: (_) => UserRepository.instance(),
child: Consumer(
builder: (context, UserRepository user, _) {
switch (user.status) {
case Status.Uninitialized:
return Splash();
case Status.Unauthenticated:
case Status.Authenticating:
return LoginPage();
case Status.Authenticated:
return UserInfoPage(user: user.user);
}
},
),
);
}

ChangeNotifierProvider 应该包含一个 builderchild,这就是为什么你的用户总是有 null 的原因。 .

关于flutter - 使用提供商登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56923633/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com