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

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

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

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

Dart

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

Q&A

解決済

1回答

5666閲覧

FlutterのDateTimeを変数で扱いたいけどエラーになる

Yariii

総合スコア61

Flutter

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

Dart

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

0グッド

1クリップ

投稿2020/09/03 02:21

Flutterでタブバーを作って、タブのタイトルの1つに「本日(0月0日)」みたいな感じで、現時点の日付を入れたいです。
しかし以下のコードで
static DateTime _now = DateTime.now();
としても、

The argument type 'DateTime' can't be assigned to the parameter type 'String'.

文字列の型には入れられないと言われてしまいます。

flutter

1class _HomeState extends State<Home> { 2 static DateTime _now = DateTime.now(); 3 final _tab = <Tab>[ 4 Tab(text: _now, icon: Icon(Icons.directions_car)), 5 Tab(text: 'Bicycle', icon: Icon(Icons.directions_bike)), 6 ]; 7 8 Widget build(BuildContext context) { 9 return DefaultTabController( 10 length: _tab.length, 11 child: Scaffold( 12 appBar: AppBar( 13 title: Text( 14 ' テストページ', 15 style: TextStyle(color: Theme.of(context).primaryColor), 16 ), 17 backgroundColor: Theme.of(context).accentColor, 18 bottom: TabBar( 19 tabs: _tab, 20 ), 21 ), 22 body: TabBarView(children: <Widget>[ 23 TabPage(title: _now, icon: Icons.directions_car), 24 TabPage(title: 'Bicycle', icon: Icons.directions_bike), 25 ]), 26 ), 27 ); 28 } 29} 30

ですので、文字列の型に変換すれば動くのかなと思い、Stringに変換できるコードを探して書いてみたのですが、上手くいきません。

pubspec.yamlにintlパッケージを加えて

dependencies: flutter: sdk: flutter flutter_localizations: sdk: flutter # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^0.1.3 intl: ^0.16.1

先ほどのコードの一部を以下に変えました。

flutter

1//importを加えました 2import 'package:intl/intl.dart'; 3 4class _HomeState extends State<Home> { 5 //ここから 6 DateFormat dateFormat = DateFormat("yyyy-MM-dd HH:mm:ss"); 7 String _now = dateFormat.format(DateTime.now()); 8//ここまで加えました 9 final _tab = <Tab>[ 10 Tab(text: _now, icon: Icon(Icons.directions_car)), 11 Tab(text: 'Bicycle', icon: Icon(Icons.directions_bike)), 12 ]; 13 14 Widget build(BuildContext context) { 15 return DefaultTabController( 16 length: _tab.length, 17 child: Scaffold( 18 appBar: AppBar( 19 title: Text( 20 ' コール一覧', 21 style: TextStyle(color: Theme.of(context).primaryColor), 22 ), 23 backgroundColor: Theme.of(context).accentColor, 24 bottom: TabBar( 25 tabs: _tab, 26 ), 27 ), 28 body: TabBarView(children: <Widget>[ 29 TabPage(title: _now, icon: Icons.directions_car), 30 TabPage(title: 'Bicycle', icon: Icons.directions_bike), 31 ]), 32 ), 33 ); 34 } 35} 36

しかし次はこのようなエラーが出ます。

The instance member 'dateFormat' can't be accessed in an initializer.

Try replacing the reference to the instance member with a different expression

The instance member '_now' can't be accessed in an initializer.

Try replacing the reference to the instance member with a different expression

どのように対処すれば、上手く行きますでしょうか?
よろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

エラーの原因は、TabtextプロパティにDateTime型を渡したからだと思います。
以下のようにtoString()で文字列に変換して渡してみてください。

dart

1Tab(text: _now.toString(), icon: Icon(Icons.directions_car)),

追記 (09/03/13:35)

○月○日の形式でという所を見落としてました。
この場合、以下のように書けます。(intlパッケージ無しで動きます)

dart

1Tab(text: "${_now.month}月${_now.day}日", icon: Icon(Icons.directions_car)),

intlパッケージを使う場合は以下のような感じになると思います。(あまり詳しく無いので最善ではないかもしれませんが)

dart

1import "package:intl/intl.dart"; 2import 'package:intl/date_symbol_data_local.dart'; 3 4 5class _HomeState extends State<HomePage> { 6 String getNow() { 7 Intl.defaultLocale = 'ja_JP'; 8 initializeDateFormatting("ja_JP"); 9 return DateFormat.MMMMd().format(DateTime.now()); 10 } 11 12 List<Tab> get _tab => [ 13 Tab(text: getNow(), icon: Icon(Icons.directions_car)), 14 Tab(text: 'Bicycle', icon: Icon(Icons.directions_bike)), 15 ]; 16 17 18 Widget build(BuildContext context) { 19 return ... 20 } 21}

投稿2020/09/03 02:52

編集2020/09/03 04:38
nskhei

総合スコア704

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

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

Yariii

2020/09/03 05:05

ありがとうございます!パッケなしでいけました、助かりました。 時間を見つけてまた、intlパッケージを入れたバージョンのコードも試してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問