프로그래밍 공부 메모/flutter

BuildContext / Snack Bar 자세히는 모름...

jjs815 2022. 5. 27. 23:16

스넥바는 가벼운 메시지를 띄우는 기능이다

이 스넥바가 그려지는 위치가 ' of 메소드 ' 통해 scaffold 위젯에서 그려져야 하는데 에러가 난다...

' of 메소드 '의 역할은 해당 가까운 ' context ' (여기에선 scaffold 클래스)가 있는 클래스를 찾가라는 것이다

하지만 결과는 scaffold클래스를 찾이 못하고 부모 클래스인 mypage를 찾아가보고 그래도 없으면 그 위로 계속 찾아가지만 에러가 발생한다

 

해결 방법으로 BuilderContext 위젯을 생성하여 찾아가자~

Scaffold 위젯 밑에 BuilderContext 위젯을 위치 시켜 Scaffold.of 메소드가 그 위에는 바로 Scaffold가 있다는 것을 찾을 수 있게 해준다

 

예제 코드)

import 'package:flutter/material.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const MyPage(),
    );
  }
}

class MyPage extends StatelessWidget {
  const MyPage({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('snack bar'),
        centerTitle: true,
      ),
      body: Builder(builder: (context) {
        return Center(
          child: FlatButton(
            color: Colors.red,
            onPressed: () {
              Scaffold.of(context).showSnackBar(
                SnackBar(
                  content: Text('hello'),
                ),
              );
            },
            child: Text(
              'show me',
              style: TextStyle(
                color: Colors.white,
              ),
            ),
          ),
        );
      }),
    );
  }
}

 

반응형