Last active
April 23, 2020 14:55
-
-
Save KanybekMomukeyev/f678928abcae9821f30022c5877759ab to your computer and use it in GitHub Desktop.
Testing async await future after widget tree is diposed.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import 'package:flutter/material.dart'; | |
void main() { | |
runApp(MyApp()); | |
} | |
class MyApp extends StatelessWidget { | |
@override | |
Widget build(BuildContext context) { | |
return MaterialApp( | |
title: 'Flutter Demo', | |
theme: ThemeData( | |
primarySwatch: Colors.blue, | |
visualDensity: VisualDensity.adaptivePlatformDensity, | |
), | |
home: FirstRoute(valueTitle: 'Flutter Demo Home Page'), | |
); | |
} | |
} | |
class FirstRoute extends StatefulWidget { | |
FirstRoute({Key key, this.valueTitle}) : super(key: key); | |
final String valueTitle; | |
@override | |
_FirstRouteState createState() => _FirstRouteState(); | |
} | |
class _FirstRouteState extends State<FirstRoute> { | |
@override | |
Widget build(BuildContext context) { | |
return Scaffold( | |
appBar: AppBar( | |
title: Text('First Route'), | |
), | |
body: Center( | |
child: Row( | |
mainAxisAlignment: MainAxisAlignment.spaceEvenly, | |
children: [ | |
RaisedButton( | |
child: Text('Open route'), | |
onPressed: () { | |
Navigator.push( | |
context, | |
MaterialPageRoute( | |
builder: (context) => | |
SecondRoute(initialValue: 'Home Page')), | |
); | |
}, | |
), | |
], | |
), | |
), | |
); | |
} | |
} | |
class SecondRoute extends StatefulWidget { | |
SecondRoute({Key key, this.initialValue}) : super(key: key); | |
String initialValue; | |
@override | |
_SecondRouteState createState() => _SecondRouteState(); | |
} | |
class _SecondRouteState extends State<SecondRoute> { | |
Future<String> createOrderMessage() async { | |
var order = await fetchUserOrder(); | |
return 'Your order is: $order'; | |
} | |
Future<String> fetchUserOrder() { | |
return Future.delayed( | |
Duration(seconds: 5), | |
() => 'Large Latte', | |
); | |
} | |
@override | |
void initState() { | |
print("initState()"); | |
super.initState(); | |
} | |
@override | |
void dispose() { | |
print("dispose()"); | |
super.dispose(); | |
} | |
@override | |
Widget build(BuildContext context) { | |
return Scaffold( | |
appBar: AppBar( | |
title: Text(widget.initialValue), | |
), | |
body: Center( | |
child: Row( | |
mainAxisAlignment: MainAxisAlignment.spaceEvenly, | |
children: [ | |
RaisedButton( | |
child: Text('Go back'), | |
onPressed: () { | |
Navigator.pop(context); | |
}, | |
), | |
RaisedButton( | |
child: Text('Call await future'), | |
onPressed: () async { | |
final _someValue = await createOrderMessage(); | |
print("value is: $_someValue"); | |
if (this.mounted) { | |
setState(() { | |
widget.initialValue = _someValue; | |
}); | |
} | |
}, | |
), | |
], | |
), | |
), | |
); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment