如何解决如何在 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"))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。