Как восстановить корневой виджет флаттера?

Я использую пакет провайдера для обнаружения изменений в 'todaysTasks', но, как вы можете видеть, 'todayTasks' зависит от DaysRecords, в котором хранится список DayTasks, поэтому я хочу перестраивать свой корневой виджет (которым является MyApp) всякий раз, когда я нажимаю DayTask в DaysRecords.recordsList, но не могу придумать, как это сделать. Есть ли какое-то решение этой проблемы??

class MyApp extends StatelessWidget {
  static const routeName = '/root';
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    DayTasks todaysTasks = DaysRecords.recordsList.last;
    return ChangeNotifierProvider(
      create: (context) => todaysTasks,

1 ответ

Вы можете просто обернуть родительский виджет MyApp (я предполагаю, что это MaterialApp в основном методе) с помощью ChangeNotifierProvider вместо обертывания внутри MyApp.

Затем инициализируйте соответствующего поставщика в методе сборки MyApp или используйте потребителя для восстановления (управления своим состоянием).

void main() {
  runApp(MaterialApp(
    home: RootWidget(),
  ));
}

class RootWidget extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return ChangeNotifierProvider(
      create: (context) => SomeProvider(),
      child: MyApp(),
    );
  }
}

class MyApp extends StatelessWidget {
  static const routeName = '/root';

  @override
  Widget build(BuildContext context) {
    final provider = Provider.of<SomeProvider>(context, listen: true);

    // DayTasks todaysTasks = provider.recordsList.last;
    return Scaffold(
      body: AppBar(
        automaticallyImplyLeading: false,
      ),
    );
  }
}
Другие вопросы по тегам