// 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 [CircularProgressIndicator]. void main() => runApp(const ProgressIndicatorExampleApp()); class ProgressIndicatorExampleApp extends StatelessWidget { const ProgressIndicatorExampleApp({super.key}); @override Widget build(BuildContext context) { return MaterialApp( theme: ThemeData(colorSchemeSeed: const Color(0xff6750a4)), home: const ProgressIndicatorExample(), ); } } class ProgressIndicatorExample extends StatefulWidget { const ProgressIndicatorExample({super.key}); @override State createState() => _ProgressIndicatorExampleState(); } class _ProgressIndicatorExampleState extends State with TickerProviderStateMixin { late AnimationController controller; int indicatorNum = 1; bool hasThemeController = true; @override void initState() { controller = AnimationController( vsync: this, duration: CircularProgressIndicator.defaultAnimationDuration * 0.8, ); controller.repeat(); super.initState(); } @override void dispose() { controller.dispose(); super.dispose(); } @override Widget build(BuildContext context) { return Scaffold( body: Theme( data: ThemeData( progressIndicatorTheme: hasThemeController ? ProgressIndicatorThemeData(controller: controller) : null, ), child: Padding( padding: const EdgeInsets.all(20.0), child: Column( spacing: 8.0, children: [ Row( mainAxisAlignment: MainAxisAlignment.center, children: [ TextButton( onPressed: () { setState(() { indicatorNum += 1; }); }, child: const Text('More indicators'), ), TextButton( onPressed: () { setState(() { indicatorNum -= 1; }); }, child: const Text('Fewer indicators'), ), ], ), Row( mainAxisAlignment: MainAxisAlignment.center, children: [ Text( 'Theme controller? ${hasThemeController ? 'Yes' : 'No'}', ), TextButton( onPressed: () { setState(() { hasThemeController = !hasThemeController; }); }, child: const Text('Toggle'), ), ], ), ManyProgressIndicators(indicatorNum: indicatorNum), ], ), ), ), ); } } /// Display several [CircularProgressIndicator] in nested `Container`s. class ManyProgressIndicators extends StatelessWidget { const ManyProgressIndicators({super.key, required this.indicatorNum}); final int indicatorNum; Widget _nestIndicator({required Widget child}) { return Container( padding: const EdgeInsets.all(5), margin: const EdgeInsets.all(5), decoration: BoxDecoration( color: const Color.fromARGB(100, 240, 240, 0), border: Border.all(), ), child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [const CircularProgressIndicator(), child], ), ); } @override Widget build(BuildContext context) { Widget child = const SizedBox(); for (int i = 0; i < indicatorNum; i++) { child = _nestIndicator(child: child); } return child; } }