Извините, я новичок, и я застрял в этой проблеме. Я пытаюсь получить доступ к значению, используемому с changeNotifier, используя пакет провайдера, и просто распечатать его, но он всегда возвращает ноль.
Main.dart
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MultiProvider(
providers: [
ChangeNotifierProvider(
create: (_) => LoginService(),
)
],
child: MaterialApp(
title: 'Test',
debugShowCheckedModeBanner: false,
theme: ThemeData(
primaryColor: Colors.deepOrange, accentColor: Colors.amber),
home: HomePage(),
routes: {ExpenseListPage.routeName: (ctx) => ExpenseListPage()},
),
);
}
}
LoginService.dart
class LoginService with ChangeNotifier {
String backendUrl = 'http://10.0.2.2:3000/login';
UserData _userData = UserData();
// Login
Future<bool> login({String email, String password}) async {
var userData = {"email": email, "password": password};
Response response = await post('$backendUrl/login', body: userData);
String body = response.body;
var userObject = jsonDecode(body);
if (userObject['token'] != null) {
setUserData(
name: userObject['name'],
);
return Future.value(true);
}
return Future.value(false);
}
setUserData({String name}) {
_userData.name = name;
notifyListeners();
}
UserData getUserData() => _userData;
}
Новая страница, на которой я пытаюсь использовать ее после перехода со страницы входа в систему
class ExpenseListPage extends StatelessWidget {
static const routeName = '/userExpenseList';
@override
Widget build(BuildContext context) {
var exp = Provider.of<LoginService>(context).getUserData();
print(exp.name); // I always get null printed here
return Scaffold(
appBar: AppBar(
title: Text('Test'),
),
body: Center(
child: Text('Test'),
),
);
}