質問編集履歴

6

プログラム4を追加。

2022/04/14 05:49

投稿

MaeharaKenji
MaeharaKenji

スコア86

test CHANGED
File without changes
test CHANGED
@@ -280,3 +280,46 @@
280
280
  ```
281
281
 
282
282
 
283
+
284
+ main.dart(その4)
285
+ ```dart
286
+ //投稿画面用Widget
287
+ class AddPostPage extends StatefulWidget {
288
+ // 引数からユーザー情報を受け取る
289
+ AddPostPage(this.user);
290
+ // ユーザー情報
291
+ final User user;
292
+
293
+ @override
294
+ _AddPostPageState createState() => _AddPostPageState();
295
+ }
296
+
297
+ class _AddPostPageState extends State<AddPostPage> {
298
+ //入力した投稿メッセージ
299
+ String messageText = '';
300
+
301
+ @override
302
+ Widget build(BuildContext context) {
303
+ return Scaffold(
304
+ appBar: AppBar(
305
+ title: Text('チャット投稿'),
306
+ ),
307
+
308
+ ----------------(省略) ------------------------------
309
+
310
+ });
311
+ // 1つ前の画面に戻る
312
+ Navigator.of(context).pop();
313
+ },
314
+ ),
315
+ )
316
+ ],
317
+ ),
318
+ ),
319
+ ),
320
+ );
321
+ }
322
+ }
323
+
324
+
325
+ ```

5

プログラム3を追加

2022/04/14 05:46

投稿

MaeharaKenji
MaeharaKenji

スコア86

test CHANGED
File without changes
test CHANGED
@@ -176,4 +176,107 @@
176
176
  ```
177
177
 
178
178
 
179
-
179
+ main.dart(その3)
180
+ ```dart
181
+ class ChatPage extends StatelessWidget {
182
+ //引数からユーザー情報を受け入れるようにする
183
+ ChatPage(this.user);
184
+ //ユーザー情報
185
+ final User user;
186
+
187
+ @override
188
+ Widget build(BuildContext context) {
189
+ return Scaffold(
190
+ appBar: AppBar(
191
+ title: Text('チャット'),
192
+ actions: <Widget>[
193
+ IconButton(
194
+ icon: Icon(Icons.logout),
195
+ onPressed: () async {
196
+ // ログアウト処理
197
+ // 内部で保持しているログイン情報等が初期化される
198
+ // (現時点ではログアウト時はこの処理を呼び出せばOKと、思うぐらいで大丈夫です)
199
+ await FirebaseAuth.instance.signOut();
200
+ //ログイン画面に遷移+チャット画面を破棄
201
+ await Navigator.of(context).pushReplacement(
202
+ MaterialPageRoute(builder: (context) {
203
+ return LoginPage();
204
+ }),
205
+ );
206
+ },
207
+ )
208
+ ]
209
+ ),
210
+ body: Column(
211
+ children: [
212
+ Container(
213
+ padding: EdgeInsets.all(8),
214
+ child: Text('ログイン情報;${user.email}'),
215
+ ),
216
+ Expanded(
217
+ // FutureBuilder
218
+ //非同期処理の結果を元にWidgetを作れる
219
+ child: FutureBuilder<QuerySnapshot>(
220
+ // 投稿メッセージ一覧を取得(非同期処理)
221
+ // 投稿日時でソート
222
+ future: FirebaseFirestore.instance
223
+ .collection('posts')
224
+ .orderBy('date')
225
+ .get(),
226
+ builder: (context, snapshot) {
227
+ // データが取得できた場合
228
+ if (snapshot.hasData) {
229
+ final List<DocumentSnapshot> documents = snapshot.data!.docs;
230
+ // 取得した投稿メッセージ一覧を元にリスト表示
231
+ return ListView(
232
+ children: documents.map((document) {
233
+ return Card(
234
+ child: ListTile(
235
+ title: Text(document['text']),
236
+ subtitle: Text(document['email']),
237
+ //自分の投稿メッセージの場合は削除ボタンを表示
238
+ trailing: document['email'] == user.email
239
+ ? IconButton(
240
+ icon: Icon(Icons.delete),
241
+ onPressed: () async {
242
+ // 投稿メッセージのドキュメントを削除
243
+ await FirebaseFirestore.instance
244
+ .collection('posts')
245
+ .doc(document.id)
246
+ .delete();
247
+ },
248
+ )
249
+ : null,
250
+ ),
251
+ );
252
+ }).toList(),
253
+ );
254
+ }
255
+ //データが読み込み中の場合
256
+ return Center(
257
+ child: Text('読込中...'),
258
+ );
259
+ },
260
+ ),
261
+ ),
262
+ ],
263
+ ),
264
+ floatingActionButton: FloatingActionButton(
265
+ child: Icon(Icons.add),
266
+ onPressed: () async {
267
+ //投稿画面に遷移
268
+ await Navigator.of(context).push(
269
+ MaterialPageRoute(builder: (context) {
270
+ // 引数からユーザー情報を渡す
271
+ return AddPostPage(user);
272
+ }),
273
+ );
274
+ },
275
+ ),
276
+ );
277
+ }
278
+ }
279
+
280
+ ```
281
+
282
+

