Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.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 手势捕捉到异常,未找到MediaQuery小部件。MyHomePage小部件需要MediaQuery小部件祖先_Flutter_Dart - Fatal编程技术网

Flutter 手势捕捉到异常,未找到MediaQuery小部件。MyHomePage小部件需要MediaQuery小部件祖先

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';

我试图添加一个底部模型表,以在事务列表中添加新的事务,我遵循,这就是我得到的错误,我在这里缺少什么

这是我的主.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),
          ),
        );
      }
    }