Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.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_Flutter Listview - Fatal编程技术网

Flutter 使用类在颤振中传递参数,如列表所示

Flutter 使用类在颤振中传递参数,如列表所示,flutter,dart,flutter-listview,Flutter,Dart,Flutter Listview,我正在用flifter开发一个简单的聊天界面。有一个用户定义的小部件MessageBubble,它接受三个参数:发送方字符串、文本字符串和isMe bool。目前它正在一个接一个地传递静态值,如下所示: List<MessageBubble> messages = [ MessageBubble( sender: "Me", text: "Hi!", isMe: true, ), MessageBubble( s

我正在用flifter开发一个简单的聊天界面。有一个用户定义的小部件MessageBubble,它接受三个参数:发送方字符串、文本字符串和isMe bool。目前它正在一个接一个地传递静态值,如下所示:

List<MessageBubble> messages = [
    MessageBubble(
      sender: "Me",
      text: "Hi!",
      isMe: true,
    ),
    MessageBubble(
      sender: "Not Me",
      text: "Hey, hi!",
      isMe: false,
    ),
];
class BubbleData {
    List <String> sender = ['Not Me', 'Not Me'];
    List <String> text = ['Hey Hi', "What's new?"];
    List <bool> isMe = [false, false];
}
BubbleData data = BubbleData();  //instantiating

@override
Widget build(BuildContext context) {
  return Scaffold(
    body: ListView.builder(
      itemCount: data.sender.length,
      itemBuilder: (_, index) {
        return ListTile(
          title: Text(data.text[index]),         //iterating
          subtitle: Text(data.sender[index]),
        );
      },
    ),
  );
}
 class MyBubbleList extends StatelessWidget {

  final List<BubbleData> bubbles = [
   BubbleData(sender: 'Not Me', text: 'Hey Mi', isMe: false),
   BubbleData(sender: 'Not Me', text: 'What\'s new?', isMe: false)
];

  @override
  Widget build(BuildContext context) {

    //here the ListView part
    return ListView.builder(
      itemCount:bubbles.length,
      itemBuilder: (BuildContext context, int index) { 
             return Container(child:Text(bubbles[index].text));
      },);
  }
}
我想做的是创建一个类BubbleData,如下所示:

List<MessageBubble> messages = [
    MessageBubble(
      sender: "Me",
      text: "Hi!",
      isMe: true,
    ),
    MessageBubble(
      sender: "Not Me",
      text: "Hey, hi!",
      isMe: false,
    ),
];
class BubbleData {
    List <String> sender = ['Not Me', 'Not Me'];
    List <String> text = ['Hey Hi', "What's new?"];
    List <bool> isMe = [false, false];
}
BubbleData data = BubbleData();  //instantiating

@override
Widget build(BuildContext context) {
  return Scaffold(
    body: ListView.builder(
      itemCount: data.sender.length,
      itemBuilder: (_, index) {
        return ListTile(
          title: Text(data.text[index]),         //iterating
          subtitle: Text(data.sender[index]),
        );
      },
    ),
  );
}
 class MyBubbleList extends StatelessWidget {

  final List<BubbleData> bubbles = [
   BubbleData(sender: 'Not Me', text: 'Hey Mi', isMe: false),
   BubbleData(sender: 'Not Me', text: 'What\'s new?', isMe: false)
];

  @override
  Widget build(BuildContext context) {

    //here the ListView part
    return ListView.builder(
      itemCount:bubbles.length,
      itemBuilder: (BuildContext context, int index) { 
             return Container(child:Text(bubbles[index].text));
      },);
  }
}

现在面临的问题是,如何使用ListView生成器在MessageBubble中迭代这些listitems?

也许更好的方法是定义BubbleData,如下所示:

class BubbleData{
   String sender;
   String text;
   bool isMe;

   BubbleData({this.sender, this.text, this.isMe});
}
然后创建一个可以使用数据进行迭代的列表:

List<BubbleData> bubbles = [
   BubbleData(sender: 'Not Me', text: 'Hey Mi', isMe: false),
   BubbleData(sender: 'Not Me', text: 'What\'s new?', isMe: false)
];
下一步将映射并转换为MessageBubble的列表:

List<MessageBubble> messages = bubbles.map((bubble) =>
   MessageBubble(
      sender: bubble.sender, 
      text: bubble.text, 
      isMe: bubble.isMe
   )
).toList();

也许更好的方法是如下定义您的BubbleData:

class BubbleData{
   String sender;
   String text;
   bool isMe;

   BubbleData({this.sender, this.text, this.isMe});
}
然后创建一个可以使用数据进行迭代的列表:

List<BubbleData> bubbles = [
   BubbleData(sender: 'Not Me', text: 'Hey Mi', isMe: false),
   BubbleData(sender: 'Not Me', text: 'What\'s new?', isMe: false)
];
下一步将映射并转换为MessageBubble的列表:

List<MessageBubble> messages = bubbles.map((bubble) =>
   MessageBubble(
      sender: bubble.sender, 
      text: bubble.text, 
      isMe: bubble.isMe
   )
).toList();

您可以这样迭代:

List<MessageBubble> messages = [
    MessageBubble(
      sender: "Me",
      text: "Hi!",
      isMe: true,
    ),
    MessageBubble(
      sender: "Not Me",
      text: "Hey, hi!",
      isMe: false,
    ),
];
class BubbleData {
    List <String> sender = ['Not Me', 'Not Me'];
    List <String> text = ['Hey Hi', "What's new?"];
    List <bool> isMe = [false, false];
}
BubbleData data = BubbleData();  //instantiating

@override
Widget build(BuildContext context) {
  return Scaffold(
    body: ListView.builder(
      itemCount: data.sender.length,
      itemBuilder: (_, index) {
        return ListTile(
          title: Text(data.text[index]),         //iterating
          subtitle: Text(data.sender[index]),
        );
      },
    ),
  );
}
 class MyBubbleList extends StatelessWidget {

  final List<BubbleData> bubbles = [
   BubbleData(sender: 'Not Me', text: 'Hey Mi', isMe: false),
   BubbleData(sender: 'Not Me', text: 'What\'s new?', isMe: false)
];

  @override
  Widget build(BuildContext context) {

    //here the ListView part
    return ListView.builder(
      itemCount:bubbles.length,
      itemBuilder: (BuildContext context, int index) { 
             return Container(child:Text(bubbles[index].text));
      },);
  }
}

您可以这样迭代:

List<MessageBubble> messages = [
    MessageBubble(
      sender: "Me",
      text: "Hi!",
      isMe: true,
    ),
    MessageBubble(
      sender: "Not Me",
      text: "Hey, hi!",
      isMe: false,
    ),
];
class BubbleData {
    List <String> sender = ['Not Me', 'Not Me'];
    List <String> text = ['Hey Hi', "What's new?"];
    List <bool> isMe = [false, false];
}
BubbleData data = BubbleData();  //instantiating

@override
Widget build(BuildContext context) {
  return Scaffold(
    body: ListView.builder(
      itemCount: data.sender.length,
      itemBuilder: (_, index) {
        return ListTile(
          title: Text(data.text[index]),         //iterating
          subtitle: Text(data.sender[index]),
        );
      },
    ),
  );
}
 class MyBubbleList extends StatelessWidget {

  final List<BubbleData> bubbles = [
   BubbleData(sender: 'Not Me', text: 'Hey Mi', isMe: false),
   BubbleData(sender: 'Not Me', text: 'What\'s new?', isMe: false)
];

  @override
  Widget build(BuildContext context) {

    //here the ListView part
    return ListView.builder(
      itemCount:bubbles.length,
      itemBuilder: (BuildContext context, int index) { 
             return Container(child:Text(bubbles[index].text));
      },);
  }
}

按照阿卡德的回答。 您可以在如下列表视图中使用它:

List<MessageBubble> messages = [
    MessageBubble(
      sender: "Me",
      text: "Hi!",
      isMe: true,
    ),
    MessageBubble(
      sender: "Not Me",
      text: "Hey, hi!",
      isMe: false,
    ),
];
class BubbleData {
    List <String> sender = ['Not Me', 'Not Me'];
    List <String> text = ['Hey Hi', "What's new?"];
    List <bool> isMe = [false, false];
}
BubbleData data = BubbleData();  //instantiating

@override
Widget build(BuildContext context) {
  return Scaffold(
    body: ListView.builder(
      itemCount: data.sender.length,
      itemBuilder: (_, index) {
        return ListTile(
          title: Text(data.text[index]),         //iterating
          subtitle: Text(data.sender[index]),
        );
      },
    ),
  );
}
 class MyBubbleList extends StatelessWidget {

  final List<BubbleData> bubbles = [
   BubbleData(sender: 'Not Me', text: 'Hey Mi', isMe: false),
   BubbleData(sender: 'Not Me', text: 'What\'s new?', isMe: false)
];

  @override
  Widget build(BuildContext context) {

    //here the ListView part
    return ListView.builder(
      itemCount:bubbles.length,
      itemBuilder: (BuildContext context, int index) { 
             return Container(child:Text(bubbles[index].text));
      },);
  }
}
您可以在颤振文档中查看更多信息。您将发现关于如何使用ListView的非常好的视频教程。


希望它能帮助你理解Akade的答案。 您可以在如下列表视图中使用它:

List<MessageBubble> messages = [
    MessageBubble(
      sender: "Me",
      text: "Hi!",
      isMe: true,
    ),
    MessageBubble(
      sender: "Not Me",
      text: "Hey, hi!",
      isMe: false,
    ),
];
class BubbleData {
    List <String> sender = ['Not Me', 'Not Me'];
    List <String> text = ['Hey Hi', "What's new?"];
    List <bool> isMe = [false, false];
}
BubbleData data = BubbleData();  //instantiating

@override
Widget build(BuildContext context) {
  return Scaffold(
    body: ListView.builder(
      itemCount: data.sender.length,
      itemBuilder: (_, index) {
        return ListTile(
          title: Text(data.text[index]),         //iterating
          subtitle: Text(data.sender[index]),
        );
      },
    ),
  );
}
 class MyBubbleList extends StatelessWidget {

  final List<BubbleData> bubbles = [
   BubbleData(sender: 'Not Me', text: 'Hey Mi', isMe: false),
   BubbleData(sender: 'Not Me', text: 'What\'s new?', isMe: false)
];

  @override
  Widget build(BuildContext context) {

    //here the ListView part
    return ListView.builder(
      itemCount:bubbles.length,
      itemBuilder: (BuildContext context, int index) { 
             return Container(child:Text(bubbles[index].text));
      },);
  }
}
您可以在颤振文档中查看更多信息。您将发现关于如何使用ListView的非常好的视频教程。


希望对你有所帮助

我之所以在这里编辑你的文章,是因为我还面临一个问题。。。你能帮我吗?你的编辑被拒绝了,但是如果你愿意,我们可以在我编辑你的文章时讨论这个问题,因为我还面临一个问题。。。你能帮助我吗?你的编辑被拒绝了,但如果你愿意,我们可以讨论中的问题:如何通过ListView.builder迭代此消息?请告诉我如何在ListView.builder中使用列表消息?如何通过ListView.builder迭代此消息?请告诉我如何在ListView.builder中使用列表消息?这很有效。我没有返回文本,而是返回了一个MessageBubble,并传递了如下参数-sender:bubbles[index]。sender,Text:bubbles[index]。Text,isMe:bubbles[index]。isMeThis有效。我没有返回文本,而是返回了MessageBubble,并传递了如下参数-sender:bubbles[index]。sender,Text:bubbles[index]。Text,isMe:bubbles[index]。isMe