我在用dart创建TextFeild时遇到解决Redering问题的问题。
通过简短的搜索,我发现最好将上述小部件放入容器中,尽管它不能帮助解决该问题。
我在用dart创建TextFeild时遇到解决Redering问题的问题。
通过简短的搜索,我发现最好将上述小部件放入容器中,尽管它不能帮助解决该问题。
主屏幕类:
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:notifier_demo/models/user.dart';
class TextFieldComp extends StatefulWidget{
User _user;
TextFieldComp(User user) {
_user=user;
}
@override
_TextFieldCompState createState() => _TextFieldCompState();
}
class _TextFieldCompState extends State<TextFieldComp> {
@override
Widget build(BuildContext context) {
// TODO: implement build
return Column(
children: <Widget>[
Container(
child: TextFormField(
decoration: InputDecoration(labelText: 'First Name'),
validator: (value) {
if (value.isEmpty)
return "Please insert Value";
else
return null;
},
onSaved: (val) =>
setState(() => widget._user.firstName = val)
)
),
Container(
child: TextFormField(
decoration: InputDecoration(labelText: 'Last Name'),
validator: (value) {
if (value.isEmpty)
return "Please insert Value";
else
return null;
},
onSaved: (val) =>
setState(() => widget._user.lastName = val)
),
),
],
);
}
}
TextFeild类:
I/flutter ( 9200): ══╡ EXCEPTION CAUGHT BY RENDERING LIBRARY ╞═════════════════════════════════════════════════════════
I/flutter ( 9200): The following assertion was thrown during performLayout():
I/flutter ( 9200): RenderFlex children have non-zero flex but incoming height constraints are unbounded.
I/flutter ( 9200): When a column is in a parent that does not provide a finite height constraint, for example if it is
I/flutter ( 9200): in a vertical scrollable, it will try to shrink-wrap its children along the vertical axis. Setting a
I/flutter ( 9200): flex on a child (e.g. using Expanded) indicates that the child is to expand to fill the remaining
I/flutter ( 9200): space in the vertical direction.
I/flutter ( 9200): These two directives are mutually exclusive. If a parent is to shrink-wrap its child, the child
I/flutter ( 9200): cannot simultaneously expand to fit its parent.
I/flutter ( 9200): Consider setting mainAxisSize to MainAxisSize.min and using FlexFit.loose fits for the flexible
I/flutter ( 9200): children (using Flexible rather than Expanded). This will allow the flexible children to size
I/flutter ( 9200): themselves to less than the infinite remaining space they would otherwise be forced to take, and
I/flutter ( 9200): then will cause the RenderFlex to shrink-wrap the children rather than expanding to fit the maximum
I/flutter ( 9200): constraints provided by the parent.
I/flutter ( 9200): If this message did not help you determine the problem, consider using debugDumpRenderTree():
I/flutter ( 9200): https://flutter.dev/debugging/#rendering-layer
I/flutter ( 9200): http://api.flutter.dev/flutter/rendering/debugDumpRenderTree.html
I/flutter ( 9200): The affected RenderFlex is:
I/flutter ( 9200): RenderFlex#6a02e relayoutBoundary=up12 NEEDS-LAYOUT NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE(creator: Column ← _SingleChildViewport ← IgnorePointer-[GlobalKey#30dc5] ← Semantics ← _PointerListener ← Listener ← _GestureSemantics ← RawGestureDetector-[LabeledGlobalKey<RawGestureDetectorState>#7b5bd] ← _PointerListener ← Listener ← _ScrollableScope ← _ScrollSemantics-[GlobalKey#2b979] ← ⋯, parentData: <none> (can use size), constraints: BoxConstraints(0.0<=w<=422.7, 0.0<=h<=Infinity), size: MISSING, direction: vertical, mainAxisAlignment: start, mainAxisSize: max, crossAxisAlignment: stretch, verticalDirection: down)
I/flutter ( 9200): The creator information is set to:
I/flutter ( 9200): Column ← _SingleChildViewport ← IgnorePointer-[GlobalKey#30dc5] ← Semantics ← _PointerListener ←
I/flutter ( 9200): Listener ← _GestureSemantics ←
I/flutter ( 9200): RawGestureDetector-[LabeledGlobalKey<RawGestureDetectorState>#7b5bd] ← _PointerListener ← Listener
I/flutter ( 9200): ← _ScrollableScope ← _ScrollSemantics-[GlobalKey#2b979] ← ⋯
I/flutter ( 9200): The nearest ancestor providing an unbounded width constraint is: _RenderSingleChildViewport#e33e5 relayoutBoundary=up11 NEEDS-LAYOUT NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE:
I/flutter ( 9200): needs compositing
I/flutter ( 9200): creator: _SingleChildViewport ← IgnorePointer-[GlobalKey#30dc5] ← Semantics ← _PointerListener ←
I/flutter ( 9200): Listener ← _GestureSemantics ←
I/flutter ( 9200): RawGestureDetector-[LabeledGlobalKey<RawGestureDetectorState>#7b5bd] ← _PointerListener ← Listener
I/flutter ( 9200): ← _ScrollableScope ← _ScrollSemantics-[GlobalKey#2b979] ← RepaintBoundary ← ⋯
I/flutter ( 9200): parentData: <none> (can use size)
I/flutter ( 9200): constraints: BoxConstraints(0.0<=w<=422.7, 0.0<=h<=749.5)
I/flutter ( 9200): size: MISSING
I/flutter ( 9200): See also: https://flutter.dev/layout/
I/flutter ( 9200): If none of the above helps enough to fix this problem, please don't hesitate to file a bug:
I/flutter ( 9200): https://github.com/flutter/flutter/issues/new?template=BUG.md
I/flutter ( 9200):
I/flutter ( 9200): User-created ancestor of the error-causing widget was:
I/flutter ( 9200): SingleChildScrollView
I/flutter ( 9200): file:///C:/Users/omer/AndroidStudioProjects/clima_flutter_app/notifier_demo/lib/screens/home_material_screen.dart:28:24
I/flutter ( 9200):
I/flutter ( 9200): When the exception was thrown, this was the stack:
I/flutter ( 9200): #0 RenderFlex.performLayout.<anonymous closure> (package:flutter/src/rendering/flex.dart:691:11)
I/flutter ( 9200): #1 RenderFlex.performLayout (package:flutter/src/rendering/flex.dart:718:10)
I/flutter ( 9200): #2 RenderObject.layout (package:flutter/src/rendering/object.dart:1701:7)
I/flutter ( 9200): #3 _RenderSingleChildViewport.performLayout (package:flutter/src/widgets/single_child_scroll_view.dart:497:13)
I/flutter ( 9200): #4 RenderObject.layout (package:flutter/src/rendering/object.dart:1701:7)
I/flutter ( 9200): #5 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
I/flutter ( 9200): #6 RenderObject.layout (package:flutter/src/rendering/object.dart:1701:7)
I/flutter ( 9200): #7 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
I/flutter ( 9200): #8 RenderObject.layout (package:flutter/src/rendering/object.dart:1701:7)
I/flutter ( 9200): #9 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
I/flutter ( 9200): #10 RenderObject.layout (package:flutter/src/rendering/object.dart:1701:7)
I/flutter ( 9200): #11 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
I/flutter ( 9200): #12 RenderObject.layout (package:flutter/src/rendering/object.dart:1701:7)
I/flutter ( 9200): #13 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
I/flutter ( 9200): #14 RenderObject.layout (package:flutter/src/rendering/object.dart:1701:7)
I/flutter ( 9200): #15 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
I/flutter ( 9200): #16 RenderObject.layout (package:flutter/src/rendering/object.dart:1701:7)
I/flutter ( 9200): #17 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
I/flutter ( 9200): #18 RenderObject.layout (package:flutter/src/rendering/object.dart:1701:7)
I/flutter ( 9200): #19 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
I/flutter ( 9200): #20 RenderObject.layout (package:flutter/src/rendering/object.dart:1701:7)
I/flutter ( 9200): #21 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
I/flutter ( 9200): #22 RenderObject.layout (package:flutter/src/rendering/object.dart:1701:7)
I/flutter ( 9200): #23 RenderPadding.performLayout (package:flutter/src/rendering/shifted_box.dart:206:11)
I/flutter ( 9200): #24 RenderObject.layout (package:flutter/src/rendering/object.dart:1701:7)
I/flutter ( 9200): #25 MultiChildLayoutDelegate.layoutChild (package:flutter/src/rendering/custom_layout.dart:142:11)
I/flutter ( 9200): #26 _ScaffoldLayout.performLayout (package:flutter/src/material/scaffold.dart:444:7)
I/flutter ( 9200): #27 MultiChildLayoutDelegate._callPerformLayout (package:flutter/src/rendering/custom_layout.dart:212:7)
I/flutter ( 9200): #28 RenderCustomMultiChildLayoutBox.performLayout (package:flutter/src/rendering/custom_layout.dart:356:14)
I/flutter ( 9200): #29 RenderObject.layout (package:flutter/src/rendering/object.dart:1701:7)
I/flutter ( 9200): #30 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
I/flutter ( 9200): #31 RenderObject.layout (package:flutter/src/rendering/object.dart:1701:7)
I/flutter ( 9200): #32 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
I/flutter ( 9200): #33 _RenderCustomClip.performLayout (package:flutter/src/rendering/proxy_box.dart:1232:11)
I/flutter ( 9200): #34 RenderObject.layout (package:flutter/src/rendering/object.dart:1701:7)
I/flutter ( 9200): #35 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
I/flutter ( 9200): #36 RenderObject.layout (package:flutter/src/rendering/object.dart:1701:7)
I/flutter ( 9200): #37 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
I/flutter ( 9200): #38 RenderObject.layout (package:flutter/src/rendering/object.dart:1701:7)
I/flutter ( 9200): #39 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
I/flutter ( 9200): #40 RenderObject.layout (package:flutter/src/rendering/object.dart:1701:7)
I/flutter ( 9200): #41 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
I/flutter ( 9200): #42 RenderObject.layout (package:flutter/src/rendering/object.dart:1701:7)
I/flutter ( 9200): #43 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
I/flutter ( 9200): #44 RenderObject.layout (package:flutter/src/rendering/object.dart:1701:7)
I/flutter ( 9200): #45 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
I/flutter ( 9200): #46 RenderObject.layout (package:flutter/src/rendering/object.dart:1701:7)
I/flutter ( 9200): #47 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
I/flutter ( 9200): #48 RenderObject.layout (package:flutter/src/rendering/object.dart:1701:7)
I/flutter ( 9200): #49 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
I/flutter ( 9200): #50 RenderOffstage.performLayout (package:flutter/src/rendering/proxy_box.dart:3140:13)
I/flutter ( 9200): #51 RenderObject.layout (package:flutter/src/rendering/object.dart:1701:7)
I/flutter ( 9200): #52 RenderStack.performLayout (package:flutter/src/rendering/stack.dart:510:15)
I/flutter ( 9200): #53 RenderObject.layout (package:flutter/src/rendering/object.dart:1701:7)
I/flutter ( 9200): #54 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
I/flutter ( 9200): #55 RenderObject.layout (package:flutter/src/rendering/object.dart:1701:7)
I/flutter ( 9200): #56 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
I/flutter ( 9200): #57 RenderObject.layout (package:flutter/src/rendering/object.dart:1701:7)
I/flutter ( 9200): #58 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
I/flutter ( 9200): #59 RenderObject.layout (package:flutter/src/rendering/object.dart:1701:7)
I/flutter ( 9200): #60 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
I/flutter ( 9200): #61 RenderObject.layout (package:flutter/src/rendering/object.dart:1701:7)
I/flutter ( 9200): #62 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
I/flutter ( 9200): #63 RenderObject.layout (package:flutter/src/rendering/object.dart:1701:7)
I/flutter ( 9200): #64 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
I/flutter ( 9200): #65 RenderObject.layout (package:flutter/src/rendering/object.dart:1701:7)
I/flutter ( 9200): #66 RenderView.performLayout (package:flutter/src/rendering/view.dart:152:13)
I/flutter ( 9200): #67 RenderObject._layoutWithoutResize (package:flutter/src/rendering/object.dart:1578:7)
I/flutter ( 9200): #68 PipelineOwner.flushLayout (package:flutter/src/rendering/object.dart:844:18)
I/flutter ( 9200): #69 RendererBinding.drawFrame (package:flutter/src/rendering/binding.dart:341:19)
I/flutter ( 9200): #70 WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:761:13)
I/flutter ( 9200): #71 RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:280:5)
I/flutter ( 9200): #72 SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1033:15)
I/flutter ( 9200): #73 SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:975:9)
I/flutter ( 9200): #74 SchedulerBinding.scheduleWarmUpFrame.<anonymous closure> (package:flutter/src/scheduler/binding.dart:784:7)
I/flutter ( 9200): #83 _Timer._runTimers (dart:isolate-patch/timer_impl.dart:382:19)
I/flutter ( 9200): #84 _Timer._handleMessage (dart:isolate-patch/timer_impl.dart:416:5)
I/flutter ( 9200): #85 _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:172:12)
I/flutter ( 9200): (elided 8 frames from package dart:async and package dart:async-patch)
I/flutter ( 9200):
I/flutter ( 9200): The following RenderObject was being processed when the exception was fired: RenderFlex#6a02e relayoutBoundary=up12 NEEDS-LAYOUT NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE:
I/flutter ( 9200): creator: Column ← _SingleChildViewport ← IgnorePointer-[GlobalKey#30dc5] ← Semantics ←
I/flutter ( 9200): _PointerListener ← Listener ← _GestureSemantics ←
I/flutter ( 9200): RawGestureDetector-[LabeledGlobalKey<RawGestureDetectorState>#7b5bd] ← _PointerListener ← Listener
I/flutter ( 9200): ← _ScrollableScope ← _ScrollSemantics-[GlobalKey#2b979] ← ⋯
I/flutter ( 9200): parentData: <none> (can use size)
I/flutter ( 9200): constraints: BoxConstraints(0.0<=w<=422.7, 0.0<=h<=Infinity)
I/flutter ( 9200): size: MISSING
I/flutter ( 9200): direction: vertical
I/flutter ( 9200): mainAxisAlignment: start
I/flutter ( 9200): mainAxisSize: max
I/flutter ( 9200): crossAxisAlignment: stretch
I/flutter ( 9200): verticalDirection: down
I/flutter ( 9200): This RenderObject had the following descendants (showing up to depth 5):
I/flutter ( 9200): child 1: RenderFlex#e703f NEEDS-LAYOUT NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
I/flutter ( 9200): child 1: RenderSemanticsAnnotations#65551 NEEDS-LAYOUT NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
I/flutter ( 9200): child: RenderMouseRegion#4ff1d NEEDS-LAYOUT NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
I/flutter ( 9200): child: RenderIgnorePointer#2bb3e NEEDS-LAYOUT NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
I/flutter ( 9200): child: RenderPointerListener#20294 NEEDS-LAYOUT NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
I/flutter ( 9200): child 2: RenderSemanticsAnnotations#06bc1 NEEDS-LAYOUT NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
I/flutter ( 9200): child: RenderMouseRegion#57aa7 NEEDS-LAYOUT NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
I/flutter ( 9200): child: RenderIgnorePointer#7eca8 NEEDS-LAYOUT NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
I/flutter ( 9200): child: RenderPointerListener#fa0bd NEEDS-LAYOUT NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
I/flutter ( 9200): child 2: RenderPadding#7190e NEEDS-LAYOUT NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
I/flutter ( 9200): child: RenderLimitedBox#1277a NEEDS-LAYOUT NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
I/flutter ( 9200): child: RenderConstrainedBox#e1fb0 NEEDS-LAYOUT NEEDS-PAINT
I/flutter ( 9200): child 3: RenderMergeSemantics#583ac NEEDS-LAYOUT NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
I/flutter ( 9200): child: RenderMouseRegion#545d8 NEEDS-LAYOUT NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
I/flutter ( 9200): child: RenderSemanticsGestureHandler#93036 NEEDS-LAYOUT NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
I/flutter ( 9200): child: RenderPointerListener#56f31 NEEDS-LAYOUT NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
I/flutter ( 9200): child: RenderSemanticsAnnotations#13b79 NEEDS-LAYOUT NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
I/flutter ( 9200): child 4: RenderMergeSemantics#43d98 NEEDS-LAYOUT NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
I/flutter ( 9200): child: RenderMouseRegion#75318 NEEDS-LAYOUT NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
I/flutter ( 9200): child: RenderSemanticsGestureHandler#0566c NEEDS-LAYOUT NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
I/flutter ( 9200): child: RenderPointerListener#a678e NEEDS-LAYOUT NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
I/flutter ( 9200): child: RenderSemanticsAnnotations#b65af NEEDS-LAYOUT NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
I/flutter ( 9200): child 5: RenderMergeSemantics#1223e NEEDS-LAYOUT NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
I/flutter ( 9200): child: RenderMouseRegion#99b6f NEEDS-LAYOUT NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
I/flutter ( 9200): child: RenderSemanticsGestureHandler#cb1e4 NEEDS-LAYOUT NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
I/flutter ( 9200): child: RenderPointerListener#5cb96 NEEDS-LAYOUT NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
I/flutter ( 9200): child: RenderSemanticsAnnotations#d0902 NEEDS-LAYOUT NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
I/flutter ( 9200): ════════════════════════════════════════════════════════════════════════════════════════════════════
日志:
{{1}}
答案 0 :(得分:1)
您可以在下面复制粘贴运行完整代码
在Scaffold
和TextFieldComp
中使用Flexible
并使用Expanded flex
来控制其他人
代码段
return Container(
child: Column(
children: <Widget>[
Flexible(
child: TextFormField(
decoration: InputDecoration(labelText: 'First Name'),
工作演示
完整的测试代码
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
// This is the theme of your application.
//
// Try running your application with "flutter run". You'll see the
// application has a blue toolbar. Then, without quitting the app, try
// changing the primarySwatch below to Colors.green and then invoke
// "hot reload" (press "r" in the console where you ran "flutter run",
// or simply save your changes to "hot reload" in a Flutter IDE).
// Notice that the counter didn't reset back to zero; the application
// is not restarted.
primarySwatch: Colors.blue,
),
home: HomeMaterialScreen(),
);
}
}
class HomeMaterialScreen extends StatefulWidget {
@override
_HomeMaterialScreenState createState() => _HomeMaterialScreenState();
}
class _HomeMaterialScreenState extends State<HomeMaterialScreen> {
User _user;
final _formKey = GlobalKey<FormState>();
List<User> userList = [
User(firstName: "abc", lastName: "def", newsletter: true),
User(firstName: "123", lastName: "456", newsletter: false),
User(firstName: "1", lastName: "456", newsletter: false),
User(firstName: "2", lastName: "456", newsletter: false),
User(firstName: "3", lastName: "456", newsletter: false),
User(firstName: "4", lastName: "456", newsletter: false),
User(firstName: "5", lastName: "456", newsletter: false),
User(firstName: "6", lastName: "456", newsletter: false),
User(firstName: "1a", lastName: "456", newsletter: false),
User(firstName: "2a", lastName: "456", newsletter: false),
User(firstName: "3a", lastName: "456", newsletter: false),
User(firstName: "4a", lastName: "456", newsletter: false),
User(firstName: "5a", lastName: "456", newsletter: false),
User(firstName: "6a", lastName: "456", newsletter: false),
];
@override
void initState() {
// TODO: implement initState
super.initState();
_user = new User(newsletter: false);
}
@override
Widget build(BuildContext context) {
//UserNotifier userNotifier= Provider.of<UserNotifier>(context);
return Scaffold(
appBar: AppBar(
title: Text('Profile'),
),
body: Container(
height: MediaQuery.of(context).size.height,
padding: const EdgeInsets.symmetric(vertical: 16, horizontal: 16),
child: Builder(
builder: (context) => Form(
key: _formKey,
child: SingleChildScrollView(
child: Container(
height: MediaQuery.of(context).size.height,
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: <Widget>[
Flexible(child: TextFieldComp(_user)),
Container(
padding: const EdgeInsets.fromLTRB(0, 50, 0, 20),
),
SwitchListTile(
title: const Text('Monthly newsletter'),
value: false,
onChanged: (bool val) =>
setState(() => _user.newsletter = val),
),
CheckboxListTile(
title: const Text('Coocking'),
value: false,
/* onChanged: (val) => setState(
() => _user.passions[User.PassionCooking] = val),*/
),
CheckboxListTile(
title: const Text('Hiking'),
value: true,
/*onChanged: (val) {
setState(() {
userNotifier.addUser(_user);
_user.passions[User.PassionHiking] = val;
});
}*/
),
Expanded(
flex: 1,
child: Container(
padding: const EdgeInsets.symmetric(
vertical: 16, horizontal: 16),
child: RaisedButton(
onPressed: () {
final form = _formKey.currentState;
if (form.validate()) {
form.save();
//_user.save();
_showDialog(context);
}
},
)),
),
Expanded(
flex: 3,
child: ListView.builder(
itemBuilder: (BuildContext context, int index) =>
Text(' ${userList[index].firstName}'),
itemCount: userList.length,
)),
],
),
),
))),
),
);
}
_showDialog(BuildContext context) {
Scaffold.of(context).showSnackBar(SnackBar(
content: Text('Submitting Form'),
));
}
}
class User {
String firstName;
String lastName;
bool newsletter;
User({
this.firstName,
this.lastName,
this.newsletter,
});
}
class TextFieldComp extends StatefulWidget {
User _user;
TextFieldComp(User user) {
_user = user;
}
@override
_TextFieldCompState createState() => _TextFieldCompState();
}
class _TextFieldCompState extends State<TextFieldComp> {
@override
Widget build(BuildContext context) {
// TODO: implement build
return Container(
//height: 200,
child: Column(
children: <Widget>[
Flexible(
child: TextFormField(
decoration: InputDecoration(labelText: 'First Name'),
validator: (value) {
if (value.isEmpty)
return "Please insert Value";
else
return null;
},
onSaved: (val) =>
setState(() => widget._user.firstName = val))),
Flexible(
child: TextFormField(
decoration: InputDecoration(labelText: 'Last Name'),
validator: (value) {
if (value.isEmpty)
return "Please insert Value";
else
return null;
},
onSaved: (val) => setState(() => widget._user.lastName = val)),
),
],
),
);
}
}