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

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

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

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

Dart

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

Q&A

解決済

1回答

673閲覧

Dartでのmap?の記載方法

copp

総合スコア11

Flutter

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

Dart

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

1グッド

0クリップ

投稿2020/02/19 09:55

実現したいこと

Dartでの記載方法が分からないので御教唆ください。

ここに質問の内容を詳しく書いてください。
現在、Flutter(dart)の勉強をしているのですが、
ソースコード body -> ListViewで
1.基本状態 を 2.省略状態 のように記載できると思うのですが
3.基本状態 を 2.のようにリスト部分を追加するだけで修正が可能にに
(例)PHP(CakePHP)で●●なシステムを作っています。
■■な機能を実装中に以下のエラーメッセージが発生しました。

発生している問題・エラーメッセージ

エラーメッセージ

該当のソースコード

ソースコード import 'package:flutter/material.dart'; void main() => runApp(MyApp()); class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( title: 'Generated App', home: MyHomePage(), ); } } class MyHomePage extends StatefulWidget { MyHomePage({Key key}) : super(key: key); @override _MyHomePageState createState() => _MyHomePageState(); } class _MyHomePageState extends State<MyHomePage> { var _number1 = {'one', 'two', 'three'}; var _number2 = {'111': 'one', '222': 'two', '333': 'three'}; @override void initState() { super.initState(); } @override Widget build(BuildContext context) { return new Scaffold( appBar: new AppBar( title: new Text('App Name'), ), body: Column( children: <Widget>[ ListView( shrinkWrap: true, // 1. 基本状態 /* children: <Widget>[ Text('one'), Text('two'), Text('three'), ], */ // 2. 省略状態 (↑で_number1 = {'one', 'two', 'three'};を定義している) /* children: _number1.map((String numString) { return Text(numString); }).toList(), */ // 3. 基本状態 children: <Widget>[ Row( children: <Widget>[ Text('0'), // indexから取得予定 Text('111'), // {'111': 'one', '222': 'two', '333': 'three'}から取得予定 Text('one'), // {'111': 'one', '222': 'two', '333': 'three'}から取得予定 ], ), Row( children: <Widget>[ Text('1'), Text('222'), Text('two'), ], ), Row( children: <Widget>[ Text('2'), Text('333'), Text('three'), ], ), // 4. 省略状態 (↑で_number2 = {'111': 'one', '222': 'two', '333': 'three'};を定義している) ], ), ], ), ); } }

補足情報(FW/ツールのバージョンなど)

dart 2.7.0

popobot👍を押しています

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

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

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

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

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

popobot

2020/02/19 11:21 編集

質問はちゃんと書いましょう。 「(例)PHP(CakePHP)で●●なシステムを作っています。」などの関係ない内容は消してください。
copp

2020/02/19 11:50

大変申し訳ございません。 きちんと記載したのですが1度目の投稿ボタンでは処理が上手くいかず、投稿ボタンを2回押したのが原因だと思われます。 ただ2度目の投稿ボタンを押す際にさっとしか確認しなかったのが一番の問題なので、今後は注意したいと思います。 中途半端になっている質問にも答えて頂きありがとうございました。
guest

回答1

0

ベストアンサー

_number2.entries.map()を使って、MapEntryListに対してmap()すれば可能です。

以下は、keyvalueのみを表示した例です(indexなし)

ListView( shrinkWrap: true, children: _number2.entries.map((MapEntry entry) { return Row( children: <Widget>[ Text(entry.key), Text(entry.value), ], ); }).toList(), ),

そもそも元々のデータはMapであってListではないのでindexがありません。

var _number2 = {'111': 'one', '222': 'two', '333': 'three'};

もしどうしてもindexも表示したいなら、一旦、asMap()で以下のようなデータに変換した上で、処理すれば可能だと思います。
{0: {'111': 'one'}, 1: {'222': 'two'}, 2: {'333': 'three'}};

実際のコードです

ListView( shrinkWrap: true, children: _number2.entries.toList().asMap().entries.map((MapEntry entry) { return Row( children: <Widget>[ Text(entry.key.toString()), Text(entry.value.key), Text(entry.value.value), ], ); }).toList(), ),

一応、検証に使った動くコードも貼っておきます

import 'package:flutter/material.dart'; void main() => runApp(MyApp()); class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( title: 'Generated App', home: MyHomePage(), ); } } class MyHomePage extends StatefulWidget { MyHomePage({Key key}) : super(key: key); @override _MyHomePageState createState() => _MyHomePageState(); } class _MyHomePageState extends State<MyHomePage> { var _number2 = {'111': 'one', '222': 'two', '333': 'three'}; @override void initState() { super.initState(); } @override Widget build(BuildContext context) { return new Scaffold( appBar: new AppBar( title: new Text('App Name'), ), body: Column( children: <Widget>[ ListView( shrinkWrap: true, children: _number2.entries.map((MapEntry entry) { return Row( mainAxisAlignment: MainAxisAlignment.spaceAround, children: <Widget>[ Text(entry.key), Text(entry.value), ], ); }).toList(), ), ListView( shrinkWrap: true, children: _number2.entries.toList().asMap().entries.map((MapEntry entry) { return Row( mainAxisAlignment: MainAxisAlignment.spaceAround, children: <Widget>[ Text(entry.key.toString()), Text(entry.value.key), Text(entry.value.value), ], ); }).toList(), ), ], ), ); } }

投稿2020/02/19 11:01

編集2020/02/19 11:03
popobot

総合スコア6586

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

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

copp

2020/02/19 11:40

詳しいご返答ありがとうございます。 entries、asMapやMapEntryなど知らない事が沢山あり、すごく勉強になります。 本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問