質問編集履歴

1

ファイルの全体を追加しました

2020/05/13 12:41

投稿

fathy
fathy

スコア254

test CHANGED
File without changes
test CHANGED
@@ -6,53 +6,495 @@
6
6
 
7
7
 
8
8
 
9
+ ##困っていること
10
+
11
+ リビルドはされているのですが表示が変わりません。
12
+
13
+
14
+
15
+ 初期状態は全て①の箇所の画像はAssetの画像が表示されています。
16
+
17
+ それを編集してImage.memoryの別の画像
18
+
19
+ コンソールでログを見るとの箇所で確かに②の箇所で
20
+
21
+
22
+
23
+ __[log] Image(image: MemoryImage(_Uint8ArrayView#25b1e, scale: 1.0), frameBuilder: null, loadingBuilder: null, alignment: center, this.excludeFromSemantics: false, filterQuality: low)__
24
+
25
+
26
+
27
+ の表示があります。
28
+
29
+
30
+
31
+ なぜかAndroidの画面での表示が変わりません。
32
+
33
+
34
+
35
+ Flutter Inspectorでは全て
36
+
37
+ __image: AssetImage(bundle: null, name: "images/boxImage.jpg")__
38
+
39
+ と表示されています。
40
+
41
+
42
+
43
+ ##調べたこと
44
+
45
+ [Flutter Image Widget won't update on change state](https://stackoverflow.com/questions/58794144/flutter-image-widget-wont-update-on-change-state)
46
+
47
+
48
+
49
+ このような記事を見つけたのですが,Image.fileの話で関係ないのかなと思いました。
50
+
51
+ ##開発環境
52
+
53
+ Android Studio 3.6.3
54
+
55
+ Flutter 1.14.6
56
+
57
+ Dart 2.8.0
58
+
59
+
60
+
61
+ 現在Flutterで開発をはじめて2週間ほどです。
62
+
63
+ よろしくお願いいたします。
64
+
65
+
66
+
67
+
68
+
69
+ ##追記
70
+
71
+ 見にくいかと思いますがファイル全体です。
72
+
73
+ // function スコアボックス
74
+
75
+ List<Widget> _scoreCellList(BuildContext context, int inning) {
76
+
77
+ の箇所が該当箇所です。
78
+
79
+ 文字数制限のため元々の質問をコードを削除しました。
80
+
81
+ よろしくお願いいたします。
82
+
9
83
  ```Dart
10
84
 
85
+
86
+
87
+
88
+
89
+ class ScorebookPage extends StatelessWidget {
90
+
91
+ ScorebookPage({this.battingTurn});
92
+
93
+
94
+
95
+ static const _cellHeight = 50.0;
96
+
97
+ static const _cellWidth = 70.0;
98
+
99
+
100
+
101
+ BattingTurn battingTurn;
102
+
103
+
104
+
105
+ bool get _isBattingTurnFirst => battingTurn == BattingTurn.first;
106
+
107
+
108
+
109
+ @override
110
+
111
+ Widget build(BuildContext context) {
112
+
113
+ //画面サイズ取得
114
+
115
+ final size = MediaQuery.of(context).size;
116
+
117
+
118
+
119
+ ImageCache().clear();
120
+
121
+ return Scaffold(
122
+
123
+ //https://stackoverflow.com/questions/51972371/bottom-overflow-by-30px
124
+
125
+ //これないとbottom overflow する
126
+
127
+ resizeToAvoidBottomPadding: false,
128
+
129
+
130
+
131
+ body: SafeArea(
132
+
133
+ child: Container(
134
+
135
+ width: size.width,
136
+
137
+ height: size.height,
138
+
139
+ child: Column(
140
+
141
+ verticalDirection: VerticalDirection.down,
142
+
143
+ children: <Widget>[
144
+
145
+ Expanded(
146
+
147
+ child: BidirectionalScrollViewPlugin(
148
+
149
+ child: _buildWidgets(context)))
150
+
151
+ ],
152
+
153
+ ),
154
+
155
+ ),
156
+
157
+ ),
158
+
159
+ floatingActionButton: Column(
160
+
161
+ verticalDirection: VerticalDirection.up,
162
+
163
+ mainAxisSize: MainAxisSize.min,
164
+
165
+ children: <Widget>[
166
+
167
+ FloatingActionButton(
168
+
169
+ heroTag: 'flip',
170
+
171
+ onPressed: () {
172
+
173
+ if (_isBattingTurnFirst) {
174
+
175
+ Navigator.of(context).pushNamed('/scorebookSecond');
176
+
177
+ } else {
178
+
179
+ Navigator.of(context).pop();
180
+
181
+ }
182
+
183
+ },
184
+
185
+ tooltip: _isBattingTurnFirst ? '後攻のシートへ' : '先攻のシートへ',
186
+
187
+ child: Icon(Icons.flip_to_back),
188
+
189
+ ),
190
+
191
+ Container(
192
+
193
+ // 余白のためContainerでラップ
194
+
195
+ margin: const EdgeInsets.only(bottom: 16),
196
+
197
+ child: FloatingActionButton(
198
+
199
+ heroTag: 'menu',
200
+
201
+ backgroundColor: originalGreen,
202
+
203
+ onPressed: () {
204
+
205
+ print('pressed');
206
+
207
+ },
208
+
209
+ child: Icon(
210
+
211
+ Icons.menu,
212
+
213
+ size: 32,
214
+
215
+ ),
216
+
217
+ ),
218
+
219
+ ),
220
+
221
+ ],
222
+
223
+ ) // This trailing comma makes auto-formatting nicer for build methods.
224
+
225
+ );
226
+
227
+ }
228
+
229
+
230
+
231
+ Widget _buildWidgets(BuildContext context) {
232
+
233
+ return Container(
234
+
235
+ padding: const EdgeInsets.all(8),
236
+
237
+ height: _cellHeight * 13,
238
+
239
+ color: Colors.white,
240
+
241
+ child: Row(
242
+
243
+ children: [
244
+
245
+ Column(
246
+
247
+ children: _scoreCellList(context, 1).map((widget) {
248
+
249
+ return widget;
250
+
251
+ }).toList(),
252
+
253
+ mainAxisSize: MainAxisSize.min,
254
+
255
+ ),
256
+
257
+ Column(
258
+
259
+ children: _scoreCellList(context, 2).map((widget) {
260
+
261
+ return widget;
262
+
263
+ }).toList(),
264
+
265
+ mainAxisSize: MainAxisSize.min,
266
+
267
+ ),
268
+
269
+ Column(
270
+
271
+ children: _scoreCellList(context, 3).map((widget) {
272
+
273
+ return widget;
274
+
275
+ }).toList(),
276
+
277
+ mainAxisSize: MainAxisSize.min,
278
+
279
+ ),
280
+
281
+ Column(
282
+
283
+ children: _scoreCellList(context, 4).map((widget) {
284
+
285
+ return widget;
286
+
287
+ }).toList(),
288
+
289
+ ),
290
+
291
+ Column(
292
+
293
+ children: _scoreCellList(context, 5).map((widget) {
294
+
295
+ return widget;
296
+
297
+ }).toList(),
298
+
299
+ ),
300
+
301
+ Column(
302
+
303
+ children: _scoreCellList(context, 6).map((widget) {
304
+
305
+ return widget;
306
+
307
+ }).toList(),
308
+
309
+ ),
310
+
311
+ Column(
312
+
313
+ children: _scoreCellList(context, 7).map((widget) {
314
+
315
+ return widget;
316
+
317
+ }).toList(),
318
+
319
+ ),
320
+
321
+ Column(
322
+
323
+ children: _scoreCellList(context, 8).map((widget) {
324
+
325
+ return widget;
326
+
327
+ }).toList(),
328
+
329
+ ),
330
+
331
+ Column(
332
+
333
+ children: _scoreCellList(context, 9).map((widget) {
334
+
335
+ return widget;
336
+
337
+ }).toList(),
338
+
339
+ ),
340
+
341
+ Column(
342
+
343
+ children: _scoreCellList(context, 10).map((widget) {
344
+
345
+ return widget;
346
+
347
+ }).toList(),
348
+
349
+ ),
350
+
351
+ Column(
352
+
353
+ children: _scoreCellList(context, 11).map((widget) {
354
+
355
+ return widget;
356
+
357
+ }).toList(),
358
+
359
+ ),
360
+
361
+ Column(
362
+
363
+ children: _scoreCellList(context, 12).map((widget) {
364
+
365
+ return widget;
366
+
367
+ }).toList(),
368
+
369
+ ),
370
+
371
+ Column(
372
+
373
+ children: _scoreCellList(context, 13).map((widget) {
374
+
375
+ return widget;
376
+
377
+ }).toList(),
378
+
379
+ ),
380
+
381
+ ],
382
+
383
+ crossAxisAlignment: CrossAxisAlignment.stretch,
384
+
385
+ ),
386
+
387
+ );
388
+
389
+ }
390
+
391
+
392
+
11
- // function ボックスリスト
393
+ // function スコアボックス
12
-
394
+
13
- List<Widget> _boxList(BuildContext context, int inning) {
395
+ List<Widget> _scoreCellList(BuildContext context, int inning) {
14
396
 
15
397
  List<Widget> list = new List();
16
398
 
17
399
 
18
400
 
401
+ ImageCache().clear();
402
+
403
+ // イニング行
404
+
405
+ list.add(Container(
406
+
407
+ height: _cellHeight / 2,
408
+
409
+ width: _cellWidth,
410
+
411
+ child: Center(
412
+
413
+ child: Text(inning.toString()),
414
+
415
+ ),
416
+
417
+ decoration: BoxDecoration(
418
+
419
+ border: Border(
420
+
421
+ top: const BorderSide(color: originalGreen, width: 0.5),
422
+
423
+ right: BorderSide(
424
+
425
+ color: originalGreen, width: inning == 13 ? 0.5 : 0),
426
+
427
+ left: const BorderSide(color: originalGreen, width: 0.5))),
428
+
429
+ ));
430
+
431
+
432
+
19
- final datasModel = _isFirst
433
+ final scoreBoxDatasModel = _isBattingTurnFirst
20
-
434
+
21
- ? Provider.of<FirstBoxDatasModel>(context)
435
+ ? Provider.of<FirstScoreBoxDatasModel>(context)
22
-
436
+
23
- : Provider.of<SecondBoxDatasModel>(context);
437
+ : Provider.of<SecondScoreBoxDatasModel>(context);
24
-
438
+
25
- log('rebuild');
439
+ log('rebuild score cell');
440
+
26
-
441
+ // スコア行 10行
442
+
27
- for (var i = 0; i < datasModel.datas.length; i++) {
443
+ for (var order = 1; order <= 10; order++) {
444
+
28
-
445
+ // TODO(kazuki): ProviderのSelectorでリビルドを減らす
446
+
447
+ // 監視するところを全部にしないで切り分ける?
448
+
449
+ // イニングごととかでリビルドが走るようにとか
450
+
451
+
452
+
29
- final data = datasModel.datas[i];
453
+ final scoreBoxData = scoreBoxDatasModel.scoreBoxData(inning, order);
30
-
31
-
32
-
454
+
455
+
456
+
33
- log(data.id);
457
+ if (scoreBoxData.changed != null) {
458
+
34
-
459
+ // log(scoreBoxData.changed);
460
+
461
+ // log(scoreBoxData.inning.toString());
462
+
463
+ // log(scoreBoxData.order.toString());
464
+
35
- log(data.imageBytes.toString());
465
+ // log(scoreBoxData.imageBytes.toString());
466
+
36
-
467
+ }
468
+
37
-
469
+ // log(_isBattingTurnFirst.toString());
38
-
470
+
39
- final image = data.imageBytes != null // ①
471
+ final image = scoreBoxData.imageBytes != null
40
472
 
41
473
  ? Image.memory(
42
474
 
43
- data.imageBytes,
475
+ scoreBoxData.imageBytes,
476
+
477
+ key: Key(scoreBoxData.id),
44
478
 
45
479
  )
46
480
 
481
+ : Image.asset(
482
+
47
- : Image.asset('images/boxImage.jpg');
483
+ 'images/boxImage.jpg',
484
+
48
-
485
+ key: Key(scoreBoxData.id),
486
+
487
+ );
488
+
489
+ // final image = Image.memory(scoreBoxData.imageBytes, key: UniqueKey(),)
490
+
49
- log(image.toString()); // ②
491
+ // log(image.toString());
50
492
 
51
493
  list.add(
52
494
 
53
495
  Hero(
54
496
 
55
- tag: data.id,
497
+ tag: scoreBoxData.id,
56
498
 
57
499
  child: GestureDetector(
58
500
 
@@ -62,15 +504,17 @@
62
504
 
63
505
  color: Colors.white,
64
506
 
65
- height: _boxHeight,
507
+ height: _cellHeight,
66
-
508
+
67
- width: _boxWidth,
509
+ width: _cellWidth,
68
510
 
69
511
  child: Container(
70
512
 
71
513
  child: Center(
72
514
 
73
- child: image,
515
+ child: Text(scoreBoxData.changed,
516
+
517
+ style: TextStyle(color: Colors.black87)),
74
518
 
75
519
  ),
76
520
 
@@ -78,7 +522,17 @@
78
522
 
79
523
  border: Border(
80
524
 
81
- top: const BorderSide(color: myColor, width: 0.5),
525
+ top: const BorderSide(color: originalGreen, width: 0.5),
526
+
527
+ bottom: BorderSide(
528
+
529
+ color: originalGreen, width: order == 10 ? 0.5 : 0),
530
+
531
+ right: BorderSide(
532
+
533
+ color: originalGreen, width: inning == 13 ? 0.5 : 0),
534
+
535
+ left: const BorderSide(color: originalGreen, width: 0.5),
82
536
 
83
537
  ),
84
538
 
@@ -94,13 +548,15 @@
94
548
 
95
549
  context,
96
550
 
97
- NextPageRoute(
551
+ ScorebookToHandWriteRoute(
98
-
552
+
99
- widget: NextPage(
553
+ widget: HandWritePageView(
554
+
100
-
555
+ initialPageOrder: scoreBoxData.order,
556
+
101
- data: data,
557
+ inning: scoreBoxData.inning,
102
-
558
+
103
- ),
559
+ scoreBoxDatasModel: scoreBoxDatasModel),
104
560
 
105
561
  ),
106
562
 
@@ -114,7 +570,27 @@
114
570
 
115
571
  );
116
572
 
117
- )
573
+ }
574
+
575
+
576
+
577
+ list.add(Container(
578
+
579
+ width: _cellWidth,
580
+
581
+ height: _cellHeight / 2,
582
+
583
+ decoration: const BoxDecoration(
584
+
585
+ border: Border(
586
+
587
+ top: BorderSide(color: originalGreen, width: 0.5),
588
+
589
+ bottom: BorderSide(color: originalGreen, width: 0.5),
590
+
591
+ left: BorderSide(color: originalGreen, width: 0.5),
592
+
593
+ ))));
118
594
 
119
595
 
120
596
 
@@ -122,62 +598,8 @@
122
598
 
123
599
  }
124
600
 
601
+
602
+
603
+ }
604
+
125
605
  ```
126
-
127
-
128
-
129
- ##困っていること
130
-
131
- リビルドはされているのですが表示が変わりません。
132
-
133
-
134
-
135
- 初期状態は全て①の箇所の画像はAssetの画像が表示されています。
136
-
137
- それを編集してImage.memoryの別の画像
138
-
139
- コンソールでログを見るとの箇所で確かに②の箇所で
140
-
141
-
142
-
143
- __[log] Image(image: MemoryImage(_Uint8ArrayView#25b1e, scale: 1.0), frameBuilder: null, loadingBuilder: null, alignment: center, this.excludeFromSemantics: false, filterQuality: low)__
144
-
145
-
146
-
147
- の表示があります。
148
-
149
-
150
-
151
- なぜかAndroidの画面での表示が変わりません。
152
-
153
-
154
-
155
- Flutter Inspectorでは全て
156
-
157
- __image: AssetImage(bundle: null, name: "images/boxImage.jpg")__
158
-
159
- と表示されています。
160
-
161
-
162
-
163
- ##調べたこと
164
-
165
- [Flutter Image Widget won't update on change state](https://stackoverflow.com/questions/58794144/flutter-image-widget-wont-update-on-change-state)
166
-
167
-
168
-
169
- このような記事を見つけたのですが,Image.fileの話で関係ないのかなと思いました。
170
-
171
- ##開発環境
172
-
173
- Android Studio 3.6.3
174
-
175
- Flutter 1.14.6
176
-
177
- Dart 2.8.0
178
-
179
-
180
-
181
- 現在Flutterで開発をはじめて2週間ほどです。
182
-
183
- よろしくお願いいたします。