将分数存储在 hive Flutter 上

问题描述

我想知道如何将我的测验分数存储在 hive 数据库中。我看了一堆视频,他们总是在 void main()async{} 上初始化 main.dart 上的代码。除了在 void main 中初始化之外,还有其他方法可以工作吗?并且。我知道我错过了我的应用程序中的很多代码和编码,我知道我会出错。但由于我不知道从哪里开始以及如何开始,我不知道我应该怎么做才能解决我的错误

这是我在测验页面中的代码

df.groupby('Group').filter(lambda x: x['dist'].notna().all())

和我的 pubspec.yaml

import 'dart:async';
import 'dart:convert';
import 'dart:developer';
import 'dart:io';
import 'package:baybay_app/Quiz/NextLevel class.dart';
import 'package:baybay_app/Quiz/QuizHome.dart';
import 'file:///C:/Users/me/AndroidStudioProjects/baybay_app/lib/Quiz/Results/ResultPage.dart';
import 'package:Flutter/material.dart';
import 'package:Flutter/services.dart';
import 'package:hive/hive.dart';
import 'package:path_provider/path_provider.dart' as path_provider;

import 'package:path_provider/path_provider.dart';

class Quizjson extends StatefulWidget {

  @override
  _QuizjsonState createState() => _QuizjsonState();
}

class _QuizjsonState extends State<Quizjson> {


  @override
  Widget build(BuildContext context) {


    return FutureBuilder(
        future: DefaultAssetBundle.of(context).loadString('assets/Sample.json',cache: false),builder: (context,snapshot){
          List mydata = json.decode(snapshot.data.toString());
          if(mydata == null){
            return Scaffold(
              body: Center(
                child: Text(
                  "Loading",),);
          }else{
            return quizpage(mydata: mydata);
          }

        }
    );
  }
}


class quizpage extends StatefulWidget {
  Box<int> marksBox;
  String roundName;
  var mydata;
  quizpage({Key key,@required this.mydata}): super(key: key);

  @override
  _quizpageState createState() => _quizpageState(mydata);
}

class _quizpageState extends State<quizpage> {
  var mydata;
  String roundName;

  _quizpageState(this.mydata);

  @override
  Widget build(BuildContext context) {
    SystemChrome.setPreferredOrientations(
        [DeviceOrientation.portraitDown,DeviceOrientation.portraitUp]);
    return Scaffold(
        body: Column(
          mainAxisAlignment: MainAxisAlignment.center,children: [
            Expanded(
              flex: 3,child: Container(
                  padding: EdgeInsets.all(20.0),alignment: Alignment.bottomLeft,child: Text(mydata[0][question.toString()])
              ),Expanded(
              flex: 6,child: Container(
                child: Column(
                    children: [
                      Row(
                          children: [
                            ChoiceButton("a"),ChoiceButton("b")
                          ]
                      ),Row(
                          children: [
                            ChoiceButton("c"),ChoiceButton("d"),]
                      )
                    ]
                ),Expanded(
              flex: 1,child: Container(
                alignment: Alignment.topCenter,child: Center(
                  child: Text(
                    showtimer,style: TextStyle(
                        fontSize: 20.0
                    ),],)
    );
  }


  Widget ChoiceButton(String k) {
    return Padding(
      padding: EdgeInsets.symmetric(
          vertical: 10.0,horizontal: 10.0),child: MaterialButton(
        onpressed: () => CheckAnswer(k),child: Text(
            mydata[1][question.toString()][k],style: TextStyle(
                color: Colors.white
            )),color: btncolor[k],);
  }

  Color colorsToShow = Colors.brown[700];
  Color right = Colors.greenAccent[700];
  Color wrong = Colors.redAccent[700];
  int mark = 0;
  int question = 1;
  int timer = 30;
  String showtimer = "30";
  bool canceltimer = false;
  bool isComplete = false;
 

  Map<String,Color> btncolor = {
    "a": Colors.brown[700],"b": Colors.brown[700],"c": Colors.brown[700],"d": Colors.brown[700],};
    Future HiveSample() async{


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

    
  }

  @override
  void setState(fn) {
    if (mounted) {
      super.setState(fn);
    }  
  }

  void starttimer() async {
    const onesec = Duration(seconds: 1);
    Timer.periodic(onesec,(Timer t) {
      setState(() {
        if (timer < 1) {
          t.cancel();
          NextQuestion();
        }
        else if (canceltimer == true) {
          t.cancel();
        }
        else {
          timer = timer - 1;
        }
        showtimer = timer.toString();
      });
    });
  }


  void NextQuestion() {
    canceltimer = false;
    timer = 30;
    setState(() {
      if (question < 10) {
        question++;
      }
      else {
        Navigator.of(context).pushReplacement(MaterialPageRoute(
          builder: (context) => ResultPage(mark: mark),));
      }
      btncolor["a"] = Colors.brown[700];
      btncolor["b"] = Colors.brown[700];
      btncolor["c"] = Colors.brown[700];
      btncolor["d"] = Colors.brown[700];
      isComplete = true;
    });
    starttimer();
  }


  void CheckAnswer(String k) async {
    final marksBox = await Hive.openBox('marks');
    if (mydata[2][question.toString()] == mydata[1][question.toString()][k]) {
      mark = mark + 5;
      colorsToShow = right;
      marksBox.put(question,mark);
    }

    else {
      colorsToShow = wrong;
    }
    setState(() {
      btncolor[k] = colorsToShow;
    });

    Timer(Duration(seconds: 2),NextQuestion);
  }


}

这是我的错误。我只是不知道在这里做什么。请帮助我,谢谢。

dependencies:
  Flutter:
    sdk: Flutter
  carousel_slider: ^2.3.1
  assets_audio_player: ^2.0.13+1
  hive: ^1.4.4+1
  path_provider: ^1.6.27
  hive_Flutter: ^0.3.1
  flip_card: ^0.4.4
  speech_recognition: ^0.3.0+1
  # The following adds the Cupertino Icons font to your application.
  # Use with the CupertinoIcons class for iOS style icons.
  cupertino_icons: ^1.0.0
dev_dependencies:
  Flutter_test:
    sdk: Flutter
  hive_generator: ^0.8.2
  build_runner: ^1.10.13

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)