Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 带行的图标按钮_Flutter_Dart_Row_Iconbutton - Fatal编程技术网

Flutter 带行的图标按钮

Flutter 带行的图标按钮,flutter,dart,row,iconbutton,Flutter,Dart,Row,Iconbutton,在这段代码中,我希望将IconButton放在每个ItemView的右上角。ItemDescription和ItemTitle居中于顶部。我试着把它们放在同一排,但是我不能把它们放在一起,要么ICONBUT要么粘在文本上,要么就在中间。 我认为这很容易,但我没有找到解决办法 代码如下: import 'package:flutter/material.dart'; import 'package:cached_network_image/cached_network_image.dart'; i

在这段代码中,我希望将IconButton放在每个ItemView的右上角。ItemDescription和ItemTitle居中于顶部。我试着把它们放在同一排,但是我不能把它们放在一起,要么ICONBUT要么粘在文本上,要么就在中间。 我认为这很容易,但我没有找到解决办法

代码如下:

import 'package:flutter/material.dart';
import 'package:cached_network_image/cached_network_image.dart';
import '../recyclerview/data.dart';
import 'package:watch/constants.dart';


class ListViewExample extends StatefulWidget {
  @override 
  State<StatefulWidget> createState() {
    return new ListViewExampleState(
    );
  }
}

class ListViewExampleState extends State<ListViewExample>{
  List<Container> _buildListItemsFromItems(){
    int index = 0;
    return item.map((item){

      var container = Container(
        decoration: index % 2 == 0?
        new BoxDecoration(color: const Color(0xFFFFFFFF)):
          new BoxDecoration(
            color: const Color(0xFFFAFAF5)
          ),
        child: new Row(
          children: <Widget>[
            new Container(
              margin: new EdgeInsets.all(5.0),
              child: new CachedNetworkImage(
                imageUrl: item.imageURL,
                width: 200.0,
                height: 100.0,
                fit: BoxFit.cover,
              ),
            ),
            Expanded(
              child: Row(
                children: <Widget>[
                  new Row(
                    mainAxisAlignment: MainAxisAlignment.center,
                    crossAxisAlignment: CrossAxisAlignment.start,
                      children: <Widget>[
                        Container(
                          padding: const EdgeInsets.only(bottom: 75.0 ),
                          child: Text(
                             item.title,
                            style: kItemTitle,
                          ),
                        ),
                        Container(
                          padding: const EdgeInsets.only(left: 15.0),
                          child:Text(
                            item.description,
                            style: kItemDescription,
                          ),
                        ),
                      ],
                  ),
                  new Row(
                    mainAxisAlignment: MainAxisAlignment.end,
                    crossAxisAlignment: CrossAxisAlignment.start,
                    children: <Widget>[
                      Container(
                        child: IconButton(
                          icon: Icon(Icons.favorite_border, color: Colors.black,),
                          iconSize: 24.0,
                          onPressed: null
                        ),
                      )
                  ],)
              ]),
            ),
          ]),
      );
      index = index + 1;
      return container;
    }).toList();
  }
  @override
  Widget build(BuildContext context) {
    return new Scaffold(
       appBar: AppBar(
         title: Text('Accueil', style: kAppBarStyle,),
          backgroundColor: Colors.white,  
          elevation: 0,
       ),
       body: ListView(
      children: _buildListItemsFromItems(),
    ),
    );
  }
}

导入“包装:颤振/材料.省道”;
导入“package:cached_network_image/cached_network_image.dart”;
导入“../recyclerview/data.dart”;
导入“package:watch/constants.dart”;
类ListViewExample扩展StatefulWidget{
@凌驾
状态createState(){
返回新的ListViewExampleState(
);
}
}
类ListViewExampleState扩展状态{
列表_buildListItemsFromItems(){
int指数=0;
返回item.map((item){
var container=容器(
装饰:索引%2==0?
新的盒子装饰(颜色:常量颜色(0xFFFFFF)):
新盒子装饰(
颜色:常量颜色(0xFFFAF5)
),
孩子:新的一排(
儿童:[
新容器(
边距:所有新边集(5.0),
子级:新建CachedNetworkImage(
imageUrl:item.imageUrl,
宽度:200.0,
高度:100.0,
适合:BoxFit.cover,
),
),
扩大(
孩子:排(
儿童:[
新行(
mainAxisAlignment:mainAxisAlignment.center,
crossAxisAlignment:crossAxisAlignment.start,
儿童:[
容器(
填充:仅限常量边集(底部:75.0),
子:文本(
项目名称,
风格:kItemTitle,
),
),
容器(
填充:仅限常量边集(左:15.0),
子:文本(
项目名称:,
风格:kItemDescription,
),
),
],
),
新行(
mainAxisAlignment:mainAxisAlignment.end,
crossAxisAlignment:crossAxisAlignment.start,
儿童:[
容器(
孩子:我的钮扣(
图标:图标(Icons.favorite_边框,颜色:Colors.black,),
iconSize:24.0,
onPressed:null
),
)
],)
]),
),
]),
);
指数=指数+1;
返回容器;
}).toList();
}
@凌驾
小部件构建(构建上下文){
归还新脚手架(
appBar:appBar(
标题:文本('Accueil',样式:kAppBarStyle,),
背景颜色:Colors.white,
海拔:0,
),
正文:ListView(
子项:\ u buildListItemsFromItems(),
),
);
}
}

