我正在嘗試從云存盤中獲取檔案夾的名稱,遍歷它們并將它們添加到串列中,然后在串列視圖構建器中使用該串列。我還想問你們這是否是從 Firebase 存盤中獲取檔案夾名稱的正確方法。如果您有時間閱讀本文,請提前致謝!我的firebase結構: firebase云攪拌結構
下面是我的模型類:
class FirebaseFolder {
final Reference ref;
final String name;
final String url;
const FirebaseFolder({
required this.ref,
required this.name,
required this.url,
});
}
下面是我實作它的儀表板代碼:
class DashBoard extends StatefulWidget {
const DashBoard({Key? key}) : super(key: key);
@override
State<DashBoard> createState() => _DashBoardState();
}
class _DashBoardState extends State<DashBoard> {
late List<String> folderYear = [];
late Future<List<FirebaseFolder>> listResult;
@override
void initState() {
super.initState();
getFolders();
}
Future<List<String>> getFolders() async {
final storageRef = FirebaseStorage.instance.ref().child("front end");
final listResult = await storageRef.listAll();
for (var prefix in listResult.prefixes) {
folderYear.add(prefix.name);
}
return folderYear;
}
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.white,
appBar: kAppBar('DashBoard'),
body: FutureBuilder<List<FirebaseFolder>>(
future: listResult,
builder: (context, snapshot) {
switch (snapshot.connectionState) {
case ConnectionState.waiting:
return const Center(
child: spinkitLines,
);
default:
final folders = snapshot.data;
return Column(
children: [
const SizedBox(
height: 30.0,
),
const Center(
child: Text(
'Tap to choose semester',
style: kPlaceholderStyle,
),
),
const SizedBox(
height: 30,
),
Expanded(
child: ListView.builder(
itemCount: folderYear.length,
itemBuilder: (context, index) {
// final folder = folders![index];
return Container(
height: 80,
decoration: const BoxDecoration(
color: Colors.black,
borderRadius: BorderRadius.all(Radius.circular(20)),
boxShadow: [
BoxShadow(
color: Color.fromARGB(75, 0, 0, 0),
blurRadius: 4,
spreadRadius: 0,
offset: Offset(0, 4))
],
),
child: Center(
child: Padding(
padding: const EdgeInsets.all(5.0),
child: Text(
folderYear[index],
style: kCardTitleStyle,
),
),
),
);
},
),
)
],
);
}
},
),
);
}
}
uj5u.com熱心網友回復:
可以為空的變數是您想要的,而不是后期變數。要檢查是否已初始化某些內容,您應該使用可為空的變數,并且您的代碼已經設定為這樣做。
只是改變
late Future<List<FirebaseFolder>> listResult;
至
Future<List<FirebaseFolder>>? listResult;
uj5u.com熱心網友回復:
問題在于listResult變數,這部分沒問題
class _DashBoardState extends State<DashBoard> {
late List<String> folderYear = [];
late Future<List<FirebaseFolder>> listResult;
但是在getFolders()
Future<List<String>> getFolders() async {
final storageRef = FirebaseStorage.instance.ref().child("front end");
final listResult = await storageRef.listAll(); // here you are creatring local variable
for (var prefix in listResult.prefixes) {
folderYear.add(prefix.name);
}
return folderYear;
}
它應該沒有final關鍵字
listResult = await storageRef.listAll();
此外,您可以查看Flutter:Combine Multiple Future Tasks
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/497913.html
