작성
·
323
0
안녕하세요.
GoRouter 이론 부분을 듣다가 context.go('/one'); 가
실행이 되지 않고 버튼을 누르면 먹통입니다.
context.push('/one'); 는 작동을 합니다..
설치버전은 4.2.2
처음에 최신버전을 사용했다가 이전 문의글들 참고해서 4.2.2로 다시 설치했습니다. 이후에 flutter clean , put get, restart 도 했어요
어떤 부분을 확인해야 할까요? 도와주세요...
소스코드 ------
cupertino_icons: ^1.0.2
go_router: ^4.2.2
main.dart
import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';
import 'package:go_router_actual/screen/1_screen.dart';
import 'package:go_router_actual/screen/2_screen.dart';
import 'package:go_router_actual/screen/3_screen.dart';
import 'package:go_router_actual/screen/home_screen.dart';
void main() {
runApp(
_App(),
);
}
class _App extends StatelessWidget {
const _App({Key? key}) : super(key: key);
GoRouter get _router => GoRouter(
initialLocation: '/', // 앱을 처음 시작했을 때 보여주는 화면
// routes - 모든 스크린 정의
routes: [
GoRoute(
path: '/',
builder: (_, state) => HomeScreen(),
routes: [
GoRoute(
path: 'one',
builder: (_, state) => OneScreen(),
),
],
),
],
);
@override
Widget build(BuildContext context) {
return MaterialApp.router(
routeInformationProvider: _router.routeInformationProvider,
routeInformationParser: _router.routeInformationParser,
routerDelegate: _router.routerDelegate,
);
}
}
HomeScreen.dart
import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';
import 'package:go_router_actual/layout/default_layout.dart';
class HomeScreen extends StatelessWidget {
const HomeScreen({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return DefaultLayout(
body: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
ElevatedButton(
onPressed: () {
context.go('/one');
},
child: Text(
'Screen One (Go)',
),
),
],
),
);
}
}
답변 2
0
void main() {
runApp(
_App(),
);
}
class _App extends StatelessWidget {
const _App({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
final GoRouter _router = GoRouter(
initialLocation: '/',
routes: [
GoRoute(
path: '/',
builder: (_, state) => const HomeScreen(),
routes: [
GoRoute(
path: 'one',
builder: (_, state) => const OneScreen(),
routes: [
GoRoute(
path: 'two',
builder: (_, state) => const TwoScreen(),
routes: [
GoRoute(
path: 'three',
builder: (_, state) => const ThreeScreen(),
),
],
),
],
),
],
),
],
);
return MaterialApp.router(
routeInformationProvider: _router.routeInformationProvider,
routeInformationParser: _router.routeInformationParser,
routerDelegate: _router.routerDelegate,
);
}
}
늦었지만 저도 동일한 문제를 겪어서 답글 남겨요. 아래 답글주신것도 해보았지만 동일하게 안되었고, 되는방법은 찾았는데 왜 되는지는 모르겠어요.
해결 방법은
패키지는 4.2.2 이고, _router를 build 안에다가 정의하면 잘 작동합니다. (위 코드 참고)
대신 안되는 부분이 있는데 go('three') 에서 뒤로 돌아올 때, 화면은 3>2>1 로 순서대로 잘 빠져나오는데, defaultLayout에서 보여주는 title: router.location은 변경이 되지않고 one/two/three 그대로 나옵니다.
감사합니다.
0
안녕하세요!
GoRouter 최신 버전이 go() 함수가 실행이 잘 안될때가 있습니다.
제 생각에는 현재 최신 버전이 캐싱되어서 최신 버전 GoRouter가 계속 사용되는 것 같습니다.
flutter clean을 실행해서 완전 제거 해주시고 GoRouter 버전을 "^" <- 캐럿 없이 강제지정해보세요.
그래도 안되면 저희 커뮤니티에서 원격 잡아주세요!
감사합니다!