Я пытался реализовать Card Carousel в своем приложении с библиотекой CardCarousel следующим образом:
...
List cardList=[
Item1(),
Item2(),
Item3(),
Item4()
];
...
Widget showCardCarousel () {
return CarouselSlider(
options: CarouselOptions(height: 200.0),
items: cardList.map((card){
return Builder(
builder: (BuildContext context){
return Container(
height: MediaQuery.of(context).size.height*0.30,
width: MediaQuery.of(context).size.width,
child: Card(
color: Colors.blueAccent,
child: card,
)
);
}
);
}).toList()
);
}
И поместите каждую карту в такой класс:
class Item1 extends _HomePageState{
@override
Widget build(BuildContext context) {
return Stack(
children: <Widget>[
Card(
child: Column(
children: <Widget> [
InkWell(
onTap: () {},
child: Container(
width: 100.0.w,
height: 22.77.h,
decoration: BoxDecoration(
image: DecorationImage(
image: AssetImage("assets/images/walk_ill.png"),
fit: BoxFit.fill,
alignment: Alignment.topCenter,
),
),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
Column(
crossAxisAlignment: CrossAxisAlignment.end,
children: [
Text(
MissionData1[0],
overflow: TextOverflow.ellipsis,
style: TextStyle(
fontWeight: FontWeight.bold,
fontFamily: 'Roboto',
color: Colors.white,
fontSize: 15.0.sp
),
),
//Icon(),
]
),
]
)
)
)],
)),
]);
}
}
Проблема возникает из-за желания отобразить на экране текст MissionData1 [0], полученный из функции в основном классе программы.
class HomePage extends StatefulWidget {
HomePage({Key key, this.auth, this.userId, this.logoutCallback, this.profile})
: super(key: key);
final Auth auth;
final VoidCallback logoutCallback;
final String userId;
final ProfilePage profile;
@override
State<StatefulWidget> createState() => new _HomePageState();
}
class _HomePageState extends State<HomePage> {
...
List<String> MissionData1 = [];
...
Future<void> getMission1() async{
DocumentSnapshot snap = await widget.auth.MissionRetriever1();
Map<String,dynamic> data = snap.data();
setState(() {
MissionData1.add(data['Q_Category']);
MissionData1.add(data['Q_Name']);
MissionData1.add(data['Q_Description']);
MissionData1.add(data['Q_Score']);
MissionData1.add(data['Q_Target']);
});
}
Это возвращает мне:
The following StackOverflowError was thrown building RootPage(state: _RootPageState#b44aa):
Stack Overflow
The relevant error-causing widget was:
RootPage file:///C:/Users/grond/AndroidStudioProjects/goodgoals_android/lib/main.dart:36:23
When the exception was thrown, this was the stack:
#0 _LinkedHashMapMixin._getValueOrData (dart:collection-patch/compact_hash.dart:331:3)
#1 Firebase.app (package:firebase_core/src/firebase.dart:70:10100)
#2 FirebaseAuth.instance (package:firebase_auth/src/firebase_auth.dart:37:47)
#3 new _HomePageState (package:goodgoals_android/pages/home_page.dart:57:51)
#4 new _HomePageState (package:goodgoals_android/pages/home_page.dart)
...
Это полный код main.dart:
//Import section
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:sizer/sizer.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:firebase_core/firebase_core.dart';
import 'package:goodgoals_android/pages/root_page.dart';
import 'package:goodgoals_android/services/asyncservice.dart';
//Run section
void main() async
{
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
SystemChrome.setEnabledSystemUIOverlays([]);
runApp(new MyApp());
}
class MyApp extends StatelessWidget
{
@override
Widget build(BuildContext context)
{
return LayoutBuilder(
builder:(context, constraints) {
return OrientationBuilder(
builder: (context, orientation) {
SizerUtil().init(constraints, orientation);
return MaterialApp(
debugShowCheckedModeBanner: false,
theme: new ThemeData(
primarySwatch: Colors.blue,
),
home: new RootPage(auth: new Auth()));
},
);
},
);
}
}
Добавлена полная ошибка
И какой виджет находится в строке 36 main.dart?
home: new RootPage (auth: new Auth ()));
Судя по трассировке стека, это как-то связано с созданием экземпляра FirebaseAuth, можете ли вы включить код для этого бита?
Добавлен полный код main.dart
Извините, мне следовало быть более конкретным: вы создали экземпляр FirebaseAuth в строке 57 home_page.dart? Если да, можете ли вы добавить это вместо этого.
Ах да, это последняя строка FirebaseAuth _firebaseAuth = FirebaseAuth.instance;
Не уверен, связано ли это, но согласно flutterfire docs, вы должны инициализировать FirebaseAuth в виджете.
Хорошо, я попробовал, но ошибка осталась прежней





Не могли бы вы опубликовать точное сообщение об ошибке?