まず、非同期処理というものを勉強すると良いと思います。
Future<String>
という型がなにを表しているのか、async
,await
は何をしているのか。
その勉強が必要です。
それはさておき、このようなコードになるはずです。
dart:main.dart
1import 'package:flutter/material.dart';
2
3void main() {
4 runApp(MyApp());
5}
6
7// DB用意するのは面倒なので省略します
8class DummyFirestoreRepository {
9 Future<int> getCount(String document) async => await Future.value(100);
10}
11
12class MyApp extends StatelessWidget {
13 @override
14 Widget build(BuildContext context) {
15 return MaterialApp(
16 title: 'Flutter Demo',
17 theme: ThemeData(
18 primarySwatch: Colors.blue,
19 ),
20 home: MyHomePage(),
21 );
22 }
23}
24
25class MyHomePage extends StatefulWidget {
26 MyHomePage({Key key}) : super(key: key);
27
28 final DummyFirestoreRepository repos = DummyFirestoreRepository();
29
30 @override
31 _MyHomePageState createState() => _MyHomePageState();
32}
33
34class _MyHomePageState extends State<MyHomePage> {
35 int _documentCount = 0;
36
37 @override
38 void initState() {
39 super.initState();
40 initCount();
41 // 短い処理なので、initCount 関数を作らずに以下のようにしてもよい
42 // widget.repos
43 // .getCount('hogehoge')
44 // .then((count) => setState(() => _documentCount = count));
45 }
46
47 Future<void> initCount() async {
48 final int count = await widget.repos.getCount('hogehoge');
49 setState(() => _documentCount = count);
50 }
51
52 @override
53 Widget build(BuildContext context) {
54 return Scaffold(
55 appBar: AppBar(
56 title: Text('Future Demo Project'),
57 ),
58 body: Center(
59 child: Text(
60 '$_documentCount',
61 style: Theme.of(context).textTheme.headline4,
62 ),
63 ));
64 }
65}
docCount
は非同期に実行されるため、時間経過によって変化する"状態"であるため、これを表示するWidget
はStateless
ではありません。
状態を管理してくれるProvider
を扱えるモジュールをつかうか、上記のようにStatefulWidget
を使う必要があります。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/12/25 02:50