如何在 Flutter 中使用 Riverpod 处理基于应用程序状态的条件图标交换?

问题描述

在我的自定义 #include <regex> #include <string> std::regex wildcardToRegex(const std::string& wildcard,bool caseSensitive = true) { // Note It is possible to automate checking if filesystem is case sensitive or not (e.g. by performing a test first time this function is ran) std::string regexString{ wildcard }; // Escape all regex special chars: regexString = std::regex_replace(regexString,std::regex("\\\\"),"\\\\"); regexString = std::regex_replace(regexString,std::regex("\\^"),"\\^"); regexString = std::regex_replace(regexString,std::regex("\\."),"\\."); regexString = std::regex_replace(regexString,std::regex("\\$"),"\\$"); regexString = std::regex_replace(regexString,std::regex("\\|"),"\\|"); regexString = std::regex_replace(regexString,std::regex("\\("),"\\("); regexString = std::regex_replace(regexString,std::regex("\\)"),"\\)"); regexString = std::regex_replace(regexString,std::regex("\\{"),"\\{"); regexString = std::regex_replace(regexString,"\\}"); regexString = std::regex_replace(regexString,std::regex("\\["),"\\["); regexString = std::regex_replace(regexString,std::regex("\\]"),"\\]"); regexString = std::regex_replace(regexString,std::regex("\\+"),"\\+"); regexString = std::regex_replace(regexString,std::regex("\\/"),"\\/"); // Convert wildcard specific chars '*?' to their regex equivalents: regexString = std::regex_replace(regexString,std::regex("\\?"),"."); regexString = std::regex_replace(regexString,std::regex("\\*"),".*"); return std::regex(regexString,caseSensitive ? std::regex_constants::ECMAScript : std::regex_constants::icase); } bool wildmatch(const std::string& input,const std::string& wildcard) { auto rgx = wildcardToRegex(wildcard); return std::regex_match(input,rgx); } 中,我想根据应用状态值使用 AppBar.leading 包显示特定的 IconButton。这个 Riverpod 也会根据平台有条件地切换。除了使用这个 example 的一些设置样板,我不知道如何继续。我将在下面展示我目前的状态:

模型/flash_status.dart:

IconButton

providers/providers.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';
  }
}

lib/main.dart:

import 'package:flutter_riverpod/flutter_riverpod.dart';

import 'package:MyApp/models/flash_status.dart';

final flashStatusProvider = StateProvider((ref) => FlashStatus.auto);

小部件/tool_bar.dart:

import 'package:flutter_riverpod/flutter_riverpod.dart';

void main() {
  runApp(
    ProviderScope(
      child: MyApp(),),);
}

class MyApp extends StatelessWidget {...

我不知道从哪里开始,我必须使用 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 对吗?如何根据状态有条件地显示正确的图标?我是否缺少更新状态的模型方法? onPressed 处理程序是什么样的?

解决方法

date_entry = '12 25 1990'
res = datetime.datetime.strptime(date_entry,'%m %d %Y')
print(res.strftime("%B,%d,%Y"))

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...