我已经尝试了一切我知道但不能解决这个问题
运行输出 :
在调试模式下启动 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,
)
],
),
);
}
}
当您将变量声明为延迟
时,您实际上是在指示它不会为 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客户端,执行上面查询语句,得到以下结果 -