flutter - 颤振中的提供者不会改变屏幕
问题描述
我在颤振应用程序中使用提供程序来更改我的应用程序中的屏幕。这是我的 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: (_) => AuthService().auth,
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/models/user.dart';
import 'package:school_app/screens/school/home.dart';
import 'package:school_app/services/auth_service.dart';
class Wrapper extends StatelessWidget {
@override
Widget build(BuildContext context) {
final user = Provider.of<AuthProvider>(context);
print(user.auth);
if(!user.auth) return Auth();
return Home();
}
}
这是我的 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();
}
}
我也制作了 Wrapper 小部件的这个变体,但它也不起作用:
class Wrapper extends StatelessWidget {
@override
Widget build(BuildContext context) {
final user = context.watch<AuthProvider>();
print(user.auth);
if(!user.auth) return Auth();
return Home();
}
}
和这个:
class Wrapper extends StatelessWidget {
@override
Widget build(BuildContext context) {
final user = context.watch<AuthProvider>();
print(user.auth);
if(!user.auth) return Auth();
return Home();
}
}
当我在 AuthProvider 类 setAuth 中调用一个函数时,没有任何改变。你能帮我找出我的错误吗?
解决方案
推荐阅读
- sql - 如何转换此代码以支持 MS SQL TVP 批量插入和更新
- python - 使用pandas读取excel日期时的日期错误比较
- powerapps - Powerapps 计算业务流程中的函数
- java - 启动时线程未运行
- python - 如何创建按日期排序的groupby ID变量第一次出现的指标列?
- html - 需要一个 XPATH 父级的子级,该父级具有另一个没有直接关联的特定子级
- windows - 向下滚动设备/程序/宏?
- python - 按照字典中列出的条件填充新列
- reactjs - 材料表设计搞砸了如何修复
- flutter - 无法编译:每当我将任何 video_player 依赖项添加到 Flutter 时,“任务执行失败:app:processDebugMainManifest”