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

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

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

Visual Studio Codeとは、Microsoft社が開発したマルチプラットフォーム対応のテキストエディタです。Visual Studioファミリーの一員でもあります。拡張性とカスタマイズ性が高く、テキストエディタでありながら、IDEと遜色ない機能を備えることができます。

Flutter

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

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Dart

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

Q&A

解決済

1回答

961閲覧

Flexibleなコンテナwidgetをタップ可能にしたい(overflow)

kariaka2020

総合スコア37

Visual Studio Code

Visual Studio Codeとは、Microsoft社が開発したマルチプラットフォーム対応のテキストエディタです。Visual Studioファミリーの一員でもあります。拡張性とカスタマイズ性が高く、テキストエディタでありながら、IDEと遜色ない機能を備えることができます。

Flutter

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

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Dart

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

0グッド

0クリップ

投稿2022/05/14 09:43

前提

Flutter初学者です。
簡単なFlexibleの自作widgetをクリック(タップ)可能にしたいです。
(下にソースを載せています。)

Flexible(widthがdouble.maxFinite)にしてしまったからか、
InkWellやGestureDetectorでwrapすると、
ビルド時にオーバーフローしてしまいます。

余白をいっぱいに広がるボタンを配置するには
どのように変更すればよいでしょうか。

実現したいこと

  • 動作するようにする

overflowエラー
今の問題

理想
理想

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

════════════════════════════════════════════════════════════════════════════════ ════════ Exception caught by rendering library ═════════════════════════════════ A RenderFlex overflowed by 1.7976931348623157e+308 pixels on the right. The relevant error-causing widget was Row lib\pages\detail_page.dart:263 ════════════════════════════════════════════════════════════════════════════════

該当のソースコード

自作のwidget

dart

1 2class ResponsiveButton extends StatelessWidget { 3 4 ResponsiveButton({Key? key}) 5 : super(key: key); 6 7 8 Widget build(BuildContext context) { 9 return Flexible( 10 child: Container( 11 //幅いっぱい 12 width: double.maxFinite, // ← ※ここでmaxFiniteを設定しています 13 height: 60, 14 decoration: BoxDecoration( 15 borderRadius: BorderRadius.circular(10), 16 color: AppColors.mainColor), 17 //ボタンに画像だけでなく、文字も入れたい場合はrowで横に並べる。 18 child: Row( 19 mainAxisAlignment: iMainAxisAlignment.spaceBetween 20 children: [ 21 //テキスト表示 22 Container( 23 margin: const EdgeInsets.only(left: 20), 24 child: Text('text'), 25 ), 26 Image.asset("img/arrow.png"), 27 ], 28 ), 29 ), 30 ); 31 }

使用箇所

dart

1 2 3 Widget build(BuildContext context) { 4 5 return Scaffold( 6 body: Container( 7 width: double.maxFinite, 8 height: double.maxFinite, 9 child: Stack( 10 children: [ 11 12 ~~~~ 13 14 //フッターボタン 15 Positioned( 16 bottom: 20, 17 left: 20, 18 right: 20, 19 child: Row( 20 children: [ 21 //お気に入りボタン 22 InkWell( 23 onTap: () { 24 //setStateで状態を更新 25 setState(() { 26 isFavorite = !isFavorite; 27 }); 28 }, 29 child: AppButtons( 30 size: 60, 31 color: isFavorite == true 32 ? Colors.pink 33 : AppColors.textColor1, 34 backgroundColor: Colors.white, 35 borderColor: isFavorite == true 36 ? Colors.pinkAccent.withOpacity(0.9) 37 : AppColors.textColor1, 38 isIcon: true, 39 icon: isFavorite == true 40 ? Icons.favorite_rounded 41 : Icons.favorite_border, 42 ), 43 ), 44 45 const SizedBox( 46 width: 20, 47 ), 48 49//問題のコードここから----------------------------------- 50 51 GestureDetector( 52 onTap: () { 53 // タップ時の処理 54 }, 55 child: ResponsiveButton(), 56 ), 57 58//問題のコードここまで----------------------------------- 59 60 ], 61 ), 62 ) 63 ], 64 ), 65 ), 66 ); 67 } 68 69

試したこと

ExpandやFlexibleなど試してみましたが、
知識が浅いためうまくいきませんでした。

ボタン側のwidthを固定値にするとエラーにはならないのですが、
ここでは幅いっぱいに広げたいです。

もし不足しているソースがあればそちらもアップしますので
教えてください。

以上、よろしくお願いいたします。

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

Flutter 2.5.1

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

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

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

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

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

guest

回答1

0

ベストアンサー

ExpandやFlexibleは親のWidgetに合うように広げるので、この場合GestureDetectorをExpandで囲む必要があります。

Flutter

1GestureDetector( //<- これをExpandで囲む、ResponsiveButtonのFlexibleは不要 2 onTap: () { 3 // タップ時の処理 4 }, 5 child: ResponsiveButton(), 6 ),

 
Rowの子にExpandを使う場合は幅はExpandが決めるので、この場合はResponsiveButtonの

Flutter

1width: double.maxFinite,

は必要ありません。(あってもエラーにはなりませんが)

投稿2022/05/16 04:27

Gonnnn

総合スコア52

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

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

kariaka2020

2022/05/16 14:34

教えていただいた方法と、自作widgetのFlexibleを消すことで 望み通りの動きをさせることができました。 回答ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問