【 Flutter 】Flutter を 基礎 から 学習 ( ウィジェット編 ) part107 Async
「 基礎 から 学ぶ Flutter 」という書籍で 学習 したことを ブログでアウトプットしていこうと思います。今回は ウィジェット編 ( part107 )です。
前回
【 Flutter 】Flutter を 基礎 から 学習 ( ウィジェット編 ) part106 Async
引き続き、Asyncについて学びます。
StreamBuilderウィジェット
StreamBuilde
ウィジェットはStream
クラスをUIで扱うためのウィジェットです。
詳しいことは本書内のもっと先で説明があるとのことです。
これを使用すれば状態変更時に画面全体を再描画するのではなく、部分的に再描画できるように実装ができるかもしれない・・・
という解釈でよいですかね。
HTMLでいうとAjaxを使用して部分更新するみたいなことができるということだと今のところ理解しておきます。
StatefulWidgetとsetStateを使う
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
//intl: ^0.17.0
import 'package:intl/intl.dart';
void main() {
// runApp(new MaterialApp(home: new MyApp()));
runApp(new MaterialApp(home: new SamplePage()));
}
class SamplePage extends StatefulWidget {
@override
State<StatefulWidget> createState() {
return _SampleState();
}
}
class _SampleState extends State<SamplePage> {
_toDateTime(TimeOfDay t) {
var now = DateTime.now();
return DateTime(now.year, now.month, now.day, t.hour, t.minute);
}
bool _init = true;
late DateTime _time = DateTime.now(); // late? これはなんでしょうか?
@override
Widget build(BuildContext context) {
return Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Container(
decoration: BoxDecoration(
border: Border(
bottom: BorderSide(width: 3),
),
),
child: Text(
_init ? "未選択" : DateFormat('hh:mm a').format(_time),
style: TextStyle(fontSize: 50),
),
),
ElevatedButton(
child: Text(
"時刻を選択する",
style: TextStyle(fontSize: 20),
),
style: ElevatedButton.styleFrom(
primary: Colors.deepOrangeAccent, //ボタンの背景色
),
onPressed: () async {
final select = await showTimePicker(
context: context,
initialTime: TimeOfDay.now(),
);
this.setState(() => _time = _toDateTime(select!));
this.setState(() {
_time = _toDateTime(select!);
_init = false;
});
},
),
],
);
}
}
なぜ背景が黒くなるのかわかっていません。
そして動きが少し変です(笑
StreamBuilderを使う
※「アーキテクチャ」の部分で説明するとのことなので後日確認します!
最後に
これは面白くなりそうな予感です。
しかしこの解説はずっと先の話・・・。
今日はここまで!
参考
FlutterのStreamBuilderをつかって無駄な再描画を減らそう – Qiita
dart – Late Initialization Error in Flutter because of _startDate – Stack Overflow
時計を表示して時刻の入力を簡単にする TimePicker の利用方法 – 各種 Material ウィジェットの使い方 – Flutter 入門 (keicode.com)
android – How to format DateTime in Flutter – Stack Overflow
datetime – Convert time to am/pm flutter – Stack Overflow
ディスカッション
コメント一覧
まだ、コメントがありません