flutter - Flutter 应用程序中的提供程序不会更改数据
问题描述
我正在 Flutter 上制作一个应用程序并使用 Provider 来选择要显示的屏幕。但是当我改变数据时,屏幕并没有改变。正如我的日志所示,Wrapper 小部件也不会重新生成。这是我的 main.dart 文件:
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:school_app/services/auth_service.dart';
import 'package:school_app/wrapper.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return ChangeNotifierProvider(
create: (_) => AuthProvider(),
child: MaterialApp(
home: Wrapper(),
),
);
}
}
还有 wrapper.dart:
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:school_app/screens/authenticate/auth.dart';
import 'package:school_app/screens/school/home.dart';
import 'package:school_app/services/auth_service.dart';
class Wrapper extends StatefulWidget {
@override
_WrapperState createState() => _WrapperState();
}
class _WrapperState extends State<Wrapper> {
@override
void initState() {
// TODO: implement initState
super.initState();
AuthService().auth;
}
@override
Widget build(BuildContext context) {
return Consumer<AuthProvider>(builder: (context, authProvider, child) {
print(authProvider.auth);
if (!authProvider.auth) {
return Auth();
} else {
return Home();
}
});
}
}
还有 AuthService 和 AuthProvider 类:
import 'package:dio/dio.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:shared_preferences/shared_preferences.dart';
class AuthService {
/* AuthUser _user(User user) {
return user != null ? AuthUser(uid: user.uid) : null;
}*/
AuthProvider auth = new AuthProvider();
//sign in
Future signIn(String username, String password) async {
try {
SharedPreferences prefs = await SharedPreferences.getInstance();
var dio = Dio();
Response user = await dio.post('url', data: {
'username': username,
'password': password
});
if(user.data['success'] == false) return user.data['msg'];
await prefs.setString('token', user.data['token']);
auth.setAuth(true);
print("SUCCESS");
} catch(e) {
print('Error ' + e.toString());
}
}
}
class AuthProvider with ChangeNotifier {
bool _auth;
AuthProvider() {
_auth = false;
}
bool get auth => _auth;
void setAuth(bool auth) {
_auth = auth;
notifyListeners();
}
}
请注意,这里有两个类,在 AuthService 中我调用函数 .setAuth(true)。
解决方案
推荐阅读
- c# - 当我将 .AsNoTracking() 埋在存储库中时,为什么没有启用它?
- apache - ReplaceText 处理器
- java - 具有动态部分的 RecyclerView
- ios - NSFetchedResultsController 没有正确更新 tableView
- mysql - 使用准备好的语句插入多行
- sql - 如何对另一个表中的记录数进行采样?
- php - 无法弄清楚是什么导致了这个致命错误:在非对象上调用成员函数 format()
- swift - 在 2 个字典中打印字典键
- node.js - 到 node.js 的 Python 代码
- javascript - 链接到路由 Material-UI MenuItems