Flutter 如何解决;ParentDataWidget的使用不正确。”;主要是飞镖

Flutter 如何解决;ParentDataWidget的使用不正确。”;主要是飞镖,flutter,flutter-layout,Flutter,Flutter Layout,我的main.dart如下所示: //main.dart import 'dart:io'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'src/loginPage.dart'; import 'src/tabsPage.dart'; void main() async { Widget _defaultPage = new LoginPage();

我的main.dart如下所示:

//main.dart
import 'dart:io';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'src/loginPage.dart';
import 'src/tabsPage.dart';

void main() async {
  Widget _defaultPage = new LoginPage();
  runApp(MyApp(defaultPage: _defaultPage));
}

class MyApp extends StatelessWidget {
  final Widget defaultPage;

  const MyApp({Key key, @required this.defaultPage}) : super(key: key);

  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Gaia',
      debugShowCheckedModeBanner: false,
      home: defaultPage,
      routes: <String, WidgetBuilder>{
        '/tabs': (BuildContext context) => new TabsPage(),
        '/login': (BuildContext context) => new LoginPage(),
      },
    );
  }
}

//LoginPage.dart
import 'package:flutter/material.dart';
import '../main.dart';

class LoginPage extends StatefulWidget {
  @override
  State<StatefulWidget> createState() => new _State();
}

class _State extends State<LoginPage> {
  TextEditingController userIdController = TextEditingController();
  TextEditingController passwordController = TextEditingController();

  void login() async {
     Navigator.of(context).pushReplacementNamed('/tabs');
  }

  void forgotPassword() {
    print("Forgot password!");
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        body: Padding(
            padding: EdgeInsets.all(10),
            child: ListView(
              children: <Widget>[
                Container(
                    alignment: Alignment.center,
                    padding: EdgeInsets.all(40),
                    child: Text(
                      'Gaia',
                      style: TextStyle(
                          color: Colors.blue,
                          fontWeight: FontWeight.w500,
                          fontSize: 30),
                    )),
                Container(
                  padding: EdgeInsets.all(10),
                  child: TextField(
                    style: TextStyle(fontSize: 25),
                    maxLength: 6,
                    keyboardType: TextInputType.number,
                    controller: userIdController,
                    decoration: InputDecoration(
                      border: OutlineInputBorder(),
                      labelText: 'User Id',
                      labelStyle: TextStyle(fontSize: 25),
                      counter: Spacer(),
                    ),
                  ),
                ),
                Container(
                  padding: EdgeInsets.fromLTRB(10, 10, 10, 0),
                  child: TextField(
                    style: TextStyle(fontSize: 25),
                    obscureText: true,
                    controller: passwordController,
                    decoration: InputDecoration(
                        border: OutlineInputBorder(),
                        labelText: 'password',
                        labelStyle: TextStyle(fontSize: 25)),
                  ),
                ),
                SizedBox(height: 50),
                Container(
                    padding: EdgeInsets.fromLTRB(100, 30, 100, 0),
                    child: RaisedButton(
                        child: Text(
                          'ログイン',
                          style: TextStyle(fontSize: 30),
                        ),
                        textColor: Colors.white,
                        color: Colors.blue,
                        onPressed: () {
                          login();
                        })),
                SizedBox(height: 120),
                FlatButton(
                  child: Text('Forgot password'),
                  onPressed: () {
                    forgotPassword();
                  },
                  textColor: Colors.blue,
                ),
                Container(
                  alignment: Alignment.center,
                  child: Text('Information'),
                ),
                Container(
                  alignment: Alignment.center,
                  child: Text('Here'),
                ),
              ],
            )));
  }
}
//main.dart
导入“dart:io”;
进口“包装:颤振/基础.dart”;
进口“包装:颤振/材料.省道”;
导入“src/loginPage.dart”;
导入“src/tabsPage.dart”;
void main()异步{
小部件_defaultPage=新登录页面();
runApp(MyApp(defaultPage:_defaultPage));
}
类MyApp扩展了无状态小部件{
最后一页;
const MyApp({Key Key,@required this.defaultPage}):super(Key:Key);
//此小部件是应用程序的根。
@凌驾
小部件构建(构建上下文){
返回材料PP(
标题:“盖亚”,
debugShowCheckedModeBanner:false,
主页:defaultPage,
路线:{
“/tabs”:(BuildContext上下文)=>new TabsPage(),
“/login”:(BuildContext上下文)=>new LoginPage(),
},
);
}
}
//登录页
进口“包装:颤振/材料.省道”;
导入“../main.dart”;
类LoginPage扩展StatefulWidget{
@凌驾
State createState()=>new_State();
}
类_状态扩展状态{
TextEditingController用户ID控制器=TextEditingController();
TextEditingController密码控制器=TextEditingController();
void login()异步{
Navigator.of(context.pushReplacementNamed('/tabs');
}
作废放弃密码(){
打印(“忘记密码!”);
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
主体:填充物(
填充:边缘设置。全部(10),
子:ListView(
儿童:[
容器(
对齐:对齐.center,
填充:边缘设置。全部(40),
子:文本(
“盖亚”,
样式:TextStyle(
颜色:颜色,蓝色,
fontWeight:fontWeight.w500,
尺寸:30),,
)),
容器(
填充:边缘设置。全部(10),
孩子:TextField(
样式:TextStyle(字体大小:25),
最大长度:6,
键盘类型:TextInputType.number,
控制器:userIdController,
装饰:输入装饰(
边框:OutlineInputBorder(),
labelText:“用户Id”,
标签样式:文本样式(字体大小:25),
计数器:垫片(),
),
),
),
容器(
填充:从LTRB(10,10,10,0)开始的边缘设置,
孩子:TextField(
样式:TextStyle(字体大小:25),
蒙昧文字:对,
控制器:密码控制器,
装饰:输入装饰(
边框:OutlineInputBorder(),
labelText:“密码”,
标签样式:文本样式(字体大小:25)),
),
),
尺寸箱(高度:50),
容器(
填充:从LTRB(100,30,100,0)开始的边缘设置,
孩子:升起按钮(
子:文本(
'ログイン',
样式:TextStyle(字体大小:30),
),
textColor:Colors.white,
颜色:颜色,蓝色,
已按下:(){
登录();
})),
尺寸箱(高度:120),
扁平按钮(
子项:文本(“忘记密码”),
已按下:(){
放弃密码();
},
textColor:Colors.blue,
),
容器(
对齐:对齐.center,
子项:文本(“信息”),
),
容器(
对齐:对齐.center,
child:Text('Here'),
),
],
)));
}
}
当我运行显示警告消息的程序时,我可以解决什么问题

════════ Exception caught by widgets library ═══════════════════════════════════
The following assertion was thrown while applying parent data.:
Incorrect use of ParentDataWidget.

The ParentDataWidget Expanded(flex: 1) wants to apply ParentData of type FlexParentData to a RenderObject, which has been set up to accept ParentData of incompatible type BoxParentData.

Usually, this means that the Expanded widget has the wrong ancestor RenderObjectWidget. Typically, Expanded widgets are placed directly inside Flex widgets.
The offending Expanded is currently placed inside a _Decorator widget.

The ownership chain for the RenderObject that received the incompatible parent data was:
  SizedBox.shrink ← Expanded ← Spacer ← _Decorator ← InputDecorator ← AnimatedBuilder ← _PointerListener ← Listener ← RawGestureDetector ← TextSelectionGestureDetector ← ⋯
When the exception was thrown, this was the stack
#0      RenderObjectElement._updateParentData.<anonymous closure>
package:flutter/…/widgets/framework.dart:5770
#1      RenderObjectElement._updateParentData
package:flutter/…/widgets/framework.dart:5786
#2      RenderObjectElement.attachRenderObject
package:flutter/…/widgets/framework.dart:5808
#3      RenderObjectElement.mount
package:flutter/…/widgets/framework.dart:5501
#4      SingleChildRenderObjectElement.mount
package:flutter/…/widgets/framework.dart:6117
...
════════ widgets库捕获到异常═══════════════════════════════════
应用父数据时引发了以下断言:
ParentDataWidget的使用不正确。
已扩展的ParentDataWidget(flex:1)希望将FlexParentData类型的ParentData应用于RenderObject,该RenderObject已设置为接受不兼容类型BoxParentData的ParentData。
通常,这意味着扩展的小部件具有错误的RenderObjectWidget祖先。通常,扩展的小部件直接放在Flex小部件中。
有问题的扩展当前放置在_Decorator小部件中。
接收不兼容父数据的RenderObject的所有权链为:
SizedBox.shrink← 扩大← 间隔棒← _室内装修设计师← 输入装饰器← 动画生成器← _指针侦听器← 听众← 罗氏消化检测器← 文本选择手势检测器← ⋯
当抛出异常时,这是堆栈
#0 RenderObjectElement.\u updateParentData。
包:flatter/../widgets/framework.dart:5770
#1 RenderObjectElement.\u updateParentData
包:flatter/../widgets/framework.dart:5786
#2 RenderObjectElement.attachRenderObject
包:flatter/../widgets/framework.dart:5808
#3 RenderObjectElement.mount
包:flatter/../widgets/framework.dart:5501
#4 SingleChildRenderObjectElement.mount
包:flatter/../widgets/framework.dart:6117
...

能否请您共享LoginPage()的代码更新了我的代码。错误是由于扩展了小部件,但登录页面不包含任何扩展的小部件,您是否在TabsPage()中使用了此小部件?试着用co包装