当前位置: 首页 > 知识库问答 >
问题:

添加卡到ListView

陶柏
2023-03-14

我试图获得卡的列表,并尝试使用扩展小部件,但有溢出错误

我的代码:

new Expanded(
      child: StreamBuilder(
          stream: Firestore.instance.collection('baby').snapshots(),
          builder: (context, snapshot) {
            if (!snapshot.hasData) return const Text('Loading...');
            return ListView.builder(
                itemCount: snapshot.data.documents.length,
                padding: const EdgeInsets.only(top: 10.0),
                itemExtent: 25.0,
                itemBuilder: (context, index) {
                  DocumentSnapshot ds = snapshot.data.documents[index];
                  return //Text(" ${ds['name']} ${ds['vote']}");
                    Card(
                      child: Expanded(
                        child: Column(
                          mainAxisSize: MainAxisSize.min,
                          children: <Widget>[
                            const ListTile(
                              leading: const Icon(Icons.album),
                              title: const Text('The Enchanted Nightingale'),
                              subtitle: const Text('Music by Julie Gable. Lyrics by Sidney Stein.'),
                            ),
                            new ButtonTheme.bar( // make buttons use the appropriate styles for cards
                              child: ButtonBar(
                                children: <Widget>[
                                   FlatButton(
                                    child: const Text('BUY TICKETS'),
                                    onPressed: () { /* ... */ },
                                  ),
                                   FlatButton(
                                    child: const Text('LISTEN'),
                                    onPressed: () { /* ... */ },
                                  ),
                                ],
                              ),
                            ),
                          ],
                        ),
                    ),
                    );
                });
          })),

我得到的错误是:不正确地使用了ParentDataWidget

完全错误:

