Я новичок в трепетании и провайдере. Я хочу изменить вид входа в систему только после того, как пользователь войдет в систему. У меня есть виджет-оболочка, который прослушивает модель пользователя, если она была изменена, и автоматически отображает виджет аутентификации или домашний виджет. Приведенный ниже код не уведомляет оболочку о том, что пользователь не имеет значения null после того, как я вошел в систему. Я не знаю, это правильный способ его использования, но я надеюсь, что вы мне поможете.
//main.dart
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return ChangeNotifierProvider<User>.value(
value: User(),
child: MaterialApp(),
home: Wrapper(),
),
);
}
}
//wrapper.dart
class Wrapper extends StatelessWidget {
@override
Widget build(BuildContext context) {
final user = Provider.of<User>(context);
//return either home or authenticate widget
print(user);
if (user == null) {
return Authenticate();
} else {
return Home();
}
}
}
//authenticate.dart
class Authenticate extends StatefulWidget {
@override
_AuthenticateState createState() => _AuthenticateState();
}
class _AuthenticateState extends State<Authenticate> {
@override
Widget build(BuildContext context) {
return Container(
child: Signin(),
);
}
}
class Signin extends StatefulWidget {
@override
_SigninState createState() => _SigninState();
}
class _SigninState extends State<Signin> {
final AuthService _auth = AuthService();
@override
Widget build(BuildContext context) {
return Container(
child: MaterialButton(
onPressed: () async {
if (_formKey.currentState.validate()) {
dynamic result = await _auth.login(username, password);
}
},
)
)
//auth.dart
class AuthService {
static const endpoint = 'http://192.168.254.100:8000';
var client = new http.Client();
Future login(String user, String password) async {
try {
var response = await client.get('$endpoint/rest_login/?username=test&password=test');
return User.fromJson(json.decode(response.body));
} catch (e) {
return null;
}
}
}
//user.dart
class User with ChangeNotifier {
int id;
String name;
String username;
String email;
String session;
User({this.id, this.name, this.username, this.email, this.session});
User.initial()
: id = 0,
name = '',
username = '',
email = '',
session = '';
User.fromJson(Map<String, dynamic> json) {
id = json['id'];
name = json['name'];
username = json['username'];
email = json['email'];
session = json['session'];
notifyListeners();
}
}