我是堆栈溢出的新手,所以请随时告诉我我缺少的任何内容,以帮助大家解决我的问题。
我正在使用Dart和Flutter在Android Studio上创建一个基本的notes应用程序。我遇到的问题是
- 我一直收到一个红色错误屏幕,上面写着";类型"init"不是类型"string"的子类型">
- 以及当我尝试执行"List-todo=List((;"我得到了";启用空安全时,默认的"List"构造函数不可用">
我一直在努力解决这个问题,但已经被卡住/挣扎了一段时间。希望得到任何建议/如何处理这个问题。
这是我的代码,任何帮助都非常感谢:
import 'dart:ffi';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:units/main.dart';
import '../views/dreams_view.dart';
import '../presenter/dreams_presenter.dart';
import 'home_screen.dart';
class Log_Page extends StatefulWidget {
final UNITSPresenter presenter;
Log_Page(this.presenter, {required Key? key, required this.title}) : super(key: key);
final String title;
@override
_LogPageState createState() => _LogPageState();
}
void main ()=> runApp(MyApp());
class _LogPageState extends State<Log_Page> {
@override
Widget build(BuildContext context) {
// TODO: implement build
return MaterialApp(
home: Home(),
debugShowCheckedModeBanner: false,
theme: ThemeData(
primaryColor: Color(0xff2B2D2D),
scaffoldBackgroundColor: Color(0xff2B2D2D)
)
);
}
}
class Home extends StatefulWidget {
@override
_HomeState createState() => _HomeState();
}
class _HomeState extends State<Home> {
String input = " ";
List todo = List(); //todo = diary/log
//void initState (){
//todo.add("cycle");
//super.initState();
//}
@override
Widget build (BuildContext context) {
return SafeArea(
child: Scaffold(
appBar: AppBar(
elevation: 0.0,
centerTitle: true,
title: Text("Diary/Log",
style: TextStyle(
color: Colors.white,
fontSize: 35,
fontStyle: FontStyle.italic,
letterSpacing: 2,
),
),
),
floatingActionButton: FloatingActionButton(
backgroundColor: Colors.white,
child: Icon(Icons.add,color: Colors.red [500],size: 35, ),
onPressed: (){
showDialog (
context: context,
builder: (BuildContext context){
return AlertDialog(
//backgroundColor: Color(0xffF48C8C),
title: Text("Add Diary/Log"),
content: TextField(
decoration: InputDecoration(
hintText: "Diary/Log"
),
onChanged: (String value){
input = value;
},
),
actions: [
FlatButton(
onPressed: ()
{
setState(() {
todo.add(input);
});
Navigator.of(context).pop();
},
child: Text("Add",style: TextStyle(color: Colors.black),)
)
],
);
});
},
),
body: Padding (
padding: EdgeInsets.all(5),
child: ListView.builder(
itemCount: todo.length,
itemBuilder: (BuildContext context,int index){
return Dismissible(
key: Key(todo[index]),
child: Card(
elevation: 4,
margin: EdgeInsets.all(8),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(16),
),
child: ListTile(
title: Text(todo[index],
style: TextStyle(
color: Colors.black,
),),
trailing: IconButton(
icon: Icon(Icons.delete_forever_rounded, color: Colors.red,),
onPressed: ()
{
setState(() {
todo.removeAt(index);
});
},
),
) ,
)
);
}
),
),
),
);
}
}
想要一个简单的笔记应用程序/页面。
尝试指定列表type
,建议使用[]
初始化空列表,因为不赞成使用List()
初始化。
List<String> todo = [];
您错误地声明了数组,请尝试此
List<String> todo = [];
因此,您的代码中的问题是,您想要初始化使用以下代码的列表:
List todo = List();
你所做的就是构建了list的类。为了申报名单,你只需要写:
列表todo=[];
如果你想使用前面的方法,你需要记住这个构造函数不能在null安全代码中使用。使用List.filled创建一个非空列表。这需要一个填充值来初始化列表元素。要创建一个空列表,请对可增长列表使用[],对固定长度列表使用list.empty(或在运行时确定可增长性的情况下(。