- A
abstract
class, 414–415, 424, 427, 450
- accessing
main()
function, 64
actions
property, 104
- adding
- animation to apps, 151–175
AppBar
widgets, 105–107
- authentication to client journal app, 395–403
AuthenticationBloc
class, 432–434
AuthenticationBlocProvider
class, 435–436
- basic layout to client journal app, 403–406
- BLoC pattern, 432–449
- BLoCs to Firestore client app pages, 453–487
- classes to client journal app, 406–408
- Cloud Firestore database to journal app, 391–395
- Cloud Firestore packages to client journal app, 395–403
- drag and drop, 275–277
- edit journal page, 472–484
- Firebase to journal app, 375–410
- Firestore to journal app, 375–410
HomeBloc
class, 441–443
HomeBlocProvider
class, 443–444
Journal
model class, 422–424
JournalEditBloc
class, 444–447
JournalEditBlocProvider
class, 447–449
- login page, 454–460
LoginBloc
class, 436–440
- service classes, 424–430
- state management to Firestore client app, 411–451
Validators
class, 430–432
addOrEditJournal()
method, 338–339, 362–364, 368, 371, 467, 471, 472
addOrUpdateJournal()
method, 476
- ahead‐of‐time (AOT), 44
- Android Emulator
- setting up on Linux, 19
- setting up on macOS, 15
- setting up on Windows, 17
- Android host platform channel, implementing, 318–321
- Android Studio
- about, 23
- configuring editor for, 20
- installing on Linux, 19
- installing on macOS, 14–15
- installing on Windows, 16–17
animatedBalloon()
method, staggered animations and, 172, 174
AnimatedBuilder
widget, 176
AnimatedContainer
widget
AnimatedCrossFade
widget
animatedOpacity()
method, 160–163
AnimatedOpacity
widget
- animation
- adding to apps, 151–175
- using
AnimatedContainer
widget, 152–155
- using
AnimatedCrossFade
widget, 155–159
- using
AnimatedOpacity
widget, 160–163
- using
AnimationController
class, 164–170
- using staggered animation, 170–175
AnimationController
class
- AOT (ahead‐of‐time), 44
AppBar
widgets, 77, 78, 104, 105–107
- applying
- interactivity, 267–305
- themes, 42
- apps
- adding animation to, 151–175
- creating, 26–30
- creating navigation for, 177–219
- running, 30–32
- styling using themes, 33–36
- arithmetic operators, 49
- arrays, declared in JSON, 328–329
askToOpen()
method, 53
- assert statement, 58
AssetBundle
class, 130–131
- assignment operators, 50
- asynchronous programming, implementing, 64
- authentication capabilities
- adding to client journal app, 395–403
- Firebase, 380–381, 410
AuthenticationBloc
class, 432–434, 465–472, 486
AuthenticationBlocProvider
class, 435–436, 460–464, 486
AuthenticationService
class, 414–415, 424–430
- B
- BLoC classes, 415–416, 450, 453–487
- BLoC dependency injection, 450
- BLoC pattern
- about, 450
- adding, 432–449
- implementing, 417–419
blocs
folder, 421
- Boolean variables
- about, 47
- declared in JSON, 328–329
BottomAppBar
widget, 199–203, 219
BottomNavigationBar
widget, 193–199, 219
BoxDecoration
class, 135
break
statement, 54
build()
method, , , , 11
buildBody()
method, 259–260
buildCompleteTrip()
method, 299, 300
BuildContext
objects, , 86
buildDraggable()
method, 275–276
buildDragTarget()
method, 276
buildJournalEntry()
method, 260, 261
buildJournalFooterImages()
method, 260, 263–265
buildJournalHeaderImage()
method, 261
buildJournalTags()
method, 260, 263
buildJournalWeather()
method, 260, 262
buildListViewSeparate()
method, 369, 371
buildRemoveTrip()
method, 299, 301
ButtonBar
widget, 126–130
Buttons
widget, 104, 119–130
buttonsCreateAccount()
method, 458
buttonsLogin()
method, 458–460
- C
Card
widget, 222–223, 251
- cascade notation, 51
case
clause, 55
Center()
widget, 469
- checking orientation, 143–149, 150
child
property, 108
Chip
widget, 256, 266
CircleAvatar
widget, 78, 266
CircularProgressIndicator
, 374
- class inheritance, 60
- class mixins, 60–61
- classes
abstract
, 414–415, 424, 427, 450
- adding to client journal app, 406–408
AnimationController
, 164–170, 176
AssetBundle
, 130–131
AuthenticationBloc
, 432–434, 465–472, 486
AuthenticationBlocProvider
, 435–436, 460–464, 486
AuthenticationService
, 414–415, 424–430
- BLoC, 415–416, 450, 453–487
BoxDecoration
, 135
- database, 330–331, 373
Database
, 330–331, 339–344, 373
DatabaseFileRoutines
, 330–331, 339–344, 373
Duration
, 155
EditJournalBloc
, 465
FormatDates
, 407–408, 465, 487
HomeBloc
, 441–443, 486
HomeBlocProvider
, 443–444, 460–464, 465–472, 486
InheritedWidget
, , 415–416, 418, 421, 451, 486
InputDecoration
, 135–136
Journal
, 330–331, 339–344, 373, 422–424
JournalEdit
, 330–331, 339–344, 373
JournalEditBloc
, 444–447, 486
JournalEditBlocProvider
, 447–449, 472–484
LoginBloc
, 436–440, 454–455, 486
MaterialPageRoute
, 178, 180–181
- model, 416, 450
MoodIcons
, 407–408, 465, 471, 478, 487
- service, 417, 424–430, 450
State
, 30, 37
StatefulWidget
, –8, 22, 37
StatelessWidget
, , 22
Stream
, 61–62, 419–420, 450
StreamController
, 419–420, 450
Ticker
, 164
- using, 57–61, 64
Validators
, 430–432, 436, 440, 450
classes
folder, 421
- client platform channel app, implementing, 309–313
- Cloud Firestore
- about, 410
- adding database to journal app, 391–395
- adding packages to client journal app, 395–403
- collections, 410
- documents, 410
- security rules, 410
- structuring and data modeling, 377–379
- viewing security rules, 381–383
cloud_firestore
package, 410
- code, commenting, 44–45, 64
- collections, Cloud Firestore, 410
- column nesting, 115–117
Column()
widget, 36, 78, 104, 114–119, 254, 256, 257, 266, 471
- commenting code, 44–45, 64
- composition, 257
- conditional expressions, 51
- configuring
- Android Studio editor, 20
- Firebase, 383–391
confirmDeleteJournal()
method, 467, 471–472
confirmDismiss
property, 487
- constants, refactoring with, 86
Container
widget, 78, 104, 108–112, 469, 470
continue
statement, 54–55
copyWith
method, 36
createElement
method, –10
- creating
- apps, 26–30
- Firebase projects, 383–391
- folders/files, 65–68
- full widget trees, 79–85, 100
- journal app, 335–371
- layouts, 253–266, 257–265
- navigation for apps, 177–219
- scrolling lists/effects, 221–251
- shallow widget trees, 85–98, 100
- state management, 421–449
crossFade()
method, 155–156
CupertinoApp
widget, 69
CupertinoNavigationBar
widget, 78
CupertinoPageScaffold
widget, 78
CupertinoTabScaffold
widget, 78
- curly brackets, 328, 340, 346, 347, 407
- customizing
CustomScrollView
widget with slivers, 243–250, 251
CustomScrollView
widget
- about, 221
- customizing with slivers, 243–250, 251
- D
- Dart
- about, , 22, 23
- Boolean variables, 47
break
statement, 54
case
clause, 55
- class inheritance, 60
- class mixins, 60–61
- commenting code, 44–45
continue
statement, 54–55
- declaring variables, 46–49
do‐while
loop, 53–54
else
statement, 51–52
if
statement, 51–52
- implementing asynchronous programming, 61–62
- import packages, 57
- installing plugin for, 20
- lists, 47–48
for
loops, 52–53
- maps, 48
- number variables, 47
- reasons for using, 43–44
- referencing variables, 45–46
- runes, 48–49
- running
main()
entry point, 45
- string variables, 47
switch
statement, 55
- ternary operator, 52
- using classes, 57–61
- using flow statements, 51–55
- using functions, 55–57
- using operators, 49–51
while
loop, 53–54
dart:convert
library, 374
dart:io
library, 374
dart:math
, 374
- data
- retrieving with
FutureBuilder
widget, 333–334
- saving with local persistence, 327–374
- data modeling, Cloud Firestore, 377–379
Database
class, 330–331, 339–344, 373
- database classes
DatabaseFileRoutines
class, 330–331, 339–344, 373
DateFormat
, 373
- dates
- formatting, 331–332
- sorting lists of, 332–333
DateTime.parse()
, 373
deactivate()
method,
- Declarative user interface (UI), 22
- declaring variables, 46–49
- decorators, 135–139, 150
deleteTrip()
method, 299–300, 303
- dependencies
- checking for in Linux, 19
- checking for in Windows, 16
- checking for on macOS, 14
- dependency injection, 415, 450, 486
didChangeDependencies()
method, , 474
didFinishLaunchingWithOptions
method, 316
didUpdateWidget()
method,
Dismissable
widget, 296–303, 305, 360, 365, 371, 373, 465–472, 470, 487
dispose()
method, , 350, 433, 438, 442, 456, 460, 475
Divider
widget, 78, 261, 266, 470, 487
- documentation comments, 44–45
- documents, Cloud Firestore, 410
do‐while
loop, 53–54
- drag and drop, adding, 275–277
Draggable
widget, 271, 275–277, 305
DragTarget
widget, 271, 275–277, 305
Drawer
widget, 207–217, 219
DropDownButton()
widget, 487
Duration
class, 155
- E
- edit journal page, adding, 472–484
EditJournalBloc
class, 465
- editor, Android Studio, 20
Element
objects,
- element trees
- about, –9, 22
- stateful widget and, 10–12
- stateless widget and, –10
- elements, , 22
else
statement, 51–52
- Emulator (Android)
- setting up on Linux, 19
- setting up on macOS, 15
- setting up on Windows, 17
- equality operators, 49
Expanded
widget, 78
- external packages, 38–41, 42
- F
- final layout, 257
- Firebase
- about, 376–377, 410
- adding to journal app, 375–410
- authentication, 410
- configuring, 383–391
- console panel website, 391
- viewing authentication capabilities, 380–381
firebase_auth
package, 410
- Firestore. See also Cloud Firestore
- about, 376–377
- adding BLoC classes to client app pages, 453–487
- adding state management to, 411–451
- adding to journal app, 375–410
FlatButton
widget, 121
flexibleSpace
property, 104
FloatingActionButton
widget, 119–120, 180
- flow statements, 51–55, 64
- Flutter. See Google Flutter
- Flutter plugin, 23
- Flutter SDK
- about, 23
- installing, 13–19
FlutterMethodChannel
method, 323
FocusNode
, 373
- folders/files, creating and organizing, 65–68
- footer images layout, 257
for
loops, 52–53
Form
widget, 139–143
FormatDates
class, 407–408, 465, 487
- formatting dates, 331–332
FormState validate
method, 139, 143
fullscreenDialog
property, 178–179
- functions, 55–57, 64
Future
object, 61–62, 373
FutureBuilder
widget, 333–334, 360, 371, 373
- G
- gesture status bar, adding
InkWell
and InkResponse
to, 291–296
GestureDetector()
widget
AnimationController
class and, 168
Hero
widget and, 189
- interactivity and, 267–274, 305
- setting up, 267–274
- staggered animations and, 173
- using for moving and scaling, 278–284
getApplicationDocumentsDirectory()
method, 330–331
getDeviceInfo()
method, 312, 320
getFlutterView()
method, 321
getIconList()
method, 234
getJournal
method, 446–447
- global app themes, 33–35
- Google Cloud Platform, 383
- Google Flutter. See also specific topics
- about, –4, 22
- website, 13
GoogleService‐Info.plist
file, 410
google‐services.json
file, 410
GridView
widget, 143, 230–236, 251
- H
- Hello World app
- project setup, 25–30
- stateless and stateful widgets, 37–38
- using external packages, 38–41
- using hot reload, 30–32
- using themes to style your app, 33–36
Hero
widget, 188–192, 219
- home page, modifying, 465–472
HomeBloc
class, 441–443, 486
HomeBlocProvider
class, 443–444, 460–464, 465–472, 486
home.dart
, 75
- hot reload, 30–32, 42
- I
Icon
widget, 132–135, 266
IconButton
widget, 122–123
- icons, 130–135
if
statement, 51–52
Image
widget, 131–132, 255, 266
- images, 130–135, 150
- implementing
abstract
class, 414–415
- Android host platform channel, 318–321
- asynchronous programming, 61–62, 64
- BLoC pattern, 417–419
- client platform channel app, 309–313
Draggable
widget, 275–277
DragTarget
widget, 275–277
FlutterMethodChannel
method, 323
InheritedWidget
class, 415–416
invokeMethod
method, 323
- iOS host platform channel, 313–318
MethodChannel
, 323
- model class, 416
- packages, 40–41
- service class, 417
setMethodCallHandler
method, 323
Sink
property, 419–420
- state management, 412–420
Stream
class, 419–420
StreamBuilder
widget, 419–420
StreamController
class, 419–420
- import packages, 57
- import statement, 57
- importing packages, 64
increaseWidth()
method, 152, 153
InheritedWidget
class, , 415–416, 418, 421, 451, 486
- initializing packages, 40–41
initState()
method
- about,
AnimationController
class and, 167
- client platform channel app and, 312
- interactivity and, 298
- journal app and, 349–350, 456, 460, 466, 474
Navigator
widget and, 185
- staggered animations and, 171–172
InkResponse
widget, 289–296, 305
InkWell
widget, 189, 289–296, 305
InputDecoration
class, 135–136
- installing
- Android Studio on Linux, 19
- Android Studio on macOS, 14–15
- Android Studio on Windows, 16–17
- Dart plugin, 20
- Flutter plugin, 20
- Flutter SDK, 13–19
- Xcode on macOS, 14
- interactivity
- applying, 267–305
Dismissable
widget, 296–303, 305
Draggable
widget, 275–277, 305
DragTarget
widget, 275–277, 305
GestureDetector
widget, 267–274, 278–289, 305
InkResponse
widget, 289–296, 305
InkWell
widget, 289–296, 305
Interval()
, staggered animations and, 170–171
intl
package, 374
invokeMethod
method, 323
- iOS host platform channel, implementing, 313–318
- J
- JIT (just‐in‐time), 44
- journal app
- adding BLoC pattern, 432–449
- adding Cloud Firestore database to, 391–395
- adding edit journal page, 472–484
- adding Firebase and Firestore, 375–410
- adding journal database classes, 339–344
- adding journal entry page, 344–359
- adding
Journal
model class, 422–424
- adding login page, 454–460
- adding service classes, 424–430
- adding
Validators
class, 430–432
- building, 335–371
- building client journal app, 395–408
- finishing home page, 359–371
- laying foundations of, 337–339
- modifying home page, 465–472
- modifying main page, 460–464
Journal
class, 330–331, 339–344, 373, 422–424
JournalEdit
class, 330–331, 339–344, 373
JournalEditBloc
class, 444–447, 486
JournalEditBlocProvider
class, 447–449, 472–484
Journal.fromDoc()
method, 423–424
- JSON format
- about, 328–330
- database classes and, 330–331
- just‐in‐time (JIT), 44
- L
- layouts
- about, 253–255
- adding to client journal app, 403–406
- building, 253–266
- creating, 257–265
- final, 257
- footer images, 257
- tags, 256–257
- weather section, 256
leading
property, 104
lib
folder, 25–26
- Linux, installing Flutter SDK on, 17–19
listen()
method, 419
- lists, variables for, 47–48
List().sort
, 373
ListTile
widget, 223–229, 251, 367, 471
ListView
widget, 207–217, 219, 223–229, 251, 373, 487
loadJournals()
method, 371
- logical operators, 50
- login page, adding, 454–460
LoginBloc
class, 436–440, 454–455, 486
- M
- macOS, installing Flutter SDK on, 13–15
main()
entry point, running, 44–45
- main page, modifying, 460–464
main()
function, , 62, 64
main.dart
, 75
- maps, variables for, 48
markTripComplete()
method, 299–300, 303
- Material Components widgets, 26
MaterialApp
widget, 69, 188, 462
MaterialPageRoute
class, 178, 180–181
Matrix4 rotateZ()
method, 487
MethodChannel
, 309–313, 323
- methods
addOrEditJournal()
, 338–339, 362–364, 368, 371, 467, 471, 472
addOrUpdateJournal()
, 476
animatedBalloon()
, 172, 174
animatedOpacity()
, 160–163
askToOpen()
, 53
build()
, , , , 11
buildBody()
, 259–260
buildCompleteTrip()
, 299, 300
buildDraggable()
, 275–276
buildDragTarget()
, 276
buildJournalEntry()
, 260, 261
buildJournalFooterImages()
, 260, 263–265
buildJournalHeaderImage()
, 261
buildJournalTags()
, 260, 263
buildJournalWeather()
, 260, 262
buildListViewSeparate()
, 369, 371
buildRemoveTrip()
, 299, 301
buttonsCreateAccount()
, 458
buttonsLogin()
, 458–460
confirmDeleteJournal()
, 467, 471–472
copyWith
, 36
createElement
, –10
crossFade()
, 155–156
deactivate()
,
deleteTrip()
, 299–300, 303
didChangeDependencies()
, , 474
didFinishLaunchingWithOptions
, 316
didUpdateWidget()
,
dispose()
, , 350, 433, 438, 442, 456, 460, 475
FlutterMethodChannel
, 323
FormState validate
, 139, 143
getApplicationDocumentsDirectory()
, 330–331
getDeviceInfo()
, 312, 320
getFlutterView()
, 321
getIconList()
, 234
getJournal
, 446–447
increaseWidth()
, 152, 153
initState()
, , 167, 171–172, 185, 298, 312, 349–350, 456, 460, 466, 474
invokeMethod
, 323
Journal.fromDoc()
, 423–424
listen()
, 419
loadJournals()
, 371
markTripComplete()
, 299–300, 303
Matrix4 rotateZ()
, 487
Navigator.pop
, 178, 187
notImplemented()
, 320
of()
, 416
onAuthChanged()
, 433
onCreate
, 320
onDoubleTap()
, 287, 288
onLongPress()
, 289, 293–294, 295
onPressed()
, 153, 345, 353
onScaleStart()
, 288
onScaleUpdate()
, 288
openPageAbout()
, 179–181, 182
openPageGratitude()
, 181–182
radioOnChanged()
, 184
readAsString()
, 331
- refactoring with, 86–91
resetToDefaultValues()
, 287–289, 294
rotateZ()
, 471, 472–484, 478–484
runApp()
,
runTransaction()
, 424–425
saveJournal()
, 447
setMethodCallHandler
, 323
setScaleBig
, 293–294, 295
setScaleSmall
, 293–294, 295
setState()
, –7, , 11, 37, 152, 155–156, 160–163, 195, 199, 285–287, 294, 310–312, 362–363, 412
showDialog()
, 467
showTimePicker()
, 345, 472–484, 487
sink.add()
, 434, 441
tabChanged
, 205–206
void _signOut()
, 434
Widget build()
, 456–457, 462, 463, 469, 476
writeAsString()
, 331
- methods, refactoring with, 86–91
mkdir
command, 75
- model class, 416, 450
models
folder, 421
- modifying
- home page, 465–472
- main page, 460–464
MoodIcons
class, 407–408, 465, 471, 478, 487
- moving, using
GestureDetector
widget for, 278–284
- multiline comments, 44
- N
- navigation
BottomAppBar
widget, 199–203, 219
BottomNavigationBar
widget, 193–199, 219
- creating for apps, 177–219
Drawer
widget, 207–217, 219
Hero
widget, 188–192, 219
ListView
widget, 207–217, 219
Navigator
widget, 178–188, 219
TabBar
widget, 203–207, 219
TabBarView
widget, 203–207, 219
Navigator
widget, 178–188, 219, 373
Navigator.pop
method, 178, 187
- nesting widgets, 100
notImplemented()
method, 320
- number variables, 47
- numbers, declared in JSON, 328–329
- O
- objects, declared in JSON, 328–329
of()
method, 416
onAuthChanged()
method, 433
onCreate
method, 320
onDoubleTap()
method, 287, 288
onLongPress()
method, 289, 293–294, 295
onPressed()
method, 153, 345, 353
onScaleStart()
method, 288
onScaleUpdate()
method, 288
openPageAbout()
method, 179–181, 182
openPageGratitude()
method, 181–182
- operators, 49–51, 64
- organizing folders/files, 65–68
- orientation, checking, 143–149, 150
OrientationBuilder
widget, 143
- P
- packages
cloud_firestore
, 410
firebase_auth
, 410
- importing, 64
intl
, 374
path_provider
, 374
- searching for, 39–40
- using, 40–41
Padding
widget, 78, 266
pages
folder, 421
path_provider
package, 374
- persistence
- about, 327–328
- building journal app, 335–371
- database classes and JSON, 330–331
- formatting dates, 331–332
- JSON format, 328–330
- retrieving data with
FutureBuilder
widget, 333–334
- saving data with local, 327–374
- sorting lists of dates, 332–333
- platform channels, 307–308
- platform‐native code
- implementing Android host platform channel, 318–321
- implementing client platform channel app, 309–313
- implementing iOS host platform channel, 313–318
- platform channels, 307–308
- writing, 307–323
PopupMenuButton
widget, 123–126
Positioned
widget, 79
- print statement, 56
print
statement, 53
- properties
- R
radioOnChanged()
method, 184
RaisedButton
widget, 121–122
readAsString()
method, 331
- refactoring
- with constants, 86
- with methods, 86–91
- with widget classes, 91–98
- referencing variables, 45–46
- relational operators, 49
- render tree, , 23
RenderObject
, , 22
- replacing text with
RichText
child containers, 113–114
resetToDefaultValues()
method, 287–289, 294
- retrieving data with
FutureBuilder
widget, 333–334
- return null statement, 55–56
RichText
widget, 104, 112–114
- root folder, 421
rotateZ()
method, 471, 472–484, 478–484
- route name, for navigation, 188
- row nesting, 115–117
Row
widget, 78, 104, 115–119, 255, 266
runApp()
method,
- runes, as variables, 48–49
- running
- apps, 30–32
main()
entry point, 45
runTransaction()
method, 424–425
- S
SafeArea
widget, 104, 107–108, 266
saveJournal()
method, 447
- saving data with local persistence, 327–374
Scaffold
widget, 77, 78, 104
- scaling, using
GestureDetector
widget for, 278–284
- scrolling lists/effects
Card
widget, 222–223, 251
- creating, 221–251
- customizing
CustomScrollView
widget with slivers, 243–250, 251
GridView
widget, 230–236, 251
ListTile
widget, 223–229, 251
ListView
widget, 223–229, 251
Stack
widget, 237–243, 251
- security rules, Cloud Firestore, 381–383, 410
- service classes
services
folder, 421
setMethodCallHandler
method, 323
setScaleBig
method, 293–294, 295
setScaleSmall
method, 293–294, 295
setState()
method
- about, –7, , 11, 37
AnimatedContainer
widget and, 152, 155
AnimatedCrossFade
widget and, 155–156
AnimatedOpacity
and, 160–163
BottomNavigationBar
widget and, 195, 199
- client platform channel app and, 311–312
GestureDetector
widget and, 285–287
- interactivity and, 294, 300
- journal app and, 362–363
- state management and, 412
- setup
- Android Emulator on Linux, 19
- Android Emulator on macOS, 15
- Android Emulator on Windows, 17
GestureDetector
widget, 267–274
- of project for Hello World app, 25–30
showDatePicker()
function, 345, 359, 373, 478
showDialog()
method, 467
showTimePicker()
method, 345, 472–484, 487
SingleChildScrollview
widget, 78, 266
- single‐line comments, 44
Sink
property, 419–420, 450
sink.add()
method, 434, 441
SizedBox
widget, 256, 257, 266
- Skia, , 22
SliverAppBar
widget, 243–250
SliverGrid
widget, 243–250
SliverList
widget, 243–250
- slivers, customizing
CustomScrollView
widget with, 243–250, 251
- slivers widgets, 221
SliverSafeArea
widget, 243–250
- sorting lists of dates, 332–333
- square brackets, 328
Stack
widget, 79, 237–243, 251
- staggered animation, 170–175
- starter project template
- creating folders/files, 65–68
- organizing folders/files, 65–68
- structuring widgets, 69–74
State
class, 30, 37
- state management
- about, 450
- adding to Firestore client app, 411–451
- building, 421–449
- implementing, 412–420
State
object, , 11
- stateful widget
- about, 37–38
- element trees and, 10–12
StatefulWidget
class, –8, 22, 37
- stateless widget
- about, 37–38
- element trees and, –10
StatelessWidget
class, , 22
Stream
class, 61–62, 419–420, 450
StreamBuilder
widget, 419–420, 450, 460–484, 486
StreamController
class, 419–420, 450
- string variables, 47
- strings, declared in JSON, 328–329
- structuring
- Cloud Firestore, 377–379
- widgets, 69–74
- styling apps using themes, 33–36
switch
statement, 55
- T
TabBar
widget, 203–207, 219
TabBarView
widget, 203–207, 219
tabChanged
method
TabBar
widget and, 205–206
TabBarView
widget and, 205–206
- tags layout, 256–257
- ternary operator, 52
- text fields
- using forms for validating, 150
- validating with
Form
widget, 139–143
Text
widget, 11–12, 78, 104, 112–114, 178, 255, 266
TextEditingController
, 373
TextField
widget, 373, 472–484
TextInputAction
, 373
- themes
- applying, 42
- styling apps using, 33–36
Ticker
class, 164
title
property, 104
Transform
widget, 278–283, 471
- type test operators, 50
- V
- validating text fields using
Form
widget, 139–143
Validators
class, 430–432, 436, 440, 450
- variables
- Boolean, 47
- declaring, 46–49
- lists as, 47–48
- maps as, 48
- number, 47
- referencing, 45–46
- runes as, 48–49
- string, 47
- using, 64
- viewing
- Cloud Firestore security rules, 381–383
- Firebase authentication capabilities, 380–381
void_signOut()
method, 434
- W
- weather section layout, 256
- websites
- Firebase console panel, 391
- Google Flutter, 13
while
loop, 53–54
Widget build()
method, 456–457, 462, 463, 469, 476
- widget trees
- about, –9, 22
- building full, 79–85
- building shallow, 85–98
- creating full, 100
- creating shallow, 100
- refactoring with constants, 86
- refactoring with methods, 86–91
- refactoring with widget classes, 91–98
- widgets overview, 77–79
- widgets
- about, , 22, 103
AnimatedBuilder
, 176
AnimatedContainer
, 152–155, 176
AnimatedCrossFade
, 155–159, 176
AnimatedOpacity
, 160–163, 176
AppBar
, 77, 78, 104, 105–107
BottomAppBar
, 199–203, 219
BottomNavigationBar
, 193–199, 219
ButtonBar
, 126–130
Buttons
, 104, 119–130
Card
, 222–223, 251
Center()
, 469
- checking orientation, 143–149
Chip
, 256, 266
CircleAvatar
, 78, 266
Column
, 104, 114–119
Column()
, 36, 78, 104, 114–119, 254, 256, 257, 266, 471
Container
, 78, 104, 108–112, 469, 470
CupertinoApp
, 69
CupertinoNavigationBar
, 78
CupertinoPageScaffold
, 78
CupertinoTabScaffold
, 78
CustomScrollView
, 221, 243–250, 251
Dismissable
, 296–303, 305, 360, 365, 371, 373, 465–472, 470, 487
Divider
, 78, 261, 266, 470, 487
Draggable
, 271, 275–277, 305
DragTarget
, 271, 275–277, 305
Drawer
, 207–217, 219
DropDownButton()
, 487
Expanded
, 78
FlatButton
, 121
FloatingActionButton
, 119–120, 180
Form
, 139–143
FutureBuilder
, 333–334, 360, 371, 373
GestureDetector()
, 168, 173, 189, 267–274, 278–284, 278–289, 305
GridView
, 143, 230–236, 251
Hero
, 188–192, 219
Icon
, 132–135, 266
IconButton
, 122–123
Image
, 131–132, 255, 266
InkResponse
, 289–296, 305
InkWell
, 189, 289–296, 305
- lifecycle events of, –8, 22
ListTile
, 223–229, 251, 367, 471
ListView
, 207–217, 219, 223–229, 251, 373, 487
MaterialApp
, 69, 188, 462
Navigator
, 178–188, 219, 373
- nesting, 100
OrientationBuilder
, 143
- overview of, 77–79
Padding
, 78, 266
PopupMenuButton
, 123–126
Positioned
, 79
RaisedButton
, 121–122
RichText
, 104, 112–114
Row
, 78, 104, 115–119, 255, 266
SafeArea
, 104, 107–108, 266
Scaffold
, 77, 78, 104
SingleChildScrollview
, 78, 266
SizedBox
, 256, 257, 266
SliverAppBar
, 243–250
SliverGrid
, 243–250
SliverList
, 243–250
- slivers, 221
SliverSafeArea
, 243–250
Stack
, 79, 237–243, 251
- stateful, 10–12, 37–38
- stateless, –10, 37–38
StreamBuilder
, 419–420, 450, 460–484, 486
- structuring, 69–74
TabBar
, 203–207, 219
TabBarView
, 203–207, 219
Text
, 11–12, 78, 104, 112–114, 178, 255, 266
TextField
, 373, 472–484
Transform
, 278–283, 471
- using basic, 103–130, 150
- using decorators, 135–139
- using form to validate text fields, 139–143
- using form widget to validate text fields, 139–143
- using images and icons, 130–135
Wrap
, 266
- Windows, installing Flutter SDK on, 15–17
Wrap
widget, 266
writeAsString()
method, 331
- writing platform‐native code, 307–323
- X
- Xcode
- about, 23
- installing on macOS, 14
..................Content has been hidden....................
You can't read the all page of ebook, please click
here login for view all page.