4

一部修正

2022/04/14 05:44

投稿

MaeharaKenji
MaeharaKenji

スコア86

test CHANGED
File without changes
test CHANGED
@@ -7,8 +7,11 @@
7
7
  ```ここに言語を入力
8
8
  ログインに失敗しました: NoSuchMethodError: tried to call a non-function, such as null: 'dart.global.firebase.auth'
9
9
  ```
10
+ この症状の改善方法をご教示頂きますよう、お願いします。
10
11
 
12
+
13
+
11
- 打ち込んで出来上がったmain.dartのコード内容はこちらです。
14
+ なお、打ち込んで出来上がったmain.dartのコード内容はこちらです。
12
15
 
13
16
 
14
17
  main.dart(その1)
@@ -173,4 +176,4 @@
173
176
  ```
174
177
 
175
178
 
176
- この症状の改善方法をご教示頂きますよう、お願いします。
179
+

3

プログラムさらに追加

2022/04/14 05:42

投稿

MaeharaKenji
MaeharaKenji

スコア86

test CHANGED
File without changes
test CHANGED
@@ -10,6 +10,8 @@
10
10
 
11
11
  打ち込んで出来上がったmain.dartのコード内容はこちらです。
12
12
 
13
+
14
+ main.dart(その1)
13
15
  ```dart
14
16
  //import 'dart:html';
15
17
 
@@ -47,4 +49,128 @@
47
49
 
48
50
  ```
49
51
 
52
+
53
+ main.dart(その2)
54
+ ```dart
55
+ //ログイン画面用Widget
56
+ class LoginPage extends StatefulWidget {
57
+ @override
58
+ _LoginPageState createState() => _LoginPageState();
59
+ }
60
+
61
+ class _LoginPageState extends State<LoginPage> {
62
+
63
+ //メッセージ表示用
64
+ String infoText = '';
65
+
66
+ //入力したメールアドレス・パスワード
67
+ String email = '';
68
+ String password = '';
69
+
70
+
71
+ @override
72
+ Widget build(BuildContext context) {
73
+ return Scaffold(
74
+ body: Center(
75
+ child:Container(
76
+ padding: EdgeInsets.all(24),
77
+ child: Column(
78
+ mainAxisAlignment: MainAxisAlignment.center,
79
+ children: <Widget>[
80
+ // メールアドレス入力
81
+ TextFormField(
82
+ decoration: InputDecoration(labelText: 'メールアドレス'),
83
+ onChanged: (String value) {
84
+ setState(() {
85
+ email = value;
86
+ });
87
+ },
88
+ ),
89
+
90
+ //パスワード入力
91
+ TextFormField(
92
+ decoration: InputDecoration(labelText: 'パスワード'),
93
+ obscureText: true,
94
+ onChanged: (String value) {
95
+ setState(() {
96
+ password = value;
97
+ });
98
+ },
99
+ ),
100
+ Container(
101
+ padding: EdgeInsets.all(8),
102
+ //メッセージ表示
103
+ child:Text(infoText)
104
+ ),
105
+ Container(
106
+ width: double.infinity,
107
+ //ユーザー登録ボタン
108
+ child: ElevatedButton(
109
+ child: Text('ユーザー登録'),
110
+ onPressed: () async {
111
+ try {
112
+ // メール/パスワードでユーザー登録
113
+ final FirebaseAuth auth = FirebaseAuth.instance;
114
+ final result = await auth.createUserWithEmailAndPassword(
115
+ email: email,
116
+ password: password,
117
+ );
118
+ //ユーザー登録に成功した場合
119
+ //チャット画面に遷移+ログイン画面を破棄
120
+ await Navigator.of(context).pushReplacement(
121
+ MaterialPageRoute(builder: (context) {
122
+ return ChatPage(result.user!);
123
+ }),
124
+ );
125
+ } catch (e) {
126
+ // ユーザー登録に失敗した場合
127
+ setState(() {
128
+ infoText = "登録に失敗しました:${e.toString()}";
129
+ });
130
+ }
131
+ },
132
+ ),
133
+ ),
134
+ const SizedBox(height: 8),
135
+ Container(
136
+ width: double.infinity,
137
+ //ログイン登録ボタン
138
+ child: OutlinedButton(
139
+ child: Text('ログイン'),
140
+ onPressed: () async {
141
+ try {
142
+ //メール/パスワードでログイン
143
+ final FirebaseAuth auth = FirebaseAuth.instance;
144
+ final result = await auth.signInWithEmailAndPassword(
145
+ email: email,
146
+ password: password,
147
+ );
148
+ // ログインに成功した場合
149
+ // チャット画面に遷移+ログイン画面を破棄
150
+ await Navigator.of(context).pushReplacement(
151
+ MaterialPageRoute(builder: (context) {
152
+ return ChatPage(result.user!);
153
+ }),
154
+ );
155
+ } catch (e) {
156
+ // ログインに失敗した場合
157
+ setState(() {
158
+ infoText = "ログインに失敗しました:${e.toString()}";
159
+ });
160
+ }
161
+ },
162
+ ),
163
+ ),
164
+ ]
165
+ ),
166
+ ),
167
+ ),
168
+ );
169
+ }
170
+ }
171
+
172
+
173
+ ```
174
+
175
+
50
176
  この症状の改善方法をご教示頂きますよう、お願いします。

2

プログラムを追加

2022/04/14 05:40

投稿

MaeharaKenji
MaeharaKenji

スコア86

test CHANGED
File without changes
test CHANGED
@@ -8,4 +8,43 @@
8
8
  ログインに失敗しました: NoSuchMethodError: tried to call a non-function, such as null: 'dart.global.firebase.auth'
9
9
  ```
