// ignore_for_file: public_member_api_docs import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; void main() => runApp(MyApp()); class Counter with ChangeNotifier { int _count = 0; int get count => _count; void increment() { _count++; notifyListeners(); } } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MultiProvider( providers: [ ChangeNotifierProvider(builder: (_) => Counter()), ], child: Consumer( builder: (context, counter, _) { return MaterialApp( supportedLocales: const [Locale('en')], localizationsDelegates: [ DefaultMaterialLocalizations.delegate, DefaultWidgetsLocalizations.delegate, _ExampleLocalizationsDelegate(counter.count), ], home: const MyHomePage(), ); }, ), ); } } class ExampleLocalizations { static ExampleLocalizations of(BuildContext context) => Localizations.of(context, ExampleLocalizations); const ExampleLocalizations(this._count); final int _count; String get title => 'Tapped $_count times'; } class _ExampleLocalizationsDelegate extends LocalizationsDelegate { const _ExampleLocalizationsDelegate(this.count); final int count; @override bool isSupported(Locale locale) => locale.languageCode == 'en'; @override Future load(Locale locale) => SynchronousFuture(ExampleLocalizations(count)); @override bool shouldReload(_ExampleLocalizationsDelegate old) => old.count != count; } class MyHomePage extends StatelessWidget { const MyHomePage({Key key}) : super(key: key); @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: const Title()), body: const Center(child: CounterLabel()), floatingActionButton: const IncrementCounterButton(), ); } } class IncrementCounterButton extends StatelessWidget { const IncrementCounterButton({Key key}) : super(key: key); @override Widget build(BuildContext context) { return FloatingActionButton( onPressed: Provider.of(context).increment, tooltip: 'Increment', child: const Icon(Icons.add), ); } } class CounterLabel extends StatelessWidget { const CounterLabel({Key key}) : super(key: key); @override Widget build(BuildContext context) { final counter = Provider.of(context); return Column( mainAxisSize: MainAxisSize.min, mainAxisAlignment: MainAxisAlignment.center, children: [ const Text( 'You have pushed the button this many times:', ), Text( '${counter.count}', style: Theme.of(context).textTheme.display1, ), ], ); } } class Title extends StatelessWidget { const Title({Key key}) : super(key: key); @override Widget build(BuildContext context) { return Text(ExampleLocalizations.of(context).title); } }