【问题标题】:Firestore flutter app gets error after 2 seconds?Firestore 颤振应用程序在 2 秒后出现错误?
【发布时间】:2020-09-27 16:05:06
【问题描述】:

我正在为我的计划应用程序使用 flutter_calendar_carousel 包。我正在从 firestore 获取数据,所以它显示了大约 2 秒,然后我收到此错误“package:flutter/src/widgets/container.dart': Failed assertion: line 316 pos 15: 'padding == null | | padding.isNonNegative': 不正确。”

这是我的代码。

import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:flutter_calendar_carousel/flutter_calendar_carousel.dart' show CalendarCarousel;
import 'package:flutter_calendar_carousel/classes/event.dart';
import 'package:flutter_calendar_carousel/classes/event_list.dart';
import 'package:intl/intl.dart' show DateFormat;


bool onDarkMode = false;

class MonthPageTest extends StatefulWidget {
  @override
  _MonthPageTestState createState() => _MonthPageTestState();
}

class _MonthPageTestState extends State<MonthPageTest> {




  final databaseReference = Firestore.instance.collection("Planerino").document("UserSettings");
  final databaseRef = Firestore.instance.collection("Eventhmonth");



  darkmode() async{
    try {
      databaseReference.updateData({'Darkmode': onDarkMode});
    }catch (e) {
      print(e.toString());
    }
  }


  @override
  void initState(){
    super.initState();
  }

  @override
  void dispose(){
    super.dispose();
  }


    toggleButton(){
    setState(() {
      onDarkMode = !onDarkMode;
    });
    darkmode();
    }

    //calender
    DateTime _currentDate = DateTime.now();


    static Widget _eventIcon = new Container(
      width: 40.0,
      height: 40.0,
    decoration: new BoxDecoration(
        color: Colors.white,
        borderRadius: BorderRadius.all(Radius.circular(1000)),
        border: Border.all(color: Colors.blue, width: 6.0)),
    child: new Icon(
      Icons.person,
      color: Colors.amber,
      size: 40.0,
    ),
  );



  //function
    EventList<Event> _markedDateMap = new EventList<Event>(
    events: {
      new DateTime(2020, 6, 24): [
        new Event(
          date: new DateTime(2020, 6, 13),
          icon: _eventIcon,
          dot: Container(
            margin: EdgeInsets.symmetric(horizontal: 10.0, vertical: 10.0),
            color: Colors.red,
            ),
          ),
        ],
      },
    );


  Widget builderino(BuildContext context){
    return StreamBuilder(
      stream: databaseRef.snapshots(),
      builder: (context, dataSnapshot){
          var ref = dataSnapshot.data.documents;
          for (var i = 0; i < ref.length; i++) {
            String valueString = ref[i]['color'].split('(0x')[1].split(')')[0];
              int value = int.parse(valueString, radix: 16);
              Color newColor = new Color(value);
            _markedDateMap.add(new DateTime(ref[i]['year'], ref[i]['month'], ref[i]['day']), 
            Event(
              date: new DateTime(2020, 6, 13),
              icon: _eventIcon,
              dot: Container(
                child: Padding(
                padding: EdgeInsets.only(top: 90.0),
                child: Container( alignment: Alignment.center, child: Text(ref[i]['description'], style: TextStyle(fontSize: 15.0, fontWeight: FontWeight.w300), textAlign: TextAlign.center,)),
                  ),
                margin: EdgeInsets.symmetric(horizontal: 10.0, vertical: 10.0),
                decoration: BoxDecoration(color: newColor),
                ),
            ));
          }

          return CalendarCarousel<Event>(
        onDayPressed: (DateTime date, List<Event> events) {
          this.setState(() => _currentDate = date);
          events.forEach((event) => print(event.title));
        },
        weekendTextStyle: TextStyle(
          color: Colors.red,
          fontSize: 28.0,
        ),
        markedDatesMap: _markedDateMap,
        markedDateIconBuilder: (event) {
        return event.dot;
      },
        showIconBehindDayText: true,
        markedDateShowIcon: true,
        markedDateIconMaxShown: 1000,
        todayButtonColor: Colors.black12,
        markedDateMoreShowTotal: true,
        headerTextStyle: TextStyle(fontSize: 34.0, color: Colors.blue[300]),
        daysTextStyle: TextStyle(fontSize: 28.0, color: onDarkMode ? Colors.white : Colors.black45),
        todayTextStyle: TextStyle(fontSize: 28.0, color: onDarkMode ? Colors.white : Colors.black45),
        weekdayTextStyle: TextStyle(fontSize: 28.0),
        );
        }
      );
    }




  @override
  Widget build(BuildContext context) {
    return Scaffold(
    body: Container(
      color: onDarkMode ? Colors.black87 : Colors.white,
      margin: EdgeInsets.symmetric(horizontal: 16.0),
      child:  builderino(context),
    ),
    );
  }
}

我需要让它异步还是有什么问题?

【问题讨论】:

  • 当我第一次启动它时,我没有收到任何错误,当我重新启动它时就是这样。

标签: firebase flutter google-cloud-firestore


【解决方案1】:

来自这个SO answer TLDR

Flutter 有一种复杂但有效的算法来渲染其小部件。 Margins 和 Paddings 在运行时进行分析,最终确定小部件的大小和位置。当您尝试发出负边距时,您是在故意创建一个无效的布局,其中一个小部件以某种方式退出了它应该占据的空间。

考虑阅读文档here.

【讨论】:

    猜你喜欢
    • 2021-03-20
    • 2021-05-01
    • 2021-06-27
    • 2019-05-15
    • 2020-03-15
    • 2022-01-09
    • 2021-08-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多