Flutter 手势捕捉到异常,未找到MediaQuery小部件。MyHomePage小部件需要MediaQuery小部件祖先
我试图添加一个底部模型表,以在事务列表中添加新的事务,我遵循,这就是我得到的错误,我在这里缺少什么 这是我的主.dart文件Flutter 手势捕捉到异常,未找到MediaQuery小部件。MyHomePage小部件需要MediaQuery小部件祖先,flutter,dart,Flutter,Dart,我试图添加一个底部模型表,以在事务列表中添加新的事务,我遵循,这就是我得到的错误,我在这里缺少什么 这是我的主.dart文件 import 'package:expense_tracker/widgets/transaction_list.dart'; import './widgets/transaction_list.dart'; import 'package:flutter/material.dart'; import './widgets/new_transaction.dart';
import 'package:expense_tracker/widgets/transaction_list.dart';
import './widgets/transaction_list.dart';
import 'package:flutter/material.dart';
import './widgets/new_transaction.dart';
import './models/transaction.dart';
void main() => runApp(MyHomePage());
class MyHomePage extends StatefulWidget {
// String titleInput;
// String amountInput;
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
final titleController = TextEditingController();
final amountController = TextEditingController();
final List<Transaction> _userTransactions = [
Transaction(
id: 't1',
title: 'New Shoes',
amount: 1000,
date: DateTime.now(),
),
Transaction(
id: 't2',
title: 'USB Cable',
amount: 600,
date: DateTime.now(),
),
];
void _addNewTransaction(String txTitle, double txAmount) {
final newTX = Transaction(
title: txTitle,
amount: txAmount,
date: DateTime.now(),
id: DateTime.now().toString());
setState(() {
_userTransactions.add(newTX);
});
}
void _startAddNewTransaction(BuildContext ctx) {
showModalBottomSheet(context: ctx,builder: (bCtx) {
return NewTransaction(_addNewTransaction);
});
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Flutter App'),
actions: [
IconButton(
icon: Icon(Icons.add),
onPressed: () => _startAddNewTransaction(context),
),
],
),
body: SingleChildScrollView(
child: Column(
// mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.stretch,
children: <Widget>[
Container(
width: double.infinity,
child: Card(
color: Colors.blue,
child: Text('CHART'),
elevation: 10,
),
),
TransactionList(_userTransactions),
]),
),
floatingActionButtonLocation: FloatingActionButtonLocation.endFloat,
floatingActionButton: FloatingActionButton(
child: Icon(Icons.add),
onPressed: () => _startAddNewTransaction(context),
),
),
);
}
}
import'package:expense_tracker/widgets/transaction_list.dart';
导入“./widgets/transaction_list.dart”;
进口“包装:颤振/材料.省道”;
导入“./widgets/new_transaction.dart”;
导入“./models/transaction.dart”;
void main()=>runApp(MyHomePage());
类MyHomePage扩展StatefulWidget{
//字符串标题输入;
//字符串数量输入;
@凌驾
_MyHomePageState createState()=>\u MyHomePageState();
}
类_MyHomePageState扩展状态{
最终标题控制器=文本编辑控制器();
最终数量控制器=TextEditingController();
最终列表_userTransactions=[
交易(
id:'t1',
标题:“新鞋”,
金额:1000,
日期:DateTime.now(),
),
交易(
id:'t2',
标题:“USB电缆”,
金额:600,
日期:DateTime.now(),
),
];
void _addNewTransaction(字符串txTitle,双txAmount){
最终newTX=事务(
标题:txTitle,
金额:txAmount,
日期:DateTime.now(),
id:DateTime.now().toString());
设置状态(){
_userTransactions.add(newTX);
});
}
void _startAddNewTransaction(BuildContext ctx){
showModalBottomSheet(上下文:ctx,生成器:(bCtx){
返回新交易(_addNewTransaction);
});
}
@凌驾
小部件构建(构建上下文){
返回材料PP(
家:脚手架(
appBar:appBar(
标题:文本(“颤振应用程序”),
行动:[
图标按钮(
图标:图标(Icons.add),
按下:()=>_startAddNewTransaction(上下文),
),
],
),
正文:SingleChildScrollView(
子:列(
//mainAxisAlignment:mainAxisAlignment.start,
crossAxisAlignment:crossAxisAlignment.stretch,
儿童:[
容器(
宽度:double.infinity,
孩子:卡片(
颜色:颜色,蓝色,
子项:文本(“图表”),
标高:10,
),
),
TransactionList(_userTransactions),
]),
),
floatingActionButtonLocation:floatingActionButtonLocation.endFloat,
浮动操作按钮:浮动操作按钮(
子:图标(Icons.add),
按下:()=>_startAddNewTransaction(上下文),
),
),
);
}
}
单击应用程序栏上的图标和底部的FloatingAction按钮时,将显示相同的底部ModalSheet,它们都不起作用。传递给
\u startAddNewTransaction
方法的构建上下文是\u MyHomePageState
方法。由于\u MyHomePageState
包含MaterialApp
(而不是相反),其构建上下文不知道它
您有两种选择:
用Builder
小部件包装调用该方法的小部件,其BuildContext
将了解MaterialApp
创建一个新的小部件(例如MyHomePageContent
),并将其传递给material应用程序的body:
参数
第一个选项是快速修复,第二个选项更好
最好将项目分为多个文件,如下所示:
主飞镖
我的飞镖
我的主页
类MyHomePage扩展StatefulWidget{
//字符串标题输入;
//字符串数量输入;
@凌驾
_MyHomePageState createState()=>\u MyHomePageState();
}
类_MyHomePageState扩展状态{
最终标题控制器=文本编辑控制器();
最终数量控制器=TextEditingController();
最终列表_userTransactions=[
交易(
id:'t1',
标题:“新鞋”,
金额:1000,
日期:DateTime.now(),
),
交易(
id:'t2',
标题:“USB电缆”,
金额:600,
日期:DateTime.now(),
),
];
void _addNewTransaction(字符串txTitle,双txAmount){
最终newTX=事务(
标题:txTitle,
金额:txAmount,
日期:DateTime.now(),
id:DateTime.now().toString());
设置状态(){
_userTransactions.add(newTX);
});
}
void _startAddNewTransaction(BuildContext ctx){
showModalBottomSheet(
背景:ctx,
建造商:(bCtx){
返回新交易(_addNewTransaction);
});
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
标题:文本(“颤振应用程序”),
行动:[
图标按钮(
图标:图标(Icons.add),
按下:()=>_startAddNewTransaction(上下文),
),
],
),
正文:SingleChildScrollView(
子:列(
//mainAxisAlignment:mainAxisAlignment.start,
crossAxisAlignment:crossAxisAlignment.stretch,
儿童:[
容器(
宽度:double.infinity,
孩子:卡片(
颜色:颜色,蓝色,
子项:文本(“图表”),
标高:10,
),
),
TransactionList(_userTransactions),
]),
),
floatingActionButtonLocation:floatingActionButtonLocation.endFloat,
浮动操作按钮:浮动操作按钮(
子:图标(Icons.add),
按下:()=>_startAddNewTransaction(上下文),
),
);
}
}
要传递给\u startAddNewTransaction
的构建上下文
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
// String titleInput;
// String amountInput;
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
final titleController = TextEditingController();
final amountController = TextEditingController();
final List<Transaction> _userTransactions = [
Transaction(
id: 't1',
title: 'New Shoes',
amount: 1000,
date: DateTime.now(),
),
Transaction(
id: 't2',
title: 'USB Cable',
amount: 600,
date: DateTime.now(),
),
];
void _addNewTransaction(String txTitle, double txAmount) {
final newTX = Transaction(
title: txTitle,
amount: txAmount,
date: DateTime.now(),
id: DateTime.now().toString());
setState(() {
_userTransactions.add(newTX);
});
}
void _startAddNewTransaction(BuildContext ctx) {
showModalBottomSheet(
context: ctx,
builder: (bCtx) {
return NewTransaction(_addNewTransaction);
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Flutter App'),
actions: [
IconButton(
icon: Icon(Icons.add),
onPressed: () => _startAddNewTransaction(context),
),
],
),
body: SingleChildScrollView(
child: Column(
// mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.stretch,
children: <Widget>[
Container(
width: double.infinity,
child: Card(
color: Colors.blue,
child: Text('CHART'),
elevation: 10,
),
),
TransactionList(_userTransactions),
]),
),
floatingActionButtonLocation: FloatingActionButtonLocation.endFloat,
floatingActionButton: FloatingActionButton(
child: Icon(Icons.add),
onPressed: () => _startAddNewTransaction(context),
),
);
}
}