1. GlobalKey<NavigatorState> 타입의 static한 변수 선언

global 하게 변수들을 담을 수 있는 클래스와 globalKey 타입의 static변수 선언

  • dart file name: candy_global_variable.dart
  • class: CandyGlobalVariable
import 'package:flutter/material.dart';

/// Global variables
/// * [GlobalKey<NavigatorState>]
class CandyGlobalVariable {
  static final GlobalKey<NavigatorState> naviagatorState =
      GlobalKey<NavigatorState>();
}



2. MaterialApp의 navigatorKey 연결

main.dart 파일에 기입된 MaterialApp 찾아서 navigatorKey 연결

...
return MaterialApp(
  
  ... 
  
  navigatorObservers: [observer],
  navigatorKey: CandyGlobalVariable.naviagatorState,
  routes: CandyRouter.routes,
  home: RootPage(authSnapshot: authSnapshot),
);

navigatorKey: CandyGlobalVariable.naviagatorState 연결



3. context 얻어오기

Q. context를 얻어오는 방법?

A.

SchedulerBinding.instance.addPostFrameCallback((_) {
  final context = CandyGlobalVariable.naviagatorState.currentContext;
}

를 통해 현재 context를 얻어와서, provider 접근을 할 수 있고, navigator.push()를 할 수 있음

아래 코드는 showCupertinoModalBottomSheet()호출한 예제 코드

import 'candy_message_handler.dart';

class ShowScreenHandler extends CandyMessageHandler {
  
  void handle(RemoteMessage message) {
    final data = message.data;

    SchedulerBinding.instance.addPostFrameCallback((_) {
      final context = CandyGlobalVariable.naviagatorState.currentContext;

      showCupertinoModalBottomSheet(
        expand: true,
        context: context,
        builder: (context, _) => const CustomView(),
      );
    });
  }
}
profile
𝙸 𝚊𝚖 𝚊 𝚌𝚞𝚛𝚒𝚘𝚞𝚜 𝚍𝚎𝚟𝚎𝚕𝚘𝚙𝚎𝚛 𝚠𝚑𝚘 𝚎𝚗𝚓𝚘𝚢𝚜 𝚍𝚎𝚏𝚒𝚗𝚒𝚗𝚐 𝚊 𝚙𝚛𝚘𝚋𝚕𝚎𝚖. 🇰🇷👩🏻‍💻

0개의 댓글