// Copyright 2020, the Flutter project authors. Please see the AUTHORS file // for details. 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'; void main() { runApp(const MyApp()); } // This app simulates possible null errors. Try running it and see if it fails. // You can then try to hot reload a few times; you should see it occasionally // failing and occasionally succeeding. class MyApp extends StatelessWidget { const MyApp({Key key}) : super(key: key); @override Widget build(BuildContext context) { // Get data from services. Note: in a real application, // these would be async calls, but we’re using sync calls // for simplicity. final localizedAppName = Config.getAppName(); final temperatures = WeatherService.getTemperatures(); return MaterialApp( home: Scaffold( appBar: AppBar(title: Text(localizedAppName)), body: Padding( padding: const EdgeInsets.all(8.0), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ const Text('Temperature next 3 days:'), for (final t in temperatures) Text(t.round().toString()), ], ), ), ), ); } } class Config { static String getAppName() { // Imagine this looks up a localized version of the app name. We're using // the current time to simulate a variance in responses. if (DateTime.now().second.isEven) { return 'Weather forecast'; } else { // Oops, we don't have a localization. return null; } } } class WeatherService { static List getTemperatures() { // Imagine this makes a network call to get the current temperature. // We're using the current time to simulate a variance in responses. if (DateTime.now().millisecond.isEven) { return [32.2, 34.5, 31.0]; } else { if ((DateTime.now().second / 10).round().isEven) { // Oops, we couldn't get any temperatures. return null; } else { // Oops, we couldn't get one of the temperatures. return [32.2, 34.5, null, 31.0]; } } } }