// Copyright 2014 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. import 'package:flutter/material.dart'; /// Flutter code sample for [InheritedTheme]. void main() { runApp(const InheritedThemeExampleApp()); } class MyAppBody extends StatelessWidget { const MyAppBody({super.key}); @override Widget build(BuildContext context) { final NavigatorState navigator = Navigator.of(context); // This InheritedTheme.capture() saves references to themes that are // found above the context provided to this widget's build method // excluding themes are found above the navigator. Those themes do // not have to be captured, because they will already be visible from // the new route pushed onto said navigator. // Themes are captured outside of the route's builder because when the // builder executes, the context may not be valid anymore. final CapturedThemes themes = InheritedTheme.capture(from: context, to: navigator.context); return GestureDetector( onTap: () { Navigator.of(context).push( MaterialPageRoute<void>( builder: (BuildContext _) { // Wrap the actual child of the route in the previously // captured themes. return themes.wrap( Container( alignment: Alignment.center, color: Colors.white, child: const Text('Hello World'), ), ); }, ), ); }, child: const Center(child: Text('Tap Here')), ); } } class InheritedThemeExampleApp extends StatelessWidget { const InheritedThemeExampleApp({super.key}); @override Widget build(BuildContext context) { return const MaterialApp( home: Scaffold( // Override the DefaultTextStyle defined by the Scaffold. // Descendant widgets will inherit this big blue text style. body: DefaultTextStyle( style: TextStyle(fontSize: 48, color: Colors.blue), child: MyAppBody(), ), ), ); } }