Flutterやろうよ!!! 3at TECH
Flutterやろうよ!!! 3 - 暇つぶし2ch1019:デフォルトの名無しさん
22/03/22 10:20:59.27 jlubKDvZa.net
>>982
ビルド中にmarkNeedsBuildするなってエラーと勘違いしてない?

1020:デフォルトの名無しさん
22/03/22 12:32:01.13 qL0EhgHv0.net
>>983
ああすまん、それだ。

1021:デフォルトの名無しさん
22/03/22 12:39:39.24 0dITcBto0.net
>>982
Timer.run()で不具合回避すると、不具合が発生しないことに保証が立たないから怖いべ…
スマホアプリなら実機で動作確認できればリリースしていいかもしれないががががが

1022:デフォルトの名無しさん
22/03/22 12:48:15.64 0dITcBto0.net
こんなブログを見つけた
URLリンク(zuma-lab.com)
WidgetsBinding.instance.addPostFrameCallbackを使っておけば大丈夫だと思う

1023:デフォルトの名無しさん
22/03/22 13:28:25.10 Me2E83wOa.net
>>986
それも違うでしょ
BuildContextを非同期に使うとunmountされた後になるかもしれんから危険なんよ
内部の動作を知らずに使ってるの?

1024:デフォルトの名無しさん
22/03/22 13:48:31.36 0dITcBto0.net
>>987
すまん
>>986はmarkNeedsBuildのエラーを解決する方法にtimer.run()を使用するのは不適当だと言いたかった

1025:デフォルトの名無しさん
22/03/22 20:25:21


1026:.61 ID:5/WsGxhDd.net



1027:デフォルトの名無しさん
22/03/22 23:20:49.18 UjWqblhl0.net
新書まだ?

1028:デフォルトの名無しさん
22/03/23 00:45:16.84 PKuC3Xpv0.net
final navigateRequestStateProvider =
ChangeNotifierProvider.autoDispose<NavigateRequestState>((ref) => NavigateRequestState());
class CustomNavigator {
/*
『Do not use BuildContexts across async gaps』を出さないために、
魔法を実行するNavigatorのラッパークラス
Notes:
NavigateRequestState.updateWith()をコールして、ページ遷移のリクエストを登録
NavigateRequestState.updateWith()のnotifyListeners()コール後に、refのWidgetが再buildされる
build後に、CustomNavigator._checkNavigateRequestが実行される
_checkNavigateRequestは、NavigateRequestStateにページ遷移のリクエストがあれば実行する
*/
final Key key;
final BuildContext context;
final WidgetRef ref;
NavigateRequestState? state;
CustomNavigator({required this.key, required this.context, required this.ref}) {
// 魔法
state = ref.watch(navigateRequestStateProvider);
WidgetsBinding.instance.addPostFrameCallback((_) => _checkNavigateRequest());

1029:デフォルトの名無しさん
22/03/23 00:45:57.58 PKuC3Xpv0.net
自分はこんな感じで『Do not use BuildContexts across async gaps』を回避した

1030:デフォルトの名無しさん
22/03/23 11:52:20.73 n9fyk9vz0.net
根本をわかってない感じ

1031:デフォルトの名無しさん
22/03/23 18:18:13.67 PKuC3Xpv0.net
import 'package:flutter/cupertino.dart';
class CustomNavigator {
static final GlobalKey<NavigatorState> navigatorKey = GlobalKey<NavigatorState>();
static void pop() {
navigatorKey.currentState?.pop();
}
static void pushNamed({required String nextPagePath}) {
navigatorKey.currentState?.pushNamed(nextPagePath);
}
static void pushReplacementNamed({required String nextPagePath}) {
navigatorKey.currentState?.pushReplacementNamed(nextPagePath);
}
static void pushNamedAndRemoveUntil(
{required String nextPagePath, required routePagePath}) {
navigatorKey.currentState?.pushNamedAndRemoveUntil(nextPagePath, ModalRoute.withName(routePagePath));
}
}
160行の力作が20行に縮んだ…

1032:デフォルトの名無しさん
22/03/27 01:25:01.24 PWZbTKss0.net
出た!カプチーノ厨w

1033:デフォルトの名無しさん
22/03/27 07:00:20.57 0+/JwELe0.net
CurrentStateの値が古いままページ遷移しようとしてエラーを出すな
結局、最新のコンテキストで常にページ遷移するように、>>991の書き方をするしかなかった
あるいは、非同期処理の完了を待ってページ遷移させる処理の実装を諦めるか
あるいは、StatefulWidgetで全てのコードを書き直すか

1034:デフォルトの名無しさん
22/03/27 15:41:06.11 VOH9Pz/z0.net
んなことないでしょー
エラーみせて

1035:デフォルトの名無しさん
22/03/28 01:45:06.69 K9Q/GGg50.net
すみません。自己解決しました。コード上にこんな箇所があった…
SchedulerBinding.instance.addPostFrameCallback((_) {
SchedulerBinding.instance.addPostFrameCallback((_) {
CustomNavigator.pushReplacementNamed( '/sign_in');
}
}
ただ、GlobalKey<NavigatorState>を使うとホットパス以外にも
遷移できてしまう仕様が気になってます

1036:デフォルトの名無しさん
22/03/28 07:51:40.41 wpFSl1+b0.net
埋め

1037:デフォルトの名無しさん
22/03/28 07:52:04.42 wpFSl1+b0.net
埋め

1038:1001
Over 1000 Thread.net
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 231日 11時間 33分 52秒

1039:過去ログ ★
[過去ログ]
■ このスレッドは過去ログ倉庫に格納されています


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch