| // 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 [FutureBuilder]. |
| |
| void main() => runApp(const FutureBuilderExampleApp()); |
| |
| class FutureBuilderExampleApp extends StatelessWidget { |
| const FutureBuilderExampleApp({super.key}); |
| |
| @override |
| Widget build(BuildContext context) { |
| return const MaterialApp(home: FutureBuilderExample()); |
| } |
| } |
| |
| class FutureBuilderExample extends StatefulWidget { |
| const FutureBuilderExample({super.key}); |
| |
| @override |
| State<FutureBuilderExample> createState() => _FutureBuilderExampleState(); |
| } |
| |
| class _FutureBuilderExampleState extends State<FutureBuilderExample> { |
| final Future<String> _calculation = Future<String>.delayed( |
| const Duration(seconds: 2), |
| () => 'Data Loaded', |
| ); |
| |
| @override |
| Widget build(BuildContext context) { |
| return DefaultTextStyle( |
| style: Theme.of(context).textTheme.displayMedium!, |
| textAlign: TextAlign.center, |
| child: FutureBuilder<String>( |
| future: _calculation, // a previously-obtained Future<String> or null |
| builder: (BuildContext context, AsyncSnapshot<String> snapshot) { |
| List<Widget> children; |
| if (snapshot.hasData) { |
| children = <Widget>[ |
| const Icon(Icons.check_circle_outline, color: Colors.green, size: 60), |
| Padding( |
| padding: const EdgeInsets.only(top: 16), |
| child: Text('Result: ${snapshot.data}'), |
| ), |
| ]; |
| } else if (snapshot.hasError) { |
| children = <Widget>[ |
| const Icon(Icons.error_outline, color: Colors.red, size: 60), |
| Padding( |
| padding: const EdgeInsets.only(top: 16), |
| child: Text('Error: ${snapshot.error}'), |
| ), |
| ]; |
| } else { |
| children = const <Widget>[ |
| SizedBox(width: 60, height: 60, child: CircularProgressIndicator()), |
| Padding(padding: EdgeInsets.only(top: 16), child: Text('Awaiting result...')), |
| ]; |
| } |
| return Center( |
| child: Column(mainAxisAlignment: MainAxisAlignment.center, children: children), |
| ); |
| }, |
| ), |
| ); |
| } |
| } |