Я пытаюсь добавить элемент в класс списка и затем получить доступ к данным этого класса в другом файле.
У меня есть страница добавления формы и нажата кнопка add form
. Я хочу добавить новый элемент в класс списка List<Crime> crimes;
с заголовком, описанием и местоположением. Затем на моей странице с list_view я хочу получить доступ к этому списку и составить список виджетов, каждый из которых использует введенную информацию.
Ниже приведен класс Crime
:
//crime_model.dart
class Crime {
String title;
String location;
String description;
Crime({this.title,this.description,this.location});
}
и вот страница добавления сообщений - (ненужный код был удален)
//add_post_page.dart
import 'package:flutter/material.dart';
import 'profile_page.dart';
import 'home.dart';
import 'package:maps/models/crime.dart';
import 'package:maps/posts_list.dart';
import 'post_lists_improved.dart' as list_view;
class AddPostScaffold extends StatefulWidget{
State createState() => _AddPostState();
}
class _AddPostState extends State<AddPostScaffold>{
int _currentIndex = 0;
final titleController = TextEditingController();
final descriptionController = TextEditingController();
String location = "Edmonton, UK";
body: Padding(
padding: EdgeInsets.fromLTRB(8,85,8,0),
child:Column(
mainAxisSize : MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Padding(
padding: const EdgeInsets.fromLTRB(15 , 15,15,0),
child: Column(children: <Widget>[
new Container (
child: new Theme(
data: new ThemeData(
primaryColor: Colors.red,
primaryColorDark: Colors.redAccent,
),
child: Padding(
padding: EdgeInsets.fromLTRB(25,25,25,25),
child: new TextField(
controller: titleController,
maxLines: 1,
maxLength: 20,
decoration: new InputDecoration(
border: new OutlineInputBorder(
borderSide: new BorderSide(color: Colors.black)),
hintText: 'Type of crime',
helperText: 'e.g : Murder , Theft , Robbery , Vehicular Crime',
labelText: 'Type of crime',
prefixIcon: const Icon(
Icons.donut_large,
color: Colors.redAccent,
),
),
))
)
)
],
),
),
Padding(
padding: const EdgeInsets.fromLTRB(15,0,15,15),
child: Column(children: <Widget>[
new Container (
child: new Theme(
data: new ThemeData(
primaryColor: Colors.red,
primaryColorDark: Colors.redAccent,
),
child: Padding(
padding: EdgeInsets.all(25),
child: new TextField(
controller: descriptionController,
maxLines: null,
decoration: new InputDecoration(
border: new OutlineInputBorder(
borderSide: new BorderSide(color: Colors.black)),
hintText: 'Description',
helperText: 'SHORT SUMMARY',
labelText: 'Description',
prefixIcon: const Icon(
Icons.info,
color: Colors.redAccent,
),
),
))
)
)
],
),
),
Padding(
padding: const EdgeInsets.all(15),
child: Center(child:Container(
width: 300,
height: 75,
child: FlatButton(
child: const Text("Post Crime", style: TextStyle(color: Colors.white , fontSize: 20)),
и send data
в этом фрагменте должны использоваться функцией send data
для добавления элемента в класс
.
onPressed: ()async{
sendData(location,titleController.text,descriptionController.text);
Navigator.pop(context);
},
),
decoration: BoxDecoration(
color : Colors.black,
borderRadius: BorderRadius.all(Radius.circular(25)),
border: Border.all(color: Colors.black , style: BorderStyle.solid)
),),
))
],
)
),);
}
}
Ниже находится страница, где список виджетов будет
//posts_list.dart
import 'package:flutter/material.dart';
import 'add_post.dart';
import 'models/crime.dart';
class ViewPosts extends StatefulWidget {
State createState() => _ViewPostsState();
}
class _ViewPostsState extends State<ViewPosts> {
List<Crime> crimes = List();
sendData(location,title,description)async{
setState(() {
crimes.add(Crime(title: title, location: location, description: description));
});
}
@override
Widget build(BuildContext context) {
}
}
Я попытался импортировать страницу posts list
на страницу add posts
как import 'post_list.dart as list_view;
и использовать функцию в требуемом положении с list_view.ViewPosts.sendData(...)
, однако там указано sendData isn't defined for class ViewPosts
Спасибо