前提・実現したいこと
・アプリ1を起動した状態でアプリ2を起動すると、アプリ2がアクティブ(最前列に表示される)になり、
アプリ1がノンアクティブ(2列目)になると思います。
上記のようにアクティブでない状態から、アプリをアクティブに戻した際に処理を行いたい場合、
どのように記載するばよろしいのでしょうか?
作成したサンプルの場合、アプリをアクティブに戻した際に30分以上経過していたら現在の時間を表示するようにしたいと考えております。
お手数ではございますが御教唆お願いいたします
発生している問題・エラーメッセージ
アプリをアクティブ(最前列)にした際に通る関数等がわかりませんでした
該当のソースコード
dart
1// main.dart 2import 'package:display_time/app_page.dart'; 3import 'package:display_time/app_state.dart'; 4import 'package:flutter/material.dart'; 5import 'package:flutter_state_notifier/flutter_state_notifier.dart'; 6import 'package:provider/provider.dart'; 7 8void main() { 9 runApp( 10 MultiProvider( 11 providers: [ 12 StateNotifierProvider<AppController, AppState>( 13 create: (_) => AppController(), 14 ), 15 ], 16 child: MyApp(), 17 ), 18 ); 19}
dart
1// app_state.dart 2import 'package:flutter/foundation.dart'; 3import 'package:flutter/material.dart'; 4import 'package:freezed_annotation/freezed_annotation.dart'; 5import 'package:state_notifier/state_notifier.dart'; 6 7part 'app_state.freezed.dart'; 8 9 10abstract class AppState with _$AppState { 11 const factory AppState({ 12 DateTime time, 13 }) = _AppState; 14} 15 16class AppController extends StateNotifier<AppState> with LocatorMixin { 17 AppController() : super(const AppState()); 18 19 20 void initState() { 21 state = state.copyWith(time: DateTime.now()); 22 } 23 24 void compareTime() { 25 print('compareTime: ${DateTime.now()}'); 26 final _now = DateTime.now(); 27 // 30分以上経っていたら今の時間を入れる 28 if (_now.compareTo(state.time.add(const Duration(minutes: 30))) == 1) { 29 state = state.copyWith(time: _now); 30 } 31 } 32}
dart
1// app_page.dart 2import 'package:display_time/app_state.dart'; 3import 'package:flutter/material.dart'; 4import 'package:provider/provider.dart'; 5 6class MyApp extends StatelessWidget { 7 8 Widget build(BuildContext context) { 9 return MaterialApp( 10 title: 'Time Demo', 11 theme: ThemeData( 12 primarySwatch: Colors.blue, 13 ), 14 home: const HomePage(), 15 ); 16 } 17} 18 19class HomePage extends StatelessWidget { 20 const HomePage({Key key}) : super(key: key); 21 22 23 Widget build(BuildContext context) { 24 // ここではアクティブに戻した時には実行されませんでした 25 // context.watch<AppController>().compareTime(); 26 27 return Scaffold( 28 appBar: AppBar( 29 title: const Text('Time Demo'), 30 ), 31 body: Text( 32 context.select((AppState value) => value.time.toString()), 33 ), 34 ); 35 } 36}
dart
1// app_state.freezed.dart 2// ターミナルでflutter packages pub run build_runner buildを実行すると作成されます
dart
1// pubspe.yaml 2name: display_time 3description: A new Flutter application. 4 5publish_to: 'none' # Remove this line if you wish to publish to pub.dev 6 7version: 1.0.0+1 8 9environment: 10 sdk: ">=2.7.0 <3.0.0" 11 12dependencies: 13 flutter: 14 sdk: flutter 15 freezed_annotation: 16 flutter_state_notifier: ^0.6.1 17 provider: ^4.3.2+2 18 19dev_dependencies: 20 flutter_test: 21 sdk: flutter 22 build_runner: 23 freezed: 24 pedantic_mono: any 25 26flutter: 27 uses-material-design: true
補足情報(FW/ツールのバージョンなど)
Flutter 1.24.0-3.0.pre • channel dev
Dart 2.11.0 (build 2.11.0-242.0.dev)
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。