Bird
Raised Fist0
Fluttermobile~8 mins

ElevatedButton and TextButton in Flutter - Build, Publish & Deploy

Choose your learning style10 modes available
Build & Publish - ElevatedButton and TextButton
Performance Impact

Using ElevatedButton and TextButton in Flutter apps has minimal impact on frame rate and memory when used properly. These buttons are lightweight widgets optimized by Flutter's rendering engine. They support smooth animations at 60fps or higher on modern devices. However, excessive nesting or complex styling can slightly affect rendering speed and battery life.

Optimization Tips
  • Reuse button styles with ButtonStyle to avoid rebuilding styles every frame.
  • Use const constructors for buttons when possible to reduce widget rebuilds.
  • Limit heavy animations inside buttons; prefer simple color or elevation changes.
  • Keep button trees shallow and avoid unnecessary wrappers.
App Size and Startup Time

ElevatedButton and TextButton are part of Flutter's material library, which adds a moderate size to the app bundle (~1-2MB). This is usually acceptable for most apps. Using these buttons does not significantly affect startup time. To keep app size small, avoid importing unused material components and consider tree shaking by Flutter's build system.

iOS vs Android Differences

Both buttons behave consistently across iOS and Android because Flutter renders them using its own engine. However, the visual style follows Material Design by default, which is native to Android. On iOS, these buttons may look less native compared to Cupertino buttons. For a native iOS feel, consider using CupertinoButton or platform adaptive widgets.

Store Review Guidelines
  • Accessibility: Ensure buttons have semantic labels for screen readers.
  • Touch Target Size: Buttons should be at least 48x48 logical pixels for easy tapping.
  • Visual Feedback: Provide clear pressed and disabled states to meet platform guidelines.
  • Privacy: Buttons must not trigger unexpected permissions or data collection.
  • Performance: Avoid janky animations or slow responses that can cause app rejection.
Self-Check Question

Your app takes 5 seconds to load a screen with multiple ElevatedButtons and TextButtons. What is likely wrong?

  • Excessive widget rebuilds due to non-const buttons and styles.
  • Heavy animations or complex styling inside buttons causing slow rendering.
  • Too many nested widgets increasing build time.
  • Not using Flutter's widget caching or const constructors.
Key Result
ElevatedButton and TextButton are efficient Flutter widgets with minimal performance impact. Optimize by reusing styles and using const constructors. They add moderate app size from material library but ensure accessibility and touch guidelines for store approval.

Practice

(1/5)
1. Which Flutter button widget shows a background color and shadow by default?
easy
A. FlatButton
B. TextButton
C. IconButton
D. ElevatedButton

Solution

  1. Step 1: Understand button types in Flutter

    ElevatedButton has a background and shadow, TextButton is flat with no background.
  2. Step 2: Identify the button with background and shadow

    ElevatedButton is designed to have elevation and background color by default.
  3. Final Answer:

    ElevatedButton -> Option D
  4. Quick Check:

    ElevatedButton = background + shadow [OK]
Hint: ElevatedButton has elevation; TextButton is flat [OK]
Common Mistakes:
  • Confusing TextButton as having background
  • Thinking IconButton has background by default
  • Using deprecated FlatButton
2. Which of the following is the correct syntax to create a TextButton with label 'Click' and a print action on press?
easy
A. TextButton(onClick: () => print('Clicked'), child: Text('Click'))
B. TextButton(child: Text('Click'), onTap: () => print('Clicked'))
C. TextButton(onPressed: () => print('Clicked'), child: Text('Click'))
D. TextButton(onPressed: print('Clicked'), child: 'Click')

Solution

  1. Step 1: Check correct property names

    TextButton uses onPressed for tap events and child for its label widget.
  2. Step 2: Verify syntax correctness

    TextButton(onPressed: () => print('Clicked'), child: Text('Click')) correctly uses onPressed with a lambda and child with Text widget.
  3. Final Answer:

    TextButton(onPressed: () => print('Clicked'), child: Text('Click')) -> Option C
  4. Quick Check:

    onPressed + child: Text = correct syntax [OK]
Hint: Use onPressed and child: Text for buttons [OK]
Common Mistakes:
  • Using onClick instead of onPressed
  • Passing string directly as child instead of Text widget
  • Calling print inside onPressed instead of passing a function
3. What will be the visual difference when running this Flutter code?
ElevatedButton(onPressed: () {}, child: Text('Press'))
TextButton(onPressed: () {}, child: Text('Press'))
medium
A. ElevatedButton has background and shadow; TextButton is flat with only text
B. Both buttons look the same with background and shadow
C. TextButton has background; ElevatedButton is flat
D. Both buttons are invisible because onPressed is empty

Solution

  1. Step 1: Understand default styles of ElevatedButton and TextButton

    ElevatedButton shows background color and shadow; TextButton is flat with no background.
  2. Step 2: Analyze the given code

    Both have onPressed defined, so both are enabled and visible; their styles differ as per their types.
  3. Final Answer:

    ElevatedButton has background and shadow; TextButton is flat with only text -> Option A
  4. Quick Check:

    ElevatedButton = raised, TextButton = flat [OK]
Hint: ElevatedButton raised, TextButton flat text only [OK]
Common Mistakes:
  • Thinking empty onPressed disables button
  • Assuming TextButton has background by default
  • Confusing visual styles of both buttons
4. Identify the error in this Flutter button code:
ElevatedButton(
  onPressed: print('Clicked'),
  child: Text('Tap me'),
)
medium
A. child should be a string, not Text widget
B. onPressed should be a function, not a function call
C. ElevatedButton does not accept onPressed property
D. Missing semicolon after ElevatedButton

Solution

  1. Step 1: Check onPressed assignment

    onPressed expects a function to call when pressed, not the result of a function call.
  2. Step 2: Identify the mistake

    print('Clicked') is called immediately; should be wrapped in a lambda like () => print('Clicked').
  3. Final Answer:

    onPressed should be a function, not a function call -> Option B
  4. Quick Check:

    onPressed = function, not function call [OK]
Hint: Pass function to onPressed, not call it directly [OK]
Common Mistakes:
  • Calling print inside onPressed instead of passing a function
  • Using string instead of Text widget for child
  • Assuming ElevatedButton lacks onPressed
5. You want a button that looks flat but disables itself when pressed. Which Flutter widget and property combination achieves this best?
hard
A. TextButton with onPressed set to null after press
B. ElevatedButton with onPressed set to null after press
C. TextButton with onPressed always non-null
D. ElevatedButton with child set to null

Solution

  1. Step 1: Understand button disabling in Flutter

    Setting onPressed to null disables the button visually and functionally.
  2. Step 2: Choose button style and disabling method

    TextButton is flat; disabling it by setting onPressed to null after press fits the requirement.
  3. Step 3: Eliminate incorrect options

    ElevatedButton is raised, not flat; child cannot disable button; onPressed non-null keeps button enabled.
  4. Final Answer:

    TextButton with onPressed set to null after press -> Option A
  5. Quick Check:

    Disable button by onPressed = null [OK]
Hint: Disable button by setting onPressed to null [OK]
Common Mistakes:
  • Thinking child null disables button
  • Using ElevatedButton for flat style
  • Not setting onPressed to null to disable
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard