Как восстановить корневой виджет флаттера?
Я использую пакет провайдера для обнаружения изменений в '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,
),
);
}
}