公式ページのイントロダクションをもとにした使用例のメモです。
void main() { print('${DateTime.now()} すぐに表示'); printWithDelay('1秒後に表示されるかな?'); print('${DateTime.now()} すぐに表示?'); } const oneSecond = Duration(seconds: 1); Future<void> printWithDelay(String message) async { await Future.delayed(oneSecond); print('${DateTime.now()} $message'); } /// 上と下のメソッドは同じ動作をする。 // Future<void> printWithDelay(String message) { // return Future.delayed(oneSecond).then((_) { // print('${DateTime.now()} $message'); // }); // }
gitのプログラムをもとにした使用例のメモです。
void main() { xxx(); } xxx() async { print('${formate(DateTime.now())} xxx: 私は x です'); print('${formate(DateTime.now())} xxx: y を await します'); await yyy(); print('${formate(DateTime.now())} xxx: y を await しました'); } Future yyy() async { print('${formate(DateTime.now())} yyy: 私は y です'); print('${formate(DateTime.now())} yyy: z を await します'); await zzz(); print('${formate(DateTime.now())} yyy: z を await しました'); } Future zzz() async { print('${formate(DateTime.now())} zzz: 私は z です'); print('${formate(DateTime.now())} zzz: 通信中...しばらくお待ちください'); await Future.delayed(const Duration(seconds: 1)); print('${formate(DateTime.now())} zzz: 1秒後です'); } String formate(DateTime datetime) { return "${datetime.hour}:${datetime.minute}:${datetime.second}.${datetime.millisecond}"; }
Flutterの初期カウントアップのプログラムに適用したときのメモです。
以下のサイトを参考にさせていただきました。
qiita.com
import 'package:flutter/material.dart'; import 'dart:io'; void main() { runApp(const MyApp()); } class MyApp extends StatelessWidget { const MyApp({super.key}); @override Widget build(BuildContext context) { return MaterialApp( title: 'Flutter Demo', theme: ThemeData( colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple), useMaterial3: true, ), home: const MyHomePage(title: 'Flutter Demo Home Page'), ); } } class MyHomePage extends StatefulWidget { const MyHomePage({super.key, required this.title}); final String title; @override State<MyHomePage> createState() => _MyHomePageState(); } class _MyHomePageState extends State<MyHomePage> { int _counter = 0; void _incrementCounter() { setState(() { _counter++; print('onPressed インクリメントしました。'); }); } void _setCounter(int num) { setState(() { _counter = num; }); } @override void initState() { print("MyHomePage画面が表示されました。"); Async().asynctest3AndSetCount(_setCounter); super.initState(); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( backgroundColor: Theme.of(context).colorScheme.inversePrimary, title: Text(widget.title), ), body: Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[ const Text( 'You have pushed the button this many times:', ), Text( '$_counter', style: Theme.of(context).textTheme.headlineMedium, ), ], ), ), floatingActionButton: FloatingActionButton( onPressed: _incrementCounter, tooltip: 'Increment', child: const Icon(Icons.add), ), ); } } class Async { void asynctest1() { print("method begin"); print(DateTime.now().toString()); print("data1 start"); print(syncFunc("data1", 3)); print("data2 start"); print(syncFunc("data2", 2)); print("data3 start"); print(syncFunc("data3", 1)); } void asynctest2() { print("method begin"); print(DateTime.now().toString()); print("data1 start"); print(asyncFunc("data1", 3)); print("data2 start"); print(asyncFunc("data2", 2)); print("data3 start"); print(asyncFunc("data3", 1)); } void asynctest3() async { print("method begin"); print(DateTime.now().toString()); print("data1 start"); Future<String> result1 = asyncFunc("data1", 3); result1.then((result) { print(result); }); print("data2 start"); Future<String> result2 = asyncFunc("data2", 2); result2.then((result) { print(result); }); print("data3 start"); Future<String> result3 = asyncFunc("data3", 1); result3.then((result) { print(result); }); } void asynctest3AndSetCount(Function setCounter) async { print("method begin"); print(DateTime.now().toString()); print("data1 start"); Future<String> result1 = asyncFunc("data1", 8); result1.then((result) { print(result); setCounter(1000); print('data1 _Counterを1000に設定しました。'); }); print("data2 start"); Future<String> result2 = asyncFunc("data2", 5); result2.then((result) { print(result); setCounter(2000); print('data2 _Counterを2000に設定しました。'); }); print("data3 start"); Future<String> result3 = asyncFunc("data3", 2); result3.then((result) { print(result); setCounter(3000); print('data3 _Counterを3000に設定しました。'); }); } void asynctest4() async { print("method begin"); print(DateTime.now().toString()); print("data1 start"); print(await asyncFunc("data1", 3)); print("data2 start"); print(await asyncFunc("data2", 2)); print("data3 start"); print(await asyncFunc("data3", 1)); } // timeの時間分スリープし、その後現在時間を返す関数 String syncFunc(String name, int time) { sleep(Duration(seconds: time)); return name + ":" + DateTime.now().toString(); } // timeの時間分スリープし、その後現在時間を返す関数 Future<String> asyncFunc(String name, int time) async { return Future.delayed(Duration(seconds: time), () { return name + ":" + DateTime.now().toString(); }); } }