正在执行热重新加载。。。I/颤振(9119):══╡ WIDGETS库捕获的异常╞═══════════════════════════════════════════════════════════ I/flatter(9119):以下断言是在构建DefaultTextStyle(debugLabel:(类似英语的I/flatter(9119):body1)时抛出的。合并(blackMountainView body1),继承:false,颜色:color(0xdd000000),家族:Roboto,I/Flatter(9119):尺寸:14.0,重量:400,基线:字母,装饰:文本装饰。无,软包装:包装I/flatter(9119):盒宽,溢出:clip):I/flatter(9119):ParentDataWidget使用不正确。I/flatter(9119):扩展的小部件必须直接放在Flex小部件中。I/flatter(9119):Expanded(无深度,flex:1,dirty)有一个flex祖先,但它们之间还有其他小部件:I/flatter(9119):InkFeatures-[GlobalKey 93e52墨水渲染器]I/flatter(9119):-CustomPaint I/flatter(9119):-PhysicalShape(裁剪器:ShapeOrderClipper,标高:1.0,颜色:color(0xffffffff),shadowColor:I/flatter(9119):Color(0xff000000))I/flatter(9119):-Padding(Padding:EdgeInsets.all(4.0))I/flatter(9119):-Semantics(容器:true,属性:semanticProperties,标签:null,值:null,提示:null)I/flatter(9119):-RepaintBoundary-[

更新
这是我得到的输出屏幕:

如果我删除了扩展的,输出会变成这样:


共有3个答案

柳晔
2023-03-14

你能把手机屏幕的打印放在你的问题里吗?

我把你的代码和没有扩展的小部件和它的完美,你想改变什么?

孟华晖
2023-03-14

在这个例子中

使用属性。你可以通过调整阴影来改变阴影

最后一行的示例显示了

ListView(
  children: <Widget>[
    Card(child: ListTile(title: Text('One-line ListTile'))),
    Card(
      child: ListTile(
        leading: FlutterLogo(),
        title: Text('One-line with leading widget'),
      ),
    ),
    Card(
      child: ListTile(
        title: Text('One-line with trailing widget'),
        trailing: Icon(Icons.more_vert),
      ),
    ),
    Card(
      child: ListTile(
        leading: FlutterLogo(),
        title: Text('One-line with both widgets'),
        trailing: Icon(Icons.more_vert),
      ),
    ),
    Card(
      child: ListTile(
        title: Text('One-line dense ListTile'),
        dense: true,
      ),
    ),
    Card(
      child: ListTile(
        leading: FlutterLogo(size: 56.0),
        title: Text('Two-line ListTile'),
        subtitle: Text('Here is a second line'),
        trailing: Icon(Icons.more_vert),
      ),
    ),
    Card(
      child: ListTile(
        leading: FlutterLogo(size: 72.0),
        title: Text('Three-line ListTile'),
        subtitle:
        Text('A sufficiently long subtitle warrants three lines.'),
        trailing: Icon(Icons.more_vert),
        isThreeLine: true,
      ),
    ),
    Card(
        child: InkWell(
          splashColor: Colors.blue.withAlpha(30),
          onTap: () {
            print('Card tapped.');
          },
          child: Container(
            width: 300,
            height: 100,
            child: Center(
              child: Text(
                'When tapped this Cards InkWell displays an ink splash that fills the entire card',
              ),
            ),
          ),
        )),
  ],
)

这是跑步时的样子:

傅乐湛
2023-03-14

我发现,整个问题在于使用itemExtent:25.0,atListView。builder通过删除它,所有内容在默认情况下都可以扩展,并且运行平稳。

在寻找解决方案时,我遇到了这个,这个和这个,帮助我在一个更干净的代码中重建应用程序,下面是谁感兴趣:

main。飞镖

import 'package:flutter/material.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'BabyModel.dart';
import 'BabyCard.dart';

void main() => runApp(MyApp(
  textInput: Text("Text Widget"),
));

class MyApp extends StatefulWidget {
  final Widget textInput;
  MyApp({this.textInput});

  @override
  State<StatefulWidget> createState() => MyAppState();
}

class MyAppState extends State<MyApp> {
  bool checkBoxValue = false;

  @override
  Widget build(BuildContext ctxt) {
    return StreamBuilder(
      stream: Firestore.instance.collection('baby').snapshots(),
      builder: (_, AsyncSnapshot<QuerySnapshot> snapshot) {
        var documents = snapshot.data?.documents ?? [];
        var baby =
        documents.map((snapshot) => BabyData.from(snapshot)).toList();
        return BabyPage(baby);
      },
    );
  }
}

class BabyPage extends StatefulWidget {
  final List<BabyData> allBaby;

  BabyPage(this.allBaby);

  @override
  State<StatefulWidget> createState() {
    return BabyPageState();
  }
}


class BabyPageState extends State<BabyPage> {
  @override
  Widget build(BuildContext context) {

  //  var filteredBaby = widget.allFish.where((BabyData data) {
  //    data.name = 'Dana';
  //  }).toList();

    return MaterialApp(
        home: SafeArea(
        child: Scaffold(
        body: Container(
        child: ListView.builder(
            itemCount: widget.allBaby.length,
            padding: const EdgeInsets.only(top: 10.0),
            itemBuilder: (context, index) {
              return BabyCard(widget.allBaby[index]);
            })
      ),
    )));
  }
}

BabyModel.dart

import 'package:cloud_firestore/cloud_firestore.dart';

class BabyData {
  final DocumentReference reference;
  String name;
  int vote;

  BabyData.data(this.reference,
      [this.name,
        this.vote]) {
    // Set these rather than using the default value because Firebase returns
    // null if the value is not specified.
    this.name ??= 'Frank';
    this.vote ??= 7;
  }

  factory BabyData.from(DocumentSnapshot document) => BabyData.data(
      document.reference,
      document.data['name'],
      document.data['vote']);

  void save() {
    reference.setData(toMap());
  }

  Map<String, dynamic> toMap() {
    return {
      'name': name,
      'vote': vote,
    };
  }
}

BabyCard。飞镖

import 'package:flutter/material.dart';
import 'BabyModel.dart';

class BabyCard extends StatefulWidget {
  final BabyData baby;

  BabyCard(this.baby);

  @override
  State<StatefulWidget> createState() {
    return BabyCardState(baby);
  }
}

class BabyCardState extends State<BabyCard> {
  BabyData baby;
  String renderUrl;

  BabyCardState(this.baby);

  Widget get babyCard {
    return
      new Card(
        child: Column(
          mainAxisSize: MainAxisSize.min,
          children: <Widget>[
            ListTile(
              leading: const Icon(Icons.album),
              title: Text('The ${baby.name} is having:'),
              subtitle: Text('${baby.vote} Votes.'),
            ),
            new ButtonTheme.bar( // make buttons use the appropriate styles for cards
              child: new ButtonBar(
                children: <Widget>[
                  new FlatButton(
                    child: const Text('Thumb up'),
                    onPressed: () { /* ... */ },
                  ),
                  new FlatButton(
                    child: const Text('Thumb down'),
                    onPressed: () { /* ... */ },
                  )]))]));
  }

  @override
  Widget build(BuildContext context) {
    return new Container(
          child:  babyCard,
        );
  }
}

结果是:

 类似资料:
  • 我正在尝试在我的iOS Xamarin应用程序上实现设置Apple Pay按钮。我已经为它添加了按钮和单击处理程序。然后使用PKPassLibrary.OpenPaymentSetup()打开Wallet。然后,如果用户成功地将卡添加到钱包中,我需要通过更改“设置ApplePay按钮”为“用Apple Pay支付”来处理此事件。但我找不到工作的任何事件处理程序或类似的东西。 我试过的: 但它不起作

  • 我正在尝试添加卡片视图,但当我使用此依赖项添加库时:我收到以下错误: 错误:任务“:app:processDebugManifest”的执行失败。清单合并失败:属性元数据#android。支持VERSION@value值=(26.0.0-alpha1)来自[com.android.support:appcompat-v7:26.0.0-alpha1]AndroidManifest。xml:27:9

  • 我正在尝试添加一个表单内的多种颜色的选项。问题是,即使在添加了一个在第一个颜色字段下面添加一个新字段的按钮之后,后续字段也不会保存在jQuery调用和PHP控制器上的dd()中。 供参考 以下是点击submit后我得到的信息。

  • 它位于pom.xml这一部分的第一行: 知道吗???

  • 我是刚到爪哇的。我想把我的cardlayout添加到JFrame中。我之所以要这样做,是因为我可以通过关闭jframe在单击exit按钮时退出框架(窗口)。下面的程序是对JFrame的扩展。但我想声明JFrame,并在上面添加卡片。我试过了,但没有成功。我还想把card1的Jpanel设置为500(宽),500(高),但全屏显示。

  • 我正在尝试与非官方的Android API交互:http://code.google.com/p/android-market-api/.它包括两个。我必须添加到类路径的JAR(我在Windows 7上) 我已经将. jars、androidmarket和原型都放入了我的项目目录中,并编辑了我的CLASSPATH以包含两个. jars: C:\xxxxxxxxxx\JAVA项目文件夹\protob