颤振:本地化。把 AppLocalizations.of(context)!.字符串类型和 &&访问另一个类中的列表的对象列表中的标头



我现在可以添加AppLocalizations.of(context(!。头到列表,但是我如何在不得到空列表的情况下调用另一个类中的列表??

class DonationCategory extends StatefulWidget {
const DonationCategory(
{Key? key,
required this.position,
required this.name,
required this.iconImage,
required this.description,
required this.images,
required this.url})
: super(key: key);
final int position;
final String name;
final String iconImage;
final String description;
final List<String> images;
final Uri url;
@override
State<DonationCategory> createState() => 
_DonationCategoryState();
}
List<DonationCategory> donate = [];
class _DonationCategoryState extends State<DonationCategory> {
@override
void initState() {
super.initState();
SchedulerBinding.instance?.addPostFrameCallback((_) {
setState(() {
donate = [
DonationCategory(
position: 1,
name: AppLocalizations.of(context)!.water, //use localization here
iconImage: 'assets/images/who.gif',
description:
"“Ensure availability and sustainable management of water and sanitation for all”.  ",
images: const [
'assets/images/who.gif',
'assets/images/who2.gif',
// 'assets/images/water02.jpg',
// 'assets/images/water02.jpg',
// 'assets/images/water02.jpg',
],
url: Uri.dataFromString(
'<html><body><iframe src="https://ourworldindata.org/grapher/death-rates-unsafe-water" loading="lazy" style="width: 100%; height: 600px; border: 0px none;"></iframe></body></html>',
mimeType: 'text/html'),
),
DonationCategory(
position: 2,
name: AppLocalizations.of(context)!.food,
iconImage: 'assets/images/food2.png',
description:
"The second of the UN's,
images: [
// 'https://cdn.pixabay.com/photo/2011/12/13/14/39/venus-11022_1280.jpg',
// 'https://image.shutterstock.com/image-photo/solar-system-venus-second-planet-600w-515581927.jpg'
],
url: Uri.dataFromString(
'<html><body><iframe src="https://ourworldindata.org/grapher/global-hunger-index?country=IND~BGD~NPL~PAK" loading="lazy" style="width: 100%; height: 600px; border: 0px none;"></iframe></body></html>',
mimeType: 'text/html'),
),
DonationCategory(
position: 3,
name: AppLocalizations.of(context)!.health,
iconImage: 'assets/images/hospital2.jpg',
description:
"In several . “Small contributions quickly add up if enough people take up the cause.”",
images: [
// 'https://cdn.pixabay.com/photo/2011/12/13/14/31/earth-11015_1280.jpg',
// 'https://cdn.pixabay.com/photo/2011/12/14/12/11/astronaut-11080_1280.jpg',
// 'https://cdn.pixabay.com/photo/2016/01/19/17/29/earth-1149733_1280.jpg',
// 'https://image.shutterstock.com/image-photo/3d-render-planet-earth-viewed-600w-1069251782.jpg'
],
url: Uri.dataFromString(
'<html><body><iframe src="https://ourworldindata.org/grapher/dalys-rate-from-all-causes" loading="lazy" style="width: 100%; height: 600px; border: 0px none;"></iframe></body></html>',
mimeType: 'text/html'),
),
DonationCategory(
position: 4,
name: AppLocalizations.of(context)!.education,
iconImage: 'assets/images/educated.png',
description:
"It is estimated that 101 million additional children and young people (from grades 1 to 8)  ",
images: [],
url: Uri.dataFromString(
'<html><body><iframe src="https://ourworldindata.org/grapher/out-of-school-girls-of-primary-school-age-by-world-region" loading="lazy" style="width: 100%; height: 600px; border: 0px none;"></iframe></body></html>',
mimeType: 'text/html'),
),
DonationCategory(
position: 5,
name: AppLocalizations.of(context)!.adequacy,
iconImage: 'assets/images/poor.png',
description:
"Ending poverty to live in extreme poverty by 2030.",
images: [],
url: Uri.dataFromString(
'<html><body><iframe src="https://ourworldindata.org/grapher/size-poverty-gap-countries?country=~BRA" loading="lazy" style="width: 100%; height: 600px; border: 0px none;"></iframe></body></html>',
mimeType: 'text/html'),
),
];
});
});

现在我想打电话给这个班级的捐赠

import 'package:flutter/material.dart';
import 'package:sdg_app2/constants.dart';
import 'package:flutter_swiper/flutter_swiper.dart';
import 'donation_data.dart';
import 'donate_details.dart';
class GivePage extends StatefulWidget {
@override
_GivePageState createState() => _GivePageState();
}
class _GivePageState extends State<GivePage> {
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: kSecondaryColor,
body: Container(
decoration: const BoxDecoration(
gradient: LinearGradient(
colors: [kPrimaryColor, kSecondaryColor],
begin: Alignment.topCenter,
end: Alignment.bottomCenter,
stops: [0.3, 0.7])),
child: SafeArea(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Padding(
padding: const EdgeInsets.all(26.0),
child: Column(
children: <Widget>[
const Text(
'Give Support',
style: TextStyle(
fontFamily: 'Quicksand',
fontSize: 30,
color: Color(0xffffffff),
fontWeight: FontWeight.w900,
),
textAlign: TextAlign.left,
),
DropdownButton<String>(
items: const [
DropdownMenuItem(
child: Text(
'Where Needed',
style: TextStyle(
fontFamily: 'Quicksand',
fontSize: 24,
color: Color(0x7cdbf1ff),
fontWeight: FontWeight.w500,
),
textAlign: TextAlign.left,
),
),
],
onChanged: (value) {},
icon: const Padding(
padding: EdgeInsets.only(left: 16.0),
),
underline: const SizedBox(),
),
],
),
),
Container(
height: 500,
padding: const EdgeInsets.only(left: 32),
child: Swiper(
itemCount: donate.length,
itemWidth: MediaQuery.of(context).size.width - 2 * 64,
layout: SwiperLayout.STACK,
pagination: const SwiperPagination(
builder:
DotSwiperPaginationBuilder(activeSize: 20, space: 4),
),
itemBuilder: (context, index) {
return InkWell(
onTap: () {
Navigator.push(
context,
PageRouteBuilder(
pageBuilder: (context, a, b) => donationdetail(
donationInfo: donate[index], //I want to access donate here but it gives me an empty list
),
),
);
},
child: Stack(
children: <Widget>[
Column(
children: <Widget>[
const SizedBox(height: 100),
Card(
elevation: 8,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(32),
),
color: Colors.white,
child: Padding(
padding: const EdgeInsets.all(32.0),
child: Column(
crossAxisAlignment:
CrossAxisAlignment.start,
children: <Widget>[
const SizedBox(height: 100),
Text(
donate[index].name.toString(), //I want to access donate here but it gives me an empty list
style: const TextStyle(
fontFamily: 'Quicksand',
fontSize: 35,
color: Color(0xff47455f),
fontWeight: FontWeight.w900,
),
textAlign: TextAlign.left,
),
const Text(
'Where Needed',
style: TextStyle(
fontFamily: 'Quicksand',
fontSize: 23,
color: Colors.black,
fontWeight: FontWeight.w500,
),
textAlign: TextAlign.left,
),
const SizedBox(height: 32),
Row(
children: const <Widget>[
Text(
'Know more',
style: TextStyle(
fontFamily: 'Avenir',
fontSize: 18,
color: kPrimaryColor,
fontWeight: FontWeight.w500,
),
textAlign: TextAlign.left,
),
Icon(
Icons.arrow_forward,
color: kSecondaryColor,
),
],
),
],
),
),
),
],
),
Positioned(
right: 22,
bottom: 60,
child: Text(
donate[index].position.toString(), //I want to access donate here but it gives me an empty list
style: TextStyle(
fontFamily: 'Quicksand',
fontSize: 200,
color: Colors.black.withOpacity(0.08),
fontWeight: FontWeight.w900,
),
textAlign: TextAlign.left,
),
),
],
),
);
},
),
),
],
),
),
));

}}

我只需要知道如何在不返回空列表的情况下访问其他类的捐赠。

请任何人分享一个有效的解决方案,或者编辑我的代码?谢谢大家。

解决此问题的简单方法是初始化initState中的列表。

List<DonationCategory> donate=[]; // declare like this
@override
void initState() {
super.initState();
SchedulerBinding.instance?.addPostFrameCallback((_) {
setState(() {
donate = [
DonationCategory(
1, 
name: AppLocalizations.of(context) !.header, //use localization here
iconImage: 'assets/images/who.gif', ... ),
];
});
});
}

最新更新