更新:我添加了一个
间隔符()
,并将所有内容放在同一行中,并将CrossAxisAlignment设置为.center。

将图标与标题和说明放在同一行中,中间有一个。这将给你一个溢出错误,因为间隔想要占据尽可能多的物理空间,所以没有限制,它会无限大。要告诉间隔符只允许有限的空间,必须将行的mainAxisSize设置为mainAxisSize.min

这是代码,经过一些修改,我可以自己运行它

import 'package:flutter/material.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: ListViewExample(),
    );
  }
}

class ListViewExample extends StatefulWidget {
  @override
  State<StatefulWidget> createState() {
    return new ListViewExampleState();
  }
}

class ListViewExampleState extends State<ListViewExample> {
  var items = [
    Item(),
    Item(),
    Item(),
    Item(),
  ];
  List<Container> _buildListItemsFromItems() {
    int index = 0;
    return items.map(
      (item) {
        var container = Container(
          decoration: index % 2 == 0
              ? new BoxDecoration(color: const Color(0xFFFFFFFF))
              : new BoxDecoration(color: const Color(0xFFFAFAF5)),
          child: new Row(
            children: <Widget>[
              new Container(
                margin: new EdgeInsets.all(5.0),
                child: new Container(
                  color: Colors.red,
                  width: 150.0,
                  height: 100.0,
                ),
              ),
              Expanded(
                child: new Row(
                  mainAxisAlignment: MainAxisAlignment.center,
                  crossAxisAlignment: CrossAxisAlignment.start,
                  mainAxisSize: MainAxisSize.min,
                  children: <Widget>[
                    Container(
                      padding: const EdgeInsets.only(bottom: 75.0),
                      child: Text(
                        item.title,
                      ),
                    ),
                    Container(
                      padding: const EdgeInsets.only(left: 15.0),
                      child: Text(
                        item.description,
                      ),
                    ),
                    Spacer(),
                    GestureDetector(
                      child: Icon(
                        Icons.favorite_border,
                        size: 14,
                        color: Colors.black,
                      ),
                      onTap: null,
                    ),
                  ],
                ),
              ),
            ],
          ),
        );
        index = index + 1;
        return container;
      },
    ).toList();
  }

  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      appBar: AppBar(
        title: Text('Accueil'),
        backgroundColor: Colors.white,
        elevation: 0,
      ),
      body: ListView(
        children: _buildListItemsFromItems(),
      ),
    );
  }
}

class Item {
  final String title;
  final String description;

  Item({this.title = 'FooTitle', this.description = 'BarDescription'});
}

导入“包装:颤振/材料.省道”;
void main(){
runApp(MyApp());
}
类MyApp扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回材料PP(
主页:ListViewExample(),
);
}
}
类ListViewExample扩展StatefulWidget{
@凌驾
状态createState(){
返回新的ListViewExampleState();
}
}
类ListViewExampleState扩展状态{
可变项目=[
项(),
项(),
项(),
项(),
];
列表_buildListItemsFromItems(){
int指数=0;
返回items.map(
(项目){
var container=容器(
装饰:索引%2==0
?新的盒子装饰(颜色:常量颜色(0xFFFFFF))
:新框装饰(颜色:常量颜色(0xFFFAF5)),
孩子:新的一排(
儿童:[
新容器(
边距:所有新边集(5.0),
子容器:新容器(
颜色:颜色,红色,
宽度:150.0,
高度:100.0,
),
),
扩大(
孩子:新的一排(
mainAxisAlignment:mainAxisAlignment.center,
crossAxisAlignment:crossAxisAlignment.start,
mainAxisSize:mainAxisSize.min,
儿童:[
容器(
填充:仅限常量边集(底部:75.0),
子:文本(
项目名称,
),
),
容器(
填充:仅限常量边集(左:15.0),
子:文本(
项目名称:,
),
),
垫片(),
手势检测器(
子:图标(
图标。最喜爱的边框,
尺码:14,
颜色:颜色,黑色,
),
onTap:null,
),
],
),
),