我在颤抖方面遇到问题。我的屏幕没有滚动。我有几个组件使用“列”功能将它们彼此叠放在一起,但是简单的滚动功能不起作用。
这是我的代码
Widget buildContent() {
int count = 0;
if (incomeList == null) {
incomeList = List<Income>();
}
return Column(
children: <Widget>[
Row(
mainAxisAlignment: MainAxisAlignment.spaceAround,
mainAxisSize: MainAxisSize.max,
children: [
Expanded(
flex: 1,
child: Column(
children: <Widget>[
Text(
"${widget.outstanding}",
textAlign: TextAlign.center,
),
Padding(
padding: EdgeInsets.all(3.0),
child: Text(zeroAmount,
textAlign: TextAlign.center,
style: TextStyle(
color: Colors.green,
)),
),
],
),
),
Container(width: 0.4, height: 40, color: Colors.black54),
Expanded(
flex: 1,
child: Column(
children: [
Text(
"${widget.received_or_paid}",
textAlign: TextAlign.center,
),
Padding(
padding: EdgeInsets.all(3.0),
child: Text(zeroAmount, textAlign: TextAlign.center,
style: TextStyle(color: Colors.green)),
),
],
),
),
//Divider(color: Colors.black54),
],
),
// SizedBox(height: 12), //padding
Padding(
padding: EdgeInsets.only(top: 12.0, left: 15.0, right: 15.0),
child: Divider(
height: 1,
color: Colors.black54,
),
),
IncomeTransaction(),
],
);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: TextSwitchAppBar(
bottom: PreferredSize(
child: _buildLayoutAttributesPage(),
),
),
floatingActionButton: FloatingActionButton(
backgroundColor: colorPrimary,
onPressed: () {
Navigator.push(context,
MaterialPageRoute(builder: (context) => getTransactionType()));
},
child: Icon(
Icons.add,
),
),
body: Container(
//height: 1000,
padding: EdgeInsets.symmetric(vertical: 16.0),
child: buildContent()
),
);
}
下面是IncomeTransaction代码
import 'package:flutter/material.dart';
import 'package:finsec/utils/colors.dart';
import 'package:finsec/utils/strings.dart';
import 'package:finsec/screens/transaction/text_switch_app_bar.dart';
import 'package:finsec/screens/transaction/row_column_layout_attributes.dart';
import 'package:finsec/widget/transaction_list_view.dart';
import 'package:finsec/screens/income/second_fragment.dart';
import 'package:finsec/screens/income/add_edit_income.dart';
import 'package:finsec/data/blocs/bloc_provider.dart';
import 'package:finsec/data/blocs/transaction_bloc.dart';
import 'package:finsec/screens/transaction/transaction_list.dart';
import 'package:finsec/data/db_provider.dart';
import 'package:sqflite/sqflite.dart';
import 'package:finsec/model/income/income.dart';
import 'package:finsec/widget/total_amount.dart';
class IncomeTransaction extends StatefulWidget {
@override
State<StatefulWidget> createState() {
return IncomeTransactionState();
}
}
class IncomeTransactionState extends State<IncomeTransaction> {
DBProvider db = new DBProvider();
List<Income> incomeList;
int count = 0;
@override
Widget build(BuildContext context) {
if (incomeList == null) {
incomeList = List<Income>();
updateListView();
for(int i=0; i<incomeList.length; i++) {
print('CATEGORY');
print(this.incomeList[i].category);
}
}
TextStyle titleStyle = Theme.of(context).textTheme.subhead;
return
ListView.builder(
shrinkWrap: true,
itemCount: count,
itemBuilder: (BuildContext context, int position) {
return Column(
children: [
ListTile(
leading: CircleAvatar(
backgroundColor: Colors.yellow,
child: Icon(Icons.play_arrow),
),
title: Text(this.incomeList[position].category,
style: titleStyle,),
// subtitle: Text(this.incomeList[position].payoutDate),
trailing: GestureDetector(
child: Icon(Icons.delete, color: Colors.grey,),
onTap: () {
_delete(context, incomeList[position]);
},
),
onTap: () {
debugPrint("ListTile Tapped");
navigateToDetail(
this.incomeList[position], 'Edit Note');
},
)
]
);
}
);
}
// Returns the priority color
Color getPriorityColor(int priority) {
switch (priority) {
case 1:
return Colors.red;
break;
case 2:
return Colors.yellow;
break;
default:
return Colors.yellow;
}
}
// Returns the priority icon
Icon getPriorityIcon(int priority) {
switch (priority) {
case 1:
return Icon(Icons.play_arrow);
break;
case 2:
return Icon(Icons.keyboard_arrow_right);
break;
default:
return Icon(Icons.keyboard_arrow_right);
}
}
void _delete(BuildContext context, Income note) async {
int result = await db.deleteTransaction(note.id);
if (result != 0) {
_showSnackBar(context, 'Note Deleted Successfully');
updateListView();
}
}
void _showSnackBar(BuildContext context, String message) {
final snackBar = SnackBar(content: Text(message));
Scaffold.of(context).showSnackBar(snackBar);
}
void navigateToDetail(Income note, String title) async {
bool result = await Navigator.push(context, MaterialPageRoute(builder: (context) {
// return NoteDetail(Income, title);
}));
if (result == true) {
updateListView();
}
}
void updateListView() {
final Future<Database> dbFuture = db.initializeDatabase();
dbFuture.then((database) {
Future<List<Income>> incomeListFuture = db.getIncomeList('income');
incomeListFuture.then((incomeList) {
setState(() {
this.incomeList = incomeList;
this.count = incomeList.length;
});
});
});
}
}
Listview没有滚动。我尝试使用SingleChildScrollView,但列表视图仍未滚动。我在网上阅读了SingleChildScrollView不适用于Column属性,但不确定是否为真。我也读到我应该在列表视图的顶部包括小部件(未完成的总数,已收到的总数)作为列表视图的一部分,但是不知道该怎么做。该标题不可点击。
有人可以帮我修改此代码,以便我的屏幕向下滚动吗? 另外,不确定在listview构建器中使用收缩包装时,为什么会出现底部溢出错误。
答案 0 :(得分:0)
在buildContent
中,将IncomeTransaction()
包裹到Expanded
中:
就像Expanded(child: IncomeTransaction())
。
那应该解决。
如果您已经拥有SingleChildScrollView
,则不需要ListView
。 ListView
本身可以滚动。
我建议您阅读这篇https://flutter.dev/docs/development/ui/layout/box-constraints文章,它有助于了解这种情况。
答案 1 :(得分:0)
IncomeTransaction
在Column
方法中在buildContent()
中的大小是不受限制的,因此它需要占用显示所有元素所需的空间。
您必须用Expanded
包装它,这样它将占用屏幕上剩余的所有空间。