【发布时间】:2022-08-04 03:31:26
【问题描述】:
关闭或重新加载应用程序后,我在仪表板屏幕中保留布尔值状态时遇到了挑战。
在仪表板屏幕上,有一个 ListTile,我可以通过点击该卡片将卡片标记为已验证。一旦卡片被点击,我将 bool 验证状态从 false 设置为 true,只要我没有关闭或重新加载应用程序,它就可以正常工作。一旦应用程序关闭或重新加载,布尔状态将设置回 false。
如何在main.dart 中初始化布尔状态,以便在从仪表板屏幕设置后始终保留已验证状态并且可以在应用程序内的任何地方(更多屏幕)使用
这是代码:
仪表板屏幕
class Dashboard extends StatefulWidget {
Dashboard({Key? key}) : super(key: key);
@override
_DashboardState createState() => _DashboardState();
}
class _DashboardState extends State<Dashboard> {
bool _verified = false;
//Retrieving card info from database
bool isFetching = false;
late String cardInfo = retrieveData; //url to php script for retrieving from database
List cardData = [];
getCardData() async {
setState(() => isFetching = true);
var response = await http.get(Uri.parse(cardInfo));
if (response.statusCode == 200) {
setState(() {
cardData = json.decode(response.body);
});
}
setState(() => isFetching = false);
return cardData;
}
@override
void initState() {
super.initState();
getCardData();
_verified;
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(\'Approve Card\'),
centerTitle: true,
),
body: Container(
child: Card(
child: ListView.builder(
physics: const ClampingScrollPhysics(),
shrinkWrap: true,
primary: false,
itemCount: cardData.length, //coming from mysql database
itemBuilder: (context, index) {
return ListTile(
leading: Container(
padding: const EdgeInsets.only(left: 15.0),
alignment: Alignment.center,
height: 50,
width: 50,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(50.0),
image: DecorationImage(
image: NetworkImage(
\'http://url/uploads/${cardData[index][\'logo\']}\'),
fit: BoxFit.cover,
),
),
),
title: Text(
cardData[index][\'name\'],
style: TextStyle(
fontWeight: FontWeight.w600,
),
),
subtitle: Text(
cardData[index][\'email\'],
),
trailing: Bounce(
duration: const Duration(milliseconds: 100),
onPressed: () { //onPressed set verified state to true
//After app is reloaded, it is set back to false
setState(() {
col = iconTip;
_verified = true;
});
var url = Uri.parse(verifiedCards), //http url to php script
response = http.post(url, body: {
\"card\": cardData[index][\'card\'],
});
getCardData();
},
child: Container(
padding: const EdgeInsets.all(15.0),
color: col,
child: Icon(Icons.check_sharp),
),
),
);
}),
),
),
);
}
}
}
Main.dart 屏幕
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
SystemChrome.setPreferredOrientations(
[DeviceOrientation.portraitUp, DeviceOrientation.portraitDown]);
runApp(MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
title: My Flutter App,
theme: ThemeData(
colorScheme: ColorScheme.fromSwatch(
primarySwatch: Colors.green,
backgroundColor: white,
),
),
initialRoute: \'/\',
routes: {
\'/\': (context) => const SplashScreen(),
\'/dashboard\': (context) => const Dashboard(),
},
);
}
}
-
如果您想保存整个应用程序的状态,那么您需要使用“提供程序包”。请检查文档pub.dev/packages/provider
-
是的,我想保存整个应用程序