Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Sign in
Toggle navigation
F
Front-End
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
abdullh.alsoleman
Front-End
Commits
8f603800
Commit
8f603800
authored
Mar 10, 2016
by
Hans Muller
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #2532 from HansMuller/scaffold
Scaffold saves and restores scrollable state, etc
parents
6d646860
9536c418
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
138 additions
and
145 deletions
+138
-145
dialog_demo.dart
examples/material_gallery/lib/demo/dialog_demo.dart
+104
-128
page_selector_demo.dart
examples/material_gallery/lib/demo/page_selector_demo.dart
+17
-14
tabs_demo.dart
examples/material_gallery/lib/demo/tabs_demo.dart
+9
-2
scaffold.dart
packages/flutter/lib/src/material/scaffold.dart
+7
-0
tabs.dart
packages/flutter/lib/src/material/tabs.dart
+1
-1
No files found.
examples/material_gallery/lib/demo/dialog_demo.dart
View file @
8f603800
...
...
@@ -14,11 +14,6 @@ enum DialogDemoAction {
agree
,
}
const
String
_introText
=
"Use dialogs sparingly because their sudden appearance forces users to stop their "
"current task and focus on the dialog's content. Alternatives to dialogs include "
"menus or inline expansion, both of which maintain the current context."
;
const
String
_alertWithoutTitleText
=
"Discard draft?"
;
const
String
_alertWithTitleText
=
...
...
@@ -88,134 +83,115 @@ class DialogDemoState extends State<DialogDemo> {
toolBar:
new
ToolBar
(
center:
new
Text
(
'Dialogs'
)
),
body:
new
B
uttonTheme
(
color:
ButtonColor
.
accent
,
child
:
new
Padding
(
padding:
const
EdgeDims
.
all
(
24.0
),
child:
new
ScrollableViewport
(
child:
new
Column
(
alignItems:
FlexAlignItems
.
stretch
,
children:
<
Widget
>[
new
Container
(
c
hild
:
new
Text
(
_
intro
Text
,
body:
new
B
lock
(
padding:
const
EdgeDims
.
symmetric
(
vertical:
24.0
,
horizontal:
72.0
)
,
child
ren:
<
Widget
>[
new
RaisedButton
(
child:
new
Text
(
'ALERT'
),
onPressed:
()
{
showDemoDialog
(
context:
context
,
dialog:
new
Dialog
(
c
ontent
:
new
Text
(
_
alertWithoutTitle
Text
,
style:
dialogTextStyle
),
padding:
const
EdgeDims
.
only
(
top:
8.0
,
bottom:
24.0
),
margin:
const
EdgeDims
.
only
(
bottom:
16.0
),
decoration:
new
BoxDecoration
(
border:
new
Border
(
bottom:
new
BorderSide
(
color:
theme
.
dividerColor
))
)
),
new
FlatButton
(
child:
new
Text
(
'Alert without a title'
),
onPressed:
()
{
showDemoDialog
(
context:
context
,
dialog:
new
Dialog
(
content:
new
Text
(
_alertWithoutTitleText
,
style:
dialogTextStyle
),
actions:
<
Widget
>[
new
FlatButton
(
child:
new
Text
(
'CANCEL'
),
onPressed:
()
{
Navigator
.
pop
(
context
,
DialogDemoAction
.
cancel
);
}
),
new
FlatButton
(
child:
new
Text
(
'DISCARD'
),
onPressed:
()
{
Navigator
.
pop
(
context
,
DialogDemoAction
.
discard
);
}
)
]
)
);
}
),
new
FlatButton
(
child:
new
Text
(
'Alert with a title'
),
onPressed:
()
{
showDemoDialog
(
context:
context
,
dialog:
new
Dialog
(
title:
new
Text
(
"Use Google's location service?"
),
content:
new
Text
(
_alertWithTitleText
,
style:
dialogTextStyle
),
actions:
<
Widget
>[
new
FlatButton
(
child:
new
Text
(
'DISAGREE'
),
onPressed:
()
{
Navigator
.
pop
(
context
,
DialogDemoAction
.
disagree
);
}
),
new
FlatButton
(
child:
new
Text
(
'AGREE'
),
onPressed:
()
{
Navigator
.
pop
(
context
,
DialogDemoAction
.
agree
);
}
)
]
)
);
}
),
new
FlatButton
(
child:
new
Text
(
'Simple Dialog'
),
onPressed:
()
{
showDemoDialog
(
context:
context
,
dialog:
new
Dialog
(
title:
new
Text
(
'Set backup account'
),
content:
new
Column
(
children:
<
Widget
>[
new
DialogDemoItem
(
icon:
Icons
.
account_circle
,
color:
theme
.
primaryColor
,
text:
'username@gmail.com'
,
onPressed:
()
{
Navigator
.
pop
(
context
,
'username@gmail.com'
);
}
),
new
DialogDemoItem
(
icon:
Icons
.
account_circle
,
color:
theme
.
primaryColor
,
text:
'user02@gmail.com'
,
onPressed:
()
{
Navigator
.
pop
(
context
,
'user02@gmail.com'
);
}
),
new
DialogDemoItem
(
icon:
Icons
.
add_circle
,
text:
'add account'
,
color:
theme
.
disabledColor
)
]
)
)
);
}
),
new
FlatButton
(
child:
new
Text
(
'Confirmation Dialog'
),
onPressed:
()
{
showTimePicker
(
context:
context
,
initialTime:
const
TimeOfDay
(
hour:
15
,
minute:
30
)
actions:
<
Widget
>[
new
FlatButton
(
child:
new
Text
(
'CANCEL'
),
onPressed:
()
{
Navigator
.
pop
(
context
,
DialogDemoAction
.
cancel
);
}
),
new
FlatButton
(
child:
new
Text
(
'DISCARD'
),
onPressed:
()
{
Navigator
.
pop
(
context
,
DialogDemoAction
.
discard
);
}
)
.
then
((
value
)
{
// The value passed to Navigator.pop() or null.
if
(
value
!=
null
)
{
scaffoldKey
.
currentState
.
showSnackBar
(
new
SnackBar
(
content:
new
Text
(
'You selected:
$value
'
)
));
}
});
}
),
new
FlatButton
(
child:
new
Text
(
'Fullscreen Dialog'
),
onPressed:
()
{
Navigator
.
push
(
context
,
new
MaterialPageRoute
(
builder:
(
BuildContext
context
)
=>
new
FullScreenDialogDemo
()
));
}
]
)
]
)
);
}
),
new
RaisedButton
(
child:
new
Text
(
'ALERT WITH TITLE'
),
onPressed:
()
{
showDemoDialog
(
context:
context
,
dialog:
new
Dialog
(
title:
new
Text
(
"Use Google's location service?"
),
content:
new
Text
(
_alertWithTitleText
,
style:
dialogTextStyle
),
actions:
<
Widget
>[
new
FlatButton
(
child:
new
Text
(
'DISAGREE'
),
onPressed:
()
{
Navigator
.
pop
(
context
,
DialogDemoAction
.
disagree
);
}
),
new
FlatButton
(
child:
new
Text
(
'AGREE'
),
onPressed:
()
{
Navigator
.
pop
(
context
,
DialogDemoAction
.
agree
);
}
)
]
)
);
}
),
new
RaisedButton
(
child:
new
Text
(
'SIMPLE'
),
onPressed:
()
{
showDemoDialog
(
context:
context
,
dialog:
new
Dialog
(
title:
new
Text
(
'Set backup account'
),
content:
new
Column
(
children:
<
Widget
>[
new
DialogDemoItem
(
icon:
Icons
.
account_circle
,
color:
theme
.
primaryColor
,
text:
'username@gmail.com'
,
onPressed:
()
{
Navigator
.
pop
(
context
,
'username@gmail.com'
);
}
),
new
DialogDemoItem
(
icon:
Icons
.
account_circle
,
color:
theme
.
primaryColor
,
text:
'user02@gmail.com'
,
onPressed:
()
{
Navigator
.
pop
(
context
,
'user02@gmail.com'
);
}
),
new
DialogDemoItem
(
icon:
Icons
.
add_circle
,
text:
'add account'
,
color:
theme
.
disabledColor
)
]
)
)
);
}
),
new
RaisedButton
(
child:
new
Text
(
'CONFIRMATION'
),
onPressed:
()
{
showTimePicker
(
context:
context
,
initialTime:
const
TimeOfDay
(
hour:
15
,
minute:
30
)
)
.
then
((
value
)
{
// The value passed to Navigator.pop() or null.
if
(
value
!=
null
)
{
scaffoldKey
.
currentState
.
showSnackBar
(
new
SnackBar
(
content:
new
Text
(
'You selected:
$value
'
)
));
}
});
}
),
new
RaisedButton
(
child:
new
Text
(
'FULLSCREEN'
),
onPressed:
()
{
Navigator
.
push
(
context
,
new
MaterialPageRoute
(
builder:
(
BuildContext
context
)
=>
new
FullScreenDialogDemo
()
));
}
)
)
]
)
);
}
...
...
examples/material_gallery/lib/demo/page_selector_demo.dart
View file @
8f603800
...
...
@@ -5,17 +5,6 @@
import
'package:flutter/material.dart'
;
class
PageSelectorDemo
extends
StatelessComponent
{
Widget
_buildTabView
(
IconData
icon
)
{
return
new
Container
(
key:
new
ObjectKey
(
icon
),
padding:
const
EdgeDims
.
all
(
12.0
),
child:
new
Card
(
child:
new
Center
(
child:
new
Icon
(
icon:
icon
,
size:
48.0
)
)
)
);
}
void
_handleArrowButtonPress
(
BuildContext
context
,
int
delta
)
{
final
TabBarSelectionState
selection
=
TabBarSelection
.
of
(
context
);
...
...
@@ -35,10 +24,11 @@ class PageSelectorDemo extends StatelessComponent {
return
new
Scaffold
(
toolBar:
new
ToolBar
(
center:
new
Text
(
'Page Selector'
)),
body:
new
TabBarSelection
(
body:
new
TabBarSelection
<
IconData
>
(
values:
icons
,
child:
new
Builder
(
builder:
(
BuildContext
context
)
{
final
Color
color
=
Theme
.
of
(
context
).
accentColor
;
return
new
Column
(
children:
<
Widget
>[
new
Container
(
...
...
@@ -47,12 +37,14 @@ class PageSelectorDemo extends StatelessComponent {
children:
<
Widget
>[
new
IconButton
(
icon:
Icons
.
arrow_back
,
color:
color
,
onPressed:
()
{
_handleArrowButtonPress
(
context
,
-
1
);
},
tooltip:
'Back'
),
new
TabPageSelector
<
String
>(),
new
TabPageSelector
<
IconData
>(),
new
IconButton
(
icon:
Icons
.
arrow_forward
,
color:
color
,
onPressed:
()
{
_handleArrowButtonPress
(
context
,
1
);
},
tooltip:
'Forward'
)
...
...
@@ -62,7 +54,18 @@ class PageSelectorDemo extends StatelessComponent {
),
new
Flexible
(
child:
new
TabBarView
(
children:
icons
.
map
(
_buildTabView
).
toList
()
children:
icons
.
map
((
IconData
icon
)
{
return
new
Container
(
key:
new
ObjectKey
(
icon
),
padding:
const
EdgeDims
.
all
(
12.0
),
child:
new
Card
(
child:
new
Center
(
child:
new
Icon
(
icon:
icon
,
size:
128.0
,
color:
color
)
)
)
);
})
.
toList
()
)
)
]
...
...
examples/material_gallery/lib/demo/tabs_demo.dart
View file @
8f603800
...
...
@@ -23,7 +23,8 @@ class TabsDemo extends StatelessComponent {
Icons
.
language
:
'LANGUAGE'
,
};
Widget
build
(
_
)
{
Widget
build
(
BuildContext
context
)
{
final
Color
iconColor
=
Theme
.
of
(
context
).
accentColor
;
return
new
TabBarSelection
(
values:
icons
,
child:
new
Scaffold
(
...
...
@@ -43,7 +44,13 @@ class TabsDemo extends StatelessComponent {
key:
new
ObjectKey
(
icon
),
padding:
const
EdgeDims
.
all
(
12.0
),
child:
new
Card
(
child:
new
Center
(
child:
new
Icon
(
icon:
icon
,
size:
48.0
))
child:
new
Center
(
child:
new
Icon
(
icon:
icon
,
color:
iconColor
,
size:
128.0
)
)
)
);
}).
toList
()
...
...
packages/flutter/lib/src/material/scaffold.dart
View file @
8f603800
...
...
@@ -345,6 +345,12 @@ class ScaffoldState extends State<Scaffold> {
void
initState
()
{
super
.
initState
();
_appBarController
=
new
AnimationController
();
List
<
double
>
scrollValues
=
PageStorage
.
of
(
context
)?.
readState
(
context
);
if
(
scrollValues
!=
null
)
{
assert
(
scrollValues
.
length
==
2
);
_scrollOffset
=
scrollValues
[
0
];
_scrollOffsetDelta
=
scrollValues
[
1
];
}
}
void
dispose
()
{
...
...
@@ -353,6 +359,7 @@ class ScaffoldState extends State<Scaffold> {
_snackBarController
=
null
;
_snackBarTimer
?.
cancel
();
_snackBarTimer
=
null
;
PageStorage
.
of
(
context
)?.
writeState
(
context
,
<
double
>[
_scrollOffset
,
_scrollOffsetDelta
]);
super
.
dispose
();
}
...
...
packages/flutter/lib/src/material/tabs.dart
View file @
8f603800
...
...
@@ -999,7 +999,7 @@ class TabPageSelector<T> extends StatelessComponent {
Widget
build
(
BuildContext
context
)
{
final
TabBarSelectionState
selection
=
TabBarSelection
.
of
(
context
);
final
Color
color
=
Theme
.
of
(
context
).
primary
Color
;
final
Color
color
=
Theme
.
of
(
context
).
accent
Color
;
final
ColorTween
selectedColor
=
new
ColorTween
(
begin:
Colors
.
transparent
,
end:
color
);
final
ColorTween
previousColor
=
new
ColorTween
(
begin:
color
,
end:
Colors
.
transparent
);
Animation
<
double
>
animation
=
new
CurvedAnimation
(
parent:
selection
.
animation
,
curve:
Curves
.
ease
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment