当前位置: 首页 > 知识库问答 >
问题:

未创建SQFLite数据库

归明诚
2023-03-14

我已经尝试了一切我知道但不能解决这个问题

运行输出 :

在调试模式下启动 moto g 40 融合上的利布\主.飞镖...正在运行 Gradle 任务“组装演示”...√ 已构建版本\app\outputs\flutter-apk\app-debug.apk.D/颤动定位服务(30742):正在创建服务。D/颤振定位服务(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/MediaScanner 连接(30742):扫描/数据/用户/0/com.example.memory_place/缓存/04c048c7-d58f-497c-b050-fb56e943fc1b615751689670497232.mp4到空 D/缩略图(30742):原始 w:1080, h:1920 =

= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =处理笔势时引发了以下late error:LateInitializationError:Field ' _ current thumbnail @ 643317077 '尚未初始化。

抛出异常时,这是堆栈:#0 AddScreen_当前缩略图(包:memory_place/Screens/add_places_screen.dart)#1 AddScreen-build。SafePlace(包:memory_place/Screens/add_places_screen.dart:25:47)#2 AddScreen.build。(包:memory_place/Screens/add_places_screen.dart:64:15)#3_InkResponseState_handleTap(包装:颤振/src/材料/墨水井。省道:989:21)#4手势识别器。invokeCallback(包:flatter/src/gestures/recognizer.dart:198:24)#5 TapgestureRecogizer。handleTapUp(包:颤振/src/手势/轻拍。省道:608:11)#6基本姿势识别器_检查(包:颤振/src/手势/轻拍。飞镖:296:5)#7基本姿势识别器。handlePrimaryPointer(软件包:颤振/src/手势/轻拍。省道:230:7)#8 Primarypointer感知识别器。handleEvent(软件包:颤振/src/手势/识别器。dart:563:9)#9指针输出器_调度(包:flatter/src/signatures/pointer_router.dart:94:12)#10 PointerRouter._dispatchEventToRoutes。(软件包:flatter/src/signatures/pointer_router.dart:139:9)#11_LinkedHashMapMixin。forEach(dart:collection patch/compact_hash.dart:539:8)#12 PointerRouter_dispatchEventToRoutes(包:flatter/src/signatures/pointer_router.dart:137:18)#13 PointerRouter。路线(包:flutter/src/gestures/pointer_router.dart:123:7)#14手势绑定。handleEvent(包:颤振/src/手势/绑定。dart:439:19)#15手势绑定。dispatchEvent(包:flatter/src/gestures/binding.dart:419:22)#16渲染器绑定。dispatchEvent(包:flatter/src/rendering/binding.dart:322:11)#17手势绑定_立即用手点(包:颤振/src/手势/绑定。省道:374:7)#18手势绑定。handlePointerEvent(包:颤振/src/手势/绑定。省道:338:5)#19手势绑定_flushPointerEventQueue(包:颤振/src/手势/绑定。省道:296:7)#20手势绑定_handlePointerDataPacket(包:flatter/src/gests/binding.dart:279:7)#24_invoke1(dart:ui/hooks.dart:170:10)35; 25 PlatformDispatcher_dispatchPointerDataPacket(dart:ui/platform_dispatcher.dart:331:7)#26_DisPatchPointerDataSpacket(dart:ui/hooks.dart:94:31)(从dart中删除3帧:异步)处理程序:“onTap”识别器:TapGestureRecognitizer#12cd2调试所有者:GestureDetector状态:可能赢得的竞技场最终位置:偏移量(239.2,911.2)最终位置:偏置量(23p.2,11.2)按钮:1

DB帮助文件:

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);
  }
}

图像输入页面 :

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);
  }
}

添加地点屏幕:

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,
          )
        ],
      ),
    );
  }
}

共有1个答案

唐弘厚
2023-03-14

当您将变量声明为延迟时,您实际上是在指示它不会为 null。

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

您可以将“添加屏幕”组件更改为“有状态”截断,并在初始化状态函数中实例化_CurrentThumbnail。(甚至调用调用内部的呼叫当前图像

 类似资料:
  • [错误:flutter/lib/ui/ui_dart_state.cc(157)]未处理的异常:nosuchmethoderror:在null上调用了方法“to map”。E/Flutter(2893):接收器:null E/Flutter(2893):尝试调用:toMap() 我已经创建了数据库和insert操作,但是当我调用insert操作时,它给出了一个错误,即InsertNote方法是在N

  • 该API主要受Android ContentProvider的启发,其中典型的SQLite实现意味着在第一个请求时打开数据库一次,并保持其打开状态。 就我个人而言,我的Flutter应用程序中有一个全局参考数据库,以避免锁问题。如果多次调用,打开数据库应该是安全的。 如果引用丢失(并且数据库尚未关闭),只在小部件中保留引用可能会导致热重新加载问题。

  • 我有一个 Spring 引导 API,它使用 jpa 和 postgresql,并在我运行应用程序时自动创建表。 但出现以下错误消息: 这是我的应用程序。属性

  • 主要内容:创建非限制性数据库,创建限制性数据库命令用于在实例中创建数据库。所有数据库都是使用默认存储组创建的,该存储组是在创建实例时创建的。 在DB2中,所有数据库表都存储在中,后者使用各自的存储组。 创建非限制性数据库 命令用于创建非限制性数据库。 语法: 示例 假设要创建一个名称为“XYZ”的数据库 安装后,切换到用户才有权创建新数据库。根据安装的版本,可能会更改该用户名。 但DB2默认使用作为管理员用户。 查看目录,将看到一个新用户(最

  • 主要内容:使用Fauxton创建数据库,CouchDB使用cURL工具创建数据库在CouchDB中,数据库是存储文档的最外层结构。 CouchDB提供cURL实用程序来创建数据库。 您也可以使用的CouchDB Web界面。 使用Fauxton创建数据库 在网络浏览器中打开以下链接: 应该会看到类似下面的一个页面: 点击红色圆圈中的“Create Database”选项卡,创建一个名为“”的数据库。 它将显示一条消息,表示数据库已成功创建。可以在概览(Overview)选项卡

  • 在这节中,我们来学习如何在MariaDB中创建一个数据库。 创建一个名称为的数据库。 语法: 示例 或者指定使用默认的字符集来创建数据库: 注意,数据库名称不区分大小写。因此:,以及均表示同一个数据库。 显示数据库 命令用于查看创建的数据库。 语法: 使用MariaDB客户端,执行上面查询语句,得到以下结果 -