質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Flutter

Flutterは、iOSとAndroidのアプリを同じコードで開発するためのフレームワークです。オープンソースで開発言語はDart。双方のプラットフォームにおける高度な実行パフォーマンスと開発効率を提供することを目的としています。

Dart

Dartは、Googleによって開発されたJavaScriptの代替となることを目的に作られた、ウェブ向けのプログラミング言語である。

Q&A

解決済

1回答

240閲覧

DartPadでContainerのプロパティcolorがbgに変更されてエラーとなる

mako_0221

総合スコア87

Flutter

Flutterは、iOSとAndroidのアプリを同じコードで開発するためのフレームワークです。オープンソースで開発言語はDart。双方のプラットフォームにおける高度な実行パフォーマンスと開発効率を提供することを目的としています。

Dart

Dartは、Googleによって開発されたJavaScriptの代替となることを目的に作られた、ウェブ向けのプログラミング言語である。

0グッド

0クリップ

投稿2022/05/23 06:58

過去の質問の文脈に関連する質問であるのですが、複数の質問については投稿を分けてくださいという指摘を受けたことがあるため重ねてで申し訳ございませんが、ご質問させてください。

//here1の結果について、DartPadにおいて
[Container(color: Color(0xfff44336)), Container(color: Color(0xff2196f3))]
という結果を期待していて、下記のコードを作成しているのですが、実際には、
[Container(bg: Color(0xfff44336)), Container(bg: Color(0xff2196f3))]
という ドキュメントにもないプロパティに勝手に変更されていることがわかりました。

Dart

1import 'package:flutter/material.dart'; 2import 'dart:math'; 3 4void main() => runApp(TopPage()); 5 6class TopPage extends StatelessWidget { 7 final List<Widget>? _tiles =[ 8 Container( 9 color:UniqueColorGenerator.getColor(), 10 child: Padding(padding: EdgeInsets.all(100.0)) 11 ), 12 Container( 13 color:UniqueColorGenerator.getColor(), 14 child: Padding(padding: EdgeInsets.all(100.0)) 15 ), 16 ]; 17 18 19 20 Widget build(BuildContext context) { 21 print( _tiles); //here1 22 return MaterialApp( 23 home:Scaffold( 24 appBar:AppBar( 25 title:Text("TESTING"), 26 ), 27 body:Row( 28 children: <Widget>[Container(color: Color(0xff2196f3),width: 48.0,height: 48.0,), 29 Container(color: Color(0xfff44336),width: 48.0,height: 48.0,)], //here2 30 ), 31 ) 32 ); 33 } 34} 35 36class UniqueColorGenerator { 37 static List _colorOptions = [ 38 const Color(0xff2196f3), 39 const Color(0xfff44336), 40 ]; 41 static Random _random = Random(); 42 static Color getColor() { 43 final selectedColor = _colorOptions.removeAt(_random.nextInt(_colorOptions.length)); 44 print(selectedColor); 45 return selectedColor; 46 } 47}

その結果、//here2について以下のようにしたいのですが、

Dart

1 body:Row( 2 children: _tiles, 3 ),

下記のようにエラーが出て型が合わないと言われます。
The argument type 'List<Widget>?' can't be assigned to the parameter type 'List<Widget>'. ),

もちろん、上記のコードのように、

Dart

1 body:Row( 2 children: <Widget>[Container(color: Color(0xff2196f3),width: 48.0,height: 48.0,), 3 Container(color: Color(0xfff44336),width: 48.0,height: 48.0,)], //here2 4 ),

とすれば、何も問題なく実行されるのですが、何故ってに公式にはないbdプロパティに変わってしまい、動作できないのでしょうか?ご存知の方が入ればご教示願えれば幸いです。
よろしくお願い申し上げます。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

まずprintの結果について。

Container.toStringの結果は設定内容を見るデバッグメッセージを出力するものなので、コンストラクタで設定する名前やプロパティ名と異なるのがあるのは、ある意味しょうがないかも。開発者が意味をくみ取れればいいよねって感じじゃないかな。
あとcolorは背景色を設定するプロパティだから、短めの文字列でbg(backgroundの略)として出力したのだと思う。

もしくは開発初期は背景色のプロパティの設定はbgでそれに合わせてたのだけど、Flutterのバージョンアップで背景色のプロパティをcolorに変更したけど、toString側はそれに合わせて変更しなかったとか。(これは変更履歴を追っていってないので想像ですが)

次に //here2の部分。

この部分、まさしくエラーメッセージの通り型があってないということになります。
宣言はnull許容な宣言で、使用する側はnullを許容しない形。

宣言側の?を取り除くか、使用する側に!を付けるかすればエラーは出ないはずです。

投稿2022/05/23 09:09

ta.fu

総合スコア1667

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mako_0221

2022/05/23 14:00

ありがとうございます、エラーメッセージを適切に読み解けっていなかったようです。 てっきりbgにプロパティが変わってしまったことで発生したものと思い込んでしまいました。 nullを許容する場合の変数、定数の利用!についてエラーメッセージと学ぶことができました。 私は過去の資料やコードからトレースして学んでいるためNull安全が採用される前のDartのコードに慣れてしまっている思い込みも大きいかと思います。今後、この点は十分注意して勉強してまいります。 いつも、お時間を割いていただき、ご覧いただくだけではなくコメントをお寄せいただき深謝申し上げます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問