10
10
 
11
+ 打ち込んで出来上がったmain.dartのコード内容はこちらです。
12
+
13
+ ```dart
14
+ //import 'dart:html';
15
+
16
+ //import 'dart:html';
17
+ //import 'dart:io';
18
+
19
+ import 'package:cloud_firestore/cloud_firestore.dart';
20
+ import 'package:firebase_auth/firebase_auth.dart';
21
+ import 'package:firebase_core/firebase_core.dart';
22
+ import 'package:flutter/material.dart';
23
+
24
+ void main() async {
25
+ //初期化処理を追加
26
+ WidgetsFlutterBinding.ensureInitialized;
27
+ await Firebase.initializeApp();
28
+
29
+ runApp(ChatApp());
30
+ }
31
+
32
+ class ChatApp extends StatelessWidget {
33
+ @override
34
+ Widget build(BuildContext context) {
35
+ return MaterialApp(
36
+ // アプリ名
37
+ title: 'ChatApp',
38
+ theme: ThemeData(
39
+ //テーマカラー
40
+ primarySwatch: Colors.blue,
41
+ ),
42
+ //ログイン画面を表示
43
+ home: LoginPage(),
44
+ );
45
+ }
46
+ }
47
+
48
+ ```
49
+
11
50
  この症状の改善方法をご教示頂きますよう、お願いします。

1

URLリンクを追加

2022/04/14 05:35

投稿

MaeharaKenji
MaeharaKenji

スコア86

test CHANGED
File without changes
test CHANGED
@@ -1,6 +1,6 @@
1
1
  現在Flutterでスマホアプリ開発環境の勉強中です。
2
2
 
3
- クラウドサービスで必要なID登録・ログイン機能などをfirebaseのAuthentication機能というのを利用することで自分のプログラムに取り込めるとのことで、WEB上に掲載されていたサンプルプログラムを打ち込んでました。
3
+ クラウドサービスで必要なID登録・ログイン機能などをfirebaseのAuthentication機能というのを利用することで自分のプログラムに取り込めるとのことで、[WEB上に掲載されていたサンプルプログラム](https://www.flutter-study.dev/firebase-app/about-firebase-app)を打ち込んでました。
4
4
 
5
5
  しかし、なぜか下記のエラーメッセージが出てログインに失敗します。
6
6