не работает - обмен функциями между двумя Stateful Widgets в отдельных файлах - PullRequest
0 голосов
/ 11 июня 2019

Я пытаюсь добавить элемент в класс списка и затем получить доступ к данным этого класса в другом файле.

У меня есть страница добавления формы и нажата кнопка 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

Спасибо

...