Значение из провайдера не читается - PullRequest
0 голосов
/ 15 марта 2020

Я создал класс с именем 'Session' и его класс провайдера 'SessionProvider' , в котором я объявил и инициализировал объект с именем 'currentSession' . Но не знаю, почему я не могу получить доступ к аргументам currentSession, например, имени, идентификатору в любом месте дерева (просто получить null при их вызове), хотя я определил SessionProvider в главном классе как предок.

Вот мой код:

class Session {
  int id;
  String name;

  Session({int id, String name});
}

class SessionProvider with ChangeNotifier {
  Session _dummy_currentSession = Session(id: 1, name: 'Spring-16');

  Session get currentSession {
    return _dummy_currentSession;
  }
}

Основной класс:

void main(List<String> args) {
  // debugPaintSizeEnabled = true;
  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  MyApp({Key key}) : super(key: key);

  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  @override
  Widget build(BuildContext context) {
    SystemChrome.setPreferredOrientations([
      DeviceOrientation.portraitUp,
    ]);

    return LayoutBuilder(
      builder: (context, constraints) =>
          OrientationBuilder(builder: (context, orientation) {
        SizeConfig().init(constraints, orientation);
        return MultiProvider(
          providers: [
            ChangeNotifierProvider.value(
              value: SessionProvider(),
            ),
          ],
          child: MaterialApp(
            home: LoginPage(),
            theme: AppTheme.lightTheme,
          ),
        );
      }),
    );
  }
}

На экране, где я хочу получить к нему доступ:

final sessionTest = Provider.of<SessionProvider>(context, listen: false).currentSession;
print(' session: '+ sessionTest.name);

И вот сообщение об ошибке, которое я получаю: enter image description here

1 Ответ

1 голос
/ 16 марта 2020

, поскольку sessionTest.name возвращает ноль в print(' session: '+ sessionTest.name);, источник ошибки находится в классе Session, он должен быть:

class Session {
  int id;
  String name;

  Session({this.id, this.name}); // <--
}
...