| // 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: .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 .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 .only(top: 16), | |
| child: Text('Error: ${snapshot.error}'), | |
| ), | |
| ]; | |
| } else { | |
| children = const <Widget>[ | |
| SizedBox.square( | |
| dimension: 60, | |
| child: CircularProgressIndicator(), | |
| ), | |
| Padding( | |
| padding: .only(top: 16), | |
| child: Text('Awaiting result...'), | |
| ), | |
| ]; | |
| } | |
| return Center( | |
| child: Column(mainAxisAlignment: .center, children: children), | |
| ); | |
| }, | |
| ), | |
| ); | |
| } | |
| } |