首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQFLite DataBase未创建

SQFLite DataBase未创建
EN

Stack Overflow用户
提问于 2022-06-04 06:36:23
回答 1查看 137关注 0票数 0

我试过了我所知道的一切,但没能解决这个问题。

运行输出:

在调试模式下在moto 40融合上启动lib\main.dart .运行Gradle任务‘assembleDebug’。√构建了build\app\outputs\颤振-apk\app-调试器。D/FlutterLocationService(30742):创建服务。D/FlutterLocationService(30742):绑定到位置服务。调试服务侦听ws://127.0.0.1:51746/KGrWp8utBGI=/ws同步文件到设备moto g 40融合E/SQLiteLog(30742):(1)没有这样的表:"SELECT * FROM placestore“I/AssistStructure(30742):扁平的最终辅助数据: 396字节,包含1个窗口,3个视图D/MediaScannerConnection(30742):扫描/data/user/0/com.example.memory_place/cache/04c048c7-d58f-497c-b050-fb56e943fc1b615751689670497232.mp4到null D/ThumbnailPlugin(30742):原始w:1080,h:1920 => 150,267E/颤振(30742):错误:flutter/lib/ui/ui_dart_state.cc(209个)未处理异常: FileSystemException:无法将文件复制到FileSystemException 5�5f��O���

手势===============================================================捕获的========异常在处理手势时引发了以下LateError : LateInitializationError:字段'_CurrentThumbnail@643317077‘尚未初始化。

当抛出异常时,这是堆栈:#0 (package:memory_place/Screens/add_places_screen.dart) #1 AddScreen.build.SafePlace (package:memory_place/Screens/add_places_screen.dart:25:47) #2 AddScreen.build。(package:memory_place/Screens/add_places_screen.dart:64:15) #3 _InkResponseState._handleTap #4 GestureRecognizer.invokeCallback (package:flutter/src/gestures/recognizer.dart:198:24) #5 TapGestureRecognizer.handleTapUp (package:flutter/src/gestures/tap.dart:608:11) #6 BaseTapGestureRecognizer._checkUp (打包:颤振/src/手势/点击)( (package:flutter/src/gestures/recognizer.dart:563:9) /src/.dart:296:5/.dart:296:5:230:7) #8 PrimaryPointerGestureRecognizer.handleEvent #9 PointerRouter._dispatch PointerRouter._dispatchEventToRoutes #10 PointerRouter._dispatchEventToRoutes。(package:flutter/src/gestures/pointer_router.dart:139:9) #11 _LinkedHashMapMixin.forEach #12 PointerRouter._dispatchEventToRoutes (package:flutter/src/gestures/pointer_router.dart:137:18) #13 PointerRouter.route (package:flutter/src/gestures/pointer_router.dart:123:7) #14 GestureBinding.handleEvent (包装:颤振/src/手势/binding.dart)::439:19) #15 (package:flutter/src/gestures/binding.dart:419:22) #16 RendererBinding.dispatchEvent (package:flutter/src/rendering/binding.dart:322:11) #17 GestureBinding._handlePointerEventImmediately (package:flutter/src/gestures/binding.dart:374:7) #18 GestureBinding.handlePointerEvent (package:flutter/src/gestures/binding.dart:338:5) #19 GestureBinding._flushPointerEventQueuesrc/ GestureBinding._handlePointerDataPacket /binding.dart:296:7) #20 GestureBinding._handlePointerDataPacket #24 _invoke1 (飞镖:ui/hooks.dart:170:10) #25 PlatformDispatcher._dispatchPointerDataPacket (飞镖:ui/platform_Dispatcher.dart:331:7) #26 _dispatchPointerDataPacket (飞镖:ui/hooks.dart:94:31)TapGestureRecognizer#12cd2 debugOwner: GestureDetector state:可能获胜竞技场finalPosition:偏移(239.2,( 911.2) finalLocalPosition:偏移(239.2,11.2)按钮:1按下点击

DB助手文件:

代码语言:javascript
复制
import 'package:sqflite/sqflite.dart' as sql;
import 'package:path/path.dart' as p;

class dbHelper{

  static Future<sql.Database> DataBase() async{
    return sql.openDatabase(p.join(await sql.getDatabasesPath(),'memory_place.db'),
        onCreate: (db, version) async{
      return await db.execute('CREATE TABLE placestore(id TEXT PRIMARY KEY, title TEXT, video TEXT, thumbnail TEXT)');
    },version: 1);

  }
  static Future<void> insert(String Table,Map<String,Object> data) async{
    final db = await dbHelper.DataBase();
    db.insert(
        Table,
        data,
        conflictAlgorithm: sql.ConflictAlgorithm.replace);
  }
  static Future<List<Map<String,dynamic>>> getData(String table) async{
    final db = await dbHelper.DataBase();
    return db.query(table);
  }
}

图像输入页面:

代码语言:javascript
复制
import 'dart:async';
import 'dart:io';
import 'dart:typed_data';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:image_picker/image_picker.dart';
import 'package:path_provider/path_provider.dart' as syspath;
import 'package:path/path.dart' as p;
import 'package:video_thumbnail/video_thumbnail.dart';

class ImageInput extends StatefulWidget {
  Function onSelected;
  ImageInput({required this.onSelected});
  @override
  State<ImageInput> createState() => _ImageInputState();
}

class _ImageInputState extends State<ImageInput> {
  XFile ? _referenceXFileVid;
  File? _referenceVidFile;

  Future<void> TakePic() async{
    final _imagePicker = ImagePicker();
    final NewFile =  await _imagePicker.pickVideo(
        source: ImageSource.camera,
        maxDuration: Duration(minutes: 1));

      setState(() {
        _referenceVidFile = File(NewFile!.path);
        _referenceXFileVid = NewFile;
      });
  }

  Future<Uint8List?> VideoThumbNail(XFile Video) async{
    final uint8list = await VideoThumbnail.thumbnailData(
      video: Video.path,
      imageFormat: ImageFormat.JPEG,
      maxWidth: 150,
      quality: 25,
    );

    return await uint8list;
  }



  @override
  Widget build(BuildContext context) {
    return Row(
      children: [
        Container(
          height: 267,
          width: 150,
          alignment: Alignment.center,
          decoration: BoxDecoration(
            border: Border.all(width: 1,color: Colors.grey),
          ),
          child: _referenceVidFile!= null ?
           FutureBuilder<Uint8List?>(
               future: VideoThumbNail(_referenceXFileVid!),
               builder: (context,uint8)  {
                 if(uint8.hasData){
                   final ImagePath = uint8.data;
                   final CurrentThumbImg =  Image.memory(ImagePath!,
                   height: 267,
                   width: 150,
                   fit: BoxFit.cover,);
                   SaveVidAndThumb(_referenceVidFile!,File.fromRawPath(ImagePath));
                   return CurrentThumbImg;
                 }else{
                   return Center(child: Text('Saumya Made Mistake',textAlign: TextAlign.center,));
                 }
               }) : Text('No Video Taken',textAlign: TextAlign.center,),
        ),
        SizedBox(width: 10,),

        Expanded(
          child: FlatButton.icon(onPressed: (){
              TakePic();
          },
              icon: Icon(Icons.camera),
              label: Text('Take Video'),
              textColor: Theme.of(context).primaryColor,),
        ),
      ],
    );
  }
  void SaveVidAndThumb(File Video,File Thumbnail) async{
    final appDir = await syspath.getApplicationDocumentsDirectory();
    final VideoPath = p.basename(Video.path);
    final ThumbPath = p.basename(Thumbnail.path);
    final Savedvideo = await Video.copy('${appDir.path}/$VideoPath');
    final SavedThumb = await Thumbnail.copy('${appDir.path}/$ThumbPath');
    widget.onSelected(Savedvideo,SavedThumb);
  }
}

添加位置屏幕:

代码语言:javascript
复制
import 'dart:io';
import 'package:memory_place/models/Video_format.dart';
import 'package:memory_place/providers/place_provider.dart';
import 'package:memory_place/widgets/Location_Input.dart';
import 'package:provider/provider.dart';
import 'package:flutter/material.dart';
import 'package:memory_place/widgets/Image_Input.dart';

class AddScreen extends StatelessWidget {
 TextEditingController _TitleTextController = TextEditingController();
 late File  _CurrentVideo;
 late File _CurrentThumbnail;

 void CallCurrentImage(File CurrentVideo,File CurrentThumbnail){
   if(CurrentVideo!=null){
     _CurrentVideo = CurrentVideo;
     _CurrentThumbnail = CurrentThumbnail;
   }
 }

  @override
  Widget build(BuildContext context) {

    void SafePlace(){
      if(_TitleTextController.text == null || _CurrentThumbnail == null){
        throw Text('Either Title or Image is Missing');
      }else {
        Provider.of<PlaceProvider>(context, listen: false).AddPlace(
            _TitleTextController.text,
            _CurrentVideo,
            _CurrentThumbnail);
        Navigator.pop(context);
      }
    }

    return Scaffold(
      appBar: AppBar(
        title: Text('Add Place Screen'),
      ),
      body: Column(
        crossAxisAlignment: CrossAxisAlignment.stretch,
        children: [
          Expanded(
              child:SingleChildScrollView(
                child: Padding(
                  padding: EdgeInsets.all(10.0),
                  child: Column(
                    children: [
                      TextField(
                        decoration: InputDecoration(label: Text('Title...')),
                        controller: _TitleTextController,
                      ),
                      SizedBox(height: 20,),
                      ImageInput(onSelected: CallCurrentImage),
                      SizedBox(height: 20,),
                      LocationInput(),
                    ],
                  ),
                ),
              ) ),

          RaisedButton.icon(
            onPressed: (){
              SafePlace();
            },
            icon: Icon(Icons.add),
            label: Text('Add Place'),
            elevation: 0,
            materialTapTargetSize: MaterialTapTargetSize.shrinkWrap,
            color: Theme.of(context).accentColor,
          )
        ],
      ),
    );
  }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-04 08:21:07

当您将一个变量声明为late时,实际上是指示它将不是null。

在代码中,您将_CurrentThumbnail变量声明为late,而不是实例化它。

您可以将AddScreen小部件更改为StatefulWidget,并在initState函数中实例化_CurrentThumbnail。(甚至在initState中调用CallCurrentImage )

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72497643

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档