我刚开始学习飞镖,并试图创建一个学习项目。我需要一个列表,我首先在main.dart中添加了这个列表,然后将它与另一个类分开。我现在有3份文件
main.darticon.dartmid.dartmain.dart
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
import 'package:flutter/material.dart';
class MyIcons {
List<Icon> icon1 = [];
List<Icon> icon2 = [];
}和mid.dart
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。
下面是应用程序的布局:
发布于 2020-12-26 23:49:03
您的中间类有它自己的myIcons,它是一个独立的实例,而不是_TestingState中的实例。
要只使用一组myIcons,不需要在_TestingState中实例化另一组,因为Mid()实例化已经实例化了自己的MyIcon。(如果这有意义的话)
下面是我将如何在_TestingState中更改main.dart类,而不需要更改任何其他内容。
// ... 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中。
https://stackoverflow.com/questions/65461285
复制相似问题