ParentDataWidget用于定位颤振的使用不正确



我的代码是

Widget build(BuildContext context) {
return WillPopScope(
onWillPop: Helper.of(context).onWillPop,
child: Scaffold(
key: _con.scaffoldKey,
resizeToAvoidBottomInset: true,
body: SingleChildScrollView(
child: Column(
children: <Widget>[
SizedBox(height: 60),
Center(
child: Image.asset(
'assets/img/villa_logo-transparent.png',
width: 230.0,
height: 230.0,
),
),
Stack(
children: [
createTextForm()
],
),
]),
),
),
);
}

这就是我创建文本表单的方式

Widget createTextForm() {
return  Positioned(
// top: config.App(context).appHeight(29.5) - 50,
child: Container(
// decoration: BoxDecoration(
//     color: Theme.of(context).primaryColor,
//     borderRadius: BorderRadius.all(Radius.circular(10)),
//     boxShadow: [
//       BoxShadow(
//         blurRadius: 50,
//         color: Theme.of(context).hintColor.withOpacity(0.2),
//       )
//     ]),
margin: EdgeInsets.symmetric(
horizontal: 20,
),
padding: EdgeInsets.symmetric(vertical: 2, horizontal: 27),
width: config.App(context).appWidth(88),
// height: config.App(context).appHeight(70),
// height: config.App(context).appHeight(80),
child: Form(
key: _con.loginFormKey,
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
TextFormField(
keyboardType: TextInputType.text,
onSaved: (input) => _con.user.name = input,
validator: (input) => input.length < 3
? S.of(context).should_be_more_than_3_letters
: null,
decoration: InputDecoration(
labelText: S.of(context).full_name,
labelStyle: TextStyle(color: Theme.of(context).accentColor),
contentPadding: EdgeInsets.all(12),
hintText: S.of(context).john_doe,
hintStyle: TextStyle(
color: Theme.of(context).focusColor.withOpacity(0.7)),
prefixIcon: Icon(Icons.person_outline,
color: Theme.of(context).accentColor),
border: OutlineInputBorder(
borderSide: BorderSide(
color:
Theme.of(context).focusColor.withOpacity(0.2))),
focusedBorder: OutlineInputBorder(
borderSide: BorderSide(
color:
Theme.of(context).focusColor.withOpacity(0.5))),
enabledBorder: OutlineInputBorder(
borderRadius: BorderRadius.all(Radius.circular(20)),
borderSide: BorderSide(
color:
Theme.of(context).focusColor.withOpacity(0.2))),
),
),
SizedBox(height: 30),
TextFormField(
keyboardType: TextInputType.phone,
onSaved: (input) => _con.user.phone = input,
validator: (input) => input.length < 3
? S.of(context).should_be_more_than_3_letters
: null,
decoration: InputDecoration(
labelText: "Phone Number",
labelStyle: TextStyle(color: Theme.of(context).accentColor),
contentPadding: EdgeInsets.all(12),
hintText: "+1 234 56789",
hintStyle: TextStyle(
color: Theme.of(context).focusColor.withOpacity(0.7)),
prefixIcon: Icon(Icons.person_outline,
color: Theme.of(context).accentColor),
border: OutlineInputBorder(
borderSide: BorderSide(
color:
Theme.of(context).focusColor.withOpacity(0.2))),
focusedBorder: OutlineInputBorder(
borderSide: BorderSide(
color:
Theme.of(context).focusColor.withOpacity(0.5))),
enabledBorder: OutlineInputBorder(
borderRadius: BorderRadius.all(Radius.circular(20)),
borderSide: BorderSide(
color:
Theme.of(context).focusColor.withOpacity(0.2))),
),
),
SizedBox(height: 30),
TextFormField(
keyboardType: TextInputType.emailAddress,
onSaved: (input) => _con.user.email = input,
validator: (input) => !input.contains('@')
? S.of(context).should_be_a_valid_email
: null,
decoration: InputDecoration(
labelText: S.of(context).email,
labelStyle: TextStyle(color: Theme.of(context).accentColor),
contentPadding: EdgeInsets.all(12),
hintText: '',
hintStyle: TextStyle(
color: Theme.of(context).focusColor.withOpacity(0.7)),
prefixIcon: Icon(Icons.alternate_email,
color: Theme.of(context).accentColor),
border: OutlineInputBorder(
borderSide: BorderSide(
color:
Theme.of(context).focusColor.withOpacity(0.2))),
focusedBorder: OutlineInputBorder(
borderSide: BorderSide(
color:
Theme.of(context).focusColor.withOpacity(0.5))),
enabledBorder: OutlineInputBorder(
borderRadius: BorderRadius.all(Radius.circular(20)),
borderSide: BorderSide(
color:
Theme.of(context).focusColor.withOpacity(0.2))),
),
),
SizedBox(height: 30),
TextFormField(
obscureText: _con.hidePassword,
onSaved: (input) => _con.user.password = input,
validator: (input) => input.length < 6
? S.of(context).should_be_more_than_6_letters
: null,
decoration: InputDecoration(
labelText: S.of(context).password,
labelStyle: TextStyle(color: Theme.of(context).accentColor),
contentPadding: EdgeInsets.all(12),
hintText: '••••••••••••',
hintStyle: TextStyle(
color: Theme.of(context).focusColor.withOpacity(0.7)),
prefixIcon: Icon(Icons.lock_outline,
color: Theme.of(context).accentColor),
suffixIcon: IconButton(
onPressed: () {
setState(() {
_con.hidePassword = !_con.hidePassword;
});
},
color: Theme.of(context).focusColor,
icon: Icon(_con.hidePassword
? Icons.visibility
: Icons.visibility_off),
),
border: OutlineInputBorder(
borderSide: BorderSide(
color:
Theme.of(context).focusColor.withOpacity(0.2))),
focusedBorder: OutlineInputBorder(
borderSide: BorderSide(
color:
Theme.of(context).focusColor.withOpacity(0.5))),
enabledBorder: OutlineInputBorder(
borderRadius: BorderRadius.all(Radius.circular(20)),
borderSide: BorderSide(
color:
Theme.of(context).focusColor.withOpacity(0.2))),
),
),
SizedBox(height: 30),
registerButtonCall(),
bottomLoginText(),

],
),
),
),
);
//
// ]);
}

错误应用父数据时引发了以下断言。:I/flutter(21259):ParentDataWidget的使用不正确。I/flutter(21259):定位的ParentDataWidget(底部:10.0)希望将StackParentData类型的ParentData应用于I/flutter(21259):RenderObject,已设置为接受不兼容类型FlexParentData的ParentData。I/flutter(21259):通常,这意味着Positioned小部件具有错误的祖先RenderObjectWidget。典型的I/flutter(21259):定位的窗口小部件直接放置在Stack窗口小部件内。I/flutter(21259):有问题的Positioned当前被放置在Column小部件中。I/flutter(21259):接收到不兼容父数据的RenderObject的所有权链为:I/flutter(21259):语义←RawMaterial按钮←FlatButton←已定位←柱← _FormScope←WillPopScope←I/flutter(21259):表单-[LabeledGlobalKey#ea070]←衬料←约束框← ⋯I/flutter(21259):I/flutter(21259):当抛出异常时,这是堆栈:I/flutter(21259):#0 RenderObjectElement_updateParentData。(包:flutter/src/widgets/framework。dart:5770:11)I/flutter(21259):#1 RenderObjectElement_updateParentData(包:flutter/src/widgets/framework。dart:5786:6)I/flutter(21259):#2 RenderObjectElement.attachRenderObject(包:flutter/src/widgets/framework.dart:5808:7)I/flutter(21259):#3 RenderObjectElement.mount(包:flutter/src/widgets/framework。dart:5501:5)I/flutter(21259):#4 SingleChildRenderObjectElement.mount(包:flutter/src/widgets/framework。dart:6117:11)I/flutter(21259):。。。正常元件安装(21个框架)I/flutter(21259):#25 Element.inflateWidget(包:flutter/src/widgets/framework。dart:3569:14)I/flutter(21259):#26 MultiChildRenderObjectElement.mount(包:flutter/src/widgets/framework。dart:6236:32)I/flutter(21259):。。。正常元件安装(44个框架)I/flutter(21259):#70 Element.inflateWidget(包:flutter/src/widgets/framework.dart:3569:14)I/flutter(21259):#71 MultiChildRenderObjectElement.mount(包:flutter/src/widgets/framework。dart:6236:32)I/flutter(21259):#72 Element.inflateWidget(包:flutter/src/widgets/framework。dart:3569:14)I/flutter(21259):#73 MultiChildRenderObjectElement.mount(包:flutter/src/widgets/framework。dart:6236:32)I/flutter(21259):。。。正常元件安装(109个框架)I/flutter(21259):#182 Element.inflateWidget(包:flutter/src/widgets/framework.dart:3569:14)I/flutter(21259):#183 MultiChildRenderObjectElement.mount(包:flutter/src/widgets/framework。dart:6236:32)I/flutter(21259):。。。正常元件安装(218个框架)I/flutter(21259):#401 Element.inflateWidget(包:flutter/src/widgets/framework.dart:3569:14)I/flutter(21259):#402 Element.updateChild(包:flutter/src/widgets/framework.dart:3327:18)I/flutter(21259):#403 RenderObjectElement.updateChildren(包:flutter/src/widgets/framework.dart:5705:32)I/flutter(21259):#404 MultiChildRenderObjectElement.update(包:flutter/src/widgets/framework。dart:6246:17)I/flutter(21259):#405 Element.updateChild(包:flutter/src/widgets/framework.dart:3314:15)I/flutter(21259):#406 ComponentElement.performRebuild(包:flutter/src/widgets/framework。dart:4652:16)I/flutter(21259):#407 StatefulElement.performRebuild(包:flutter/src/widgets/framework.dart:4800:11)I/flutter(21259):#408 Element.rebuild(包:flutter/src/widgets/framework。dart:4343:5)I/flutter(21259):#409 StatefulElement.update(包:flutter/src/widgets/framework.dart:4832:5)I/flutter(21259):#410 Element.updateChild(包:flutter/src/widgets/framework.dart:3314:15)I/flutter(21259):#411 ComponentElement.performalRebuild(包:flutter/src/widgets/framework。dart:4652:16)I/flutter(21259):#412 Element.rebuild(包:flutter/src/widgets/framework。dart:4343:5)I/flutter(21259):#413 ProxyElement.update(包:flutter/src/widgets/framework.dart:4987:5)I/flutter(21259):#414 _InitheritedNotificationerElement.update(包:flutter/src/widgets/inherited_notifier.dart:183:11)I/flutter(21259):#415 Element.updateChild(包:flutter/src/widgets/framework.dart:3314:15)I/flutter(21259):#416 SingleChildRenderObjectElement.update(包:flutter/src/widgets/framework。dart:6125:14)I/flutter(21259):#417Element.updateChild(包:flutter/src/widgets/framework.dart:3314:15)I/flutter(21259):#418 ComponentElement.performalRebuild(包:flutter/src/widgets/framework。dart:4652:16)I/flutter(21259):#419 StatefulElement.performRebuild(包:flutter/src/widgets/framework.dart:4800:11)I/flutter(21259):#420 Element.rebuild(包:flutter/src/widgets/framework。dart:4343:5)I/flutter(21259):#421 StatefulElement.update(包:flutter/src/widgets/framework.dart:4832:5)I/flutter(21259):#422 Element.updateChild(包:flutter/src/widgets/framework.dart:3314:15)I/flutter(21259):#423 SingleChildRenderObjectElement.update(包:flutter/src/widgets/framework。dart:6125:14)I/flutter(21259):#424Element.updateChild(包:flutter/src/widgets/framework.dart:3314:15)I/flutter(21259):#425 SingleChildRenderObjectElement.update(包:flutter/src/widgets/framework。dart:6125:14)I/flutter(21259):#426 Element.updateChild(包:flutter/src/widgets/framework.dart:3314:15)I/flutter(21259):#427 ComponentElement.performRebuild(包:flutter/src/widgets/framework。dart:4652:16)I/flutter(21259):#428 Element.rebuild(包:flutter/src/widgets/framework。dart:4343:5)I/flutter(21259):#429 StatelessElement.update(包:flutter/src/widgets/framework.dart:4708:5)I/flutter(21259):#430 Element.updateChild(包:flutter/src/widgets/framework.dart:3314:15)I/flutter(21259):#431 ComponentElement.performRebuild(包:flutter/src/widgets/framework。dart:4652:16)I/flutter(21259):#432 Element.rebuild(包:flutter/src/widgets/framework。dart:4343:5)I/flutter(21259):#433 ProxyElement.update(软件包:flutter/src/widgets/framework。dart:4987:5)I/flutter(21259):#434Element.updateChild(包:flutter/src/widgets/framework.dart:3314:15)I/flutter(21259):#435 ComponentElement.performalRebuild(包:flutter/src/widgets/framework。dart:4652:16)I/flutter(21259):#436StatefulElement.performRebuild(包:flutter/src/widgets/framework.dart:4800:11)I/flutter(21259):#437Element.rebuild(包:flutter/src/widgets/framework.dart:4343:5)I/flutter(21259):#438 BuildOwner.buildScope(包:flutter/src/widgets/framework.dart:2730:33)I/flutter(21259):#439 WidgetsBinding.drawFrame(包:flutter/src/widgets/binding.dart:913:20)I/flutter(21259):#440 RendererBinding_handlePersistentFrameCallback(包:flutter/src/rendering/binding。dart:302:5)I/flutter(21259):#441 SchedulerBinding_invokeFrameCallback(包:flutter/src/schedur/binding.dart:1117:15)I/flutter(21259):#442-SchedulerBinding.handleDrawFrame(包:flutter/src/schedur/binding.dart:1055:9)I/flutter(21259):#443 SchedulerBinding_handleDrawFrame(包:flutter/src/schedur/binding.dart:971:5)I/flutter(21259):#447_invoke(镖:ui/钩。镖:251:10)I/flutter(21259):#448_drawFrame(省道:ui/钩。省道:209:3)I/flutter(21259):(从dart中删除3帧:async)I/flutter(21259):════════════════════════════════════════════════════════════════════════════════════════════════════I/flutter(21259):引发了另一个异常:异常:无效的图像数据

您的Positioned小部件必须直接Stack内,而不是在另一个返回Positioned的小部件内。

Stack(
children: [
Positioned(
child: TextForm()
)
],
),

这只是Flutter进行错误检查的方式,以确保Positioned仅在Stack内部使用。

Expanded&Flexible小部件只能直接在RowColumn内部使用,不能被任何其他小部件包装。

最新更新