私のカスタムでは、パッケージを使用してアプリの状態値に応じてAppBar.leading
特定のものを表示したいと考えています。これもプラットフォームによって条件付きで切り替わります。この例を使用したボイラープレートのセットアップに加えて、続行する方法がわかりません。現在の状態を以下に示します。IconButton
Riverpod
IconButton
モデル/flash_status.dart:
enum FlashStatus {
auto,
on,
off,
}
// ignore: missing_return
String flashStatusInStringFormat(FlashStatus flashStatus) {
switch (flashStatus) {
case FlashStatus.auto:
return 'Auto';
case FlashStatus.on:
return 'On';
case FlashStatus.off:
return 'Off';
}
}
プロバイダー/providers.dart:
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:MyApp/models/flash_status.dart';
final flashStatusProvider = StateProvider((ref) => FlashStatus.auto);
lib/main.dart:
import 'package:flutter_riverpod/flutter_riverpod.dart';
void main() {
runApp(
ProviderScope(
child: MyApp(),
),
);
}
class MyApp extends StatelessWidget {...
widgets/tool_bar.dart:
import 'dart:io' show Platform;
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:MyApp/providers/providers.dart';
class ToolBar extends StatelessWidget with PreferredSizeWidget {
@override
final Size preferredSize;
ToolBar({
Key key,
}) : preferredSize = Size.fromHeight(50.0),
super(key: key);
IconData get flashIconAuto =>
Platform.isAndroid ? Icons.flash_auto : CupertinoIcons.bolt_badge_a;
IconData get flashIconOn =>
Platform.isAndroid ? Icons.flash_on : CupertinoIcons.bolt_fill;
IconData get flashIconOff =>
Platform.isAndroid ? Icons.flash_off : CupertinoIcons.bolt_slash;
@override
Widget build(BuildContext context) {
return AppBar(
automaticallyImplyLeading: false,
backgroundColor: Colors.transparent,
leading: IconButton(
icon: Icon(flashIconAuto),
tooltip: 'Turn on camera flash',
onPressed: () {},
),
);
}
}
ここからどこに行けばいいのかわかりません。右Consumer
をラップするために使用する必要がありますか? IconButton
状態に基づいて適切なアイコンを条件付きで表示するにはどうすればよいですか? 状態を更新するためのモデル メソッドがありませんか? onPressed ハンドラはどのように見えますか?