首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >List.add()在由另一个类的方法调用时不起作用

List.add()在由另一个类的方法调用时不起作用
EN

Stack Overflow用户
提问于 2020-12-26 22:31:54
回答 1查看 235关注 0票数 1

我刚开始学习飞镖,并试图创建一个学习项目。我需要一个列表,我首先在main.dart中添加了这个列表,然后将它与另一个类分开。我现在有3份文件

  1. main.dart
  2. icon.dart
  3. mid.dart

main.dart

代码语言:javascript
复制
import 'package:flutter/material.dart';
import 'package:test_project/icon.dart';
import 'mid.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        backgroundColor: Colors.grey.shade900,
        body: SafeArea(
          child: Padding(
            padding: EdgeInsets.symmetric(horizontal: 10.0),
            child: Testing(),
          ),
        ),
      ),
    );
  }
}

class Testing extends StatefulWidget {
  @override
  _TestingState createState() => _TestingState();
}

class _TestingState extends State<Testing> {
  MyIcons myIcons = MyIcons();
  Mid mid = Mid();

  @override
  Widget build(BuildContext context) {
    return Column(
      mainAxisAlignment: MainAxisAlignment.spaceBetween,
      crossAxisAlignment: CrossAxisAlignment.stretch,
      children: <Widget>[
        Expanded(
          flex: 2,
          child: Padding(
            padding: EdgeInsets.all(10.0),
            child: Column(
              mainAxisAlignment: MainAxisAlignment.center,
              children: [
                Row(
                  children: myIcons.icon1,
                ),
                Row(
                  children: myIcons.icon2,
                ),
              ],
            ),
          ),
        ),
        Row(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Expanded(
              child: Padding(
                padding: EdgeInsets.all(15.0),
                child: FlatButton(
                  color: Colors.teal,
                  child: Text(
                    'Add Check Icon',
                    style: TextStyle(
                      fontSize: 20.0,
                      color: Colors.white,
                    ),
                  ),
                  onPressed: () {
                    setState(() {
                      myIcons.icon1.add(Icon(
                        Icons.check,
                        color: Colors.green,
                      ));
                    });
                  },
                ),
              ),
            ),
            Expanded(
              child: Padding(
                padding: EdgeInsets.all(15.0),
                child: FlatButton(
                  color: Colors.red,
                  child: Text(
                    'Add Cross Icon',
                    style: TextStyle(
                      fontSize: 20.0,
                      color: Colors.white,
                    ),
                  ),
                  onPressed: () {
                    setState(() {
                      mid.addIcon();
                    });
                  },
                ),
              ),
            ),
          ],
        ),
      ],
    );
  }
}

icon.dart

代码语言:javascript
复制
import 'package:flutter/material.dart';

class MyIcons {
  List<Icon> icon1 = [];
  List<Icon> icon2 = [];
}

mid.dart

代码语言:javascript
复制
import 'package:flutter/material.dart';
import 'icon.dart';
//import 'main.dart';

class Mid {
  MyIcons myIcons = MyIcons();

  void addIcon() {
    myIcons.icon2.add(Icon(
      Icons.close,
      color: Colors.red,
    ));
  }
}

通过按第一个按钮可以成功地添加check icons,该按钮直接调用icon.dart文件的对象并将图标添加到列表中,但在从mid.dart调用方法addIcon()时不能添加cross icons

下面是应用程序的布局:

应用程序布局

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-26 23:49:03

您的中间类有它自己的myIcons,它是一个独立的实例,而不是_TestingState中的实例。

要只使用一组myIcons,不需要在_TestingState中实例化另一组,因为Mid()实例化已经实例化了自己的MyIcon。(如果这有意义的话)

下面是我将如何在_TestingState中更改main.dart类,而不需要更改任何其他内容。

代码语言:javascript
复制
// ... Main.dart file 

class _TestingState extends State<Testing> {
  Mid mid = Mid();

  @override
  Widget build(BuildContext context) {
    return Column(
      mainAxisAlignment: MainAxisAlignment.spaceBetween,
      crossAxisAlignment: CrossAxisAlignment.stretch,
      children: <Widget>[
        Expanded(
          flex: 2,
          child: Padding(
            padding: EdgeInsets.all(10.0),
            child: Column(
              mainAxisAlignment: MainAxisAlignment.center,
              children: [
                Row(
                  children: mid.myIcons.icon1,
                ),
                Row(
                  children: mid.myIcons.icon2,
                ),
              ],
            ),
          ),
        ),
        Row(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Expanded(
              child: Padding(
                padding: EdgeInsets.all(15.0),
                child: FlatButton(
                  color: Colors.teal,
                  child: Text(
                    'Add Check Icon',
                    style: TextStyle(
                      fontSize: 20.0,
                      color: Colors.white,
                    ),
                  ),
                  onPressed: () {
                    setState(() {
                      mid.myIcons.icon1.add(Icon(
                        Icons.check,
                        color: Colors.green,
                      ));
                    });
                  },
                ),
              ),
            ),
            Expanded(
              child: Padding(
                padding: EdgeInsets.all(15.0),
                child: FlatButton(
                  color: Colors.red,
                  child: Text(
                    'Add Cross Icon',
                    style: TextStyle(
                      fontSize: 20.0,
                      color: Colors.white,
                    ),
                  ),
                  onPressed: () {
                    setState(() {
                      mid.addIcon();
                    });
                  },
                ),
              ),
            ),
          ],
        ),
      ],
    );
  }
}

注意我是如何在myIcons中删除_TestingState实例化的,而是在mid中访问myIcons。因此,mid.addIcon()添加到icon2中,而mid.myIcons.icon1.add()将添加到icon1中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65461285

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档