Я немного борюсь с флаттером. У меня есть два экрана сведений о виджетах, поэтому в первых сведениях у меня есть список, и я хочу отправить его на второй экран без использования навигатора.
Так что, если есть кто-то, кто может мне помочь, я буду очень благодарен.
Подробности :
List<String> _instructions = [];
class Details extends StatefulWidget {
@override
_DetailsState createState() => new _DetailsState();
}
class _DetailsState extends State<Details> {
Expanded(
child: Container(
margin: EdgeInsets.all(3),
child: OutlineButton(
highlightElevation: 21,
color: Colors.white,
shape: StadiumBorder(),
textColor: Colors.lightBlue,
child: Text(
'ENVOYER',
style: TextStyle(
fontSize: 16,
fontWeight: FontWeight.bold,
fontStyle: FontStyle.normal,
color: Colors.lightBlue,
),
),
borderSide: BorderSide(
color: Colors.lightBlue,
style: BorderStyle.solid,
width: 1),
onPressed: () {
},
),
),
),
}}
поэтому я хочу, чтобы при нажатии кнопки я отправлял свой список в следующий виджет без использования навигатора.
фрагмент кода может помочь описать проблему, которую вы пытаетесь решить. прямо сейчас, я не уверен, что у нас достаточно информации, чтобы быть полезным
@PedroMassango, я сделал это, проверь мой код.
Как вы хотите показать следующий виджет? Возможно, вы захотите использовать какой-нибудь шаблон управления архитектурой/состоянием!
я хочу отобразить содержимое списка, когда я нажал кнопку отправки "ПОСЛАТЕЛЬ"
вам нужно использовать конструктор.
вы можете использовать sharedpreferance, который представляет собой простой xml, принадлежащий приложению. И вот как вы можете установить это
Future<bool> setStringList(String key, List<String> value) =>
_setValue('StringList', key, value);
Future<bool> setStringList (
String key,
List<String> value
)
Для получения дополнительной информации здесь связь И вы можете получить свой список по
List<String> getStringList(String key) {
List<Object> list = _preferenceCache[key];
if (list != null && list is! List<String>) {
list = list.cast<String>().toList();
_preferenceCache[key] = list;
}
return list;
}
Также вы можете использовать скфлайт
Я думаю, что более подходящий подход должен быть похож на то, как фрагменты Android соединяются друг с другом, используя шаблон блока или поток основных сведений. Я создал пример репозитория, чтобы показать полную концепцию. Короче говоря, идея состоит в том, чтобы создать класс с StreamController внутри. Оба виджета будут иметь ссылку на экземпляр блока. Когда первый виджет хочет отправить данные второму, он добавляет новый элемент в Stream. Второй слушает поток и соответствующим образом обновляет его содержимое.
Внутри блока:
StreamController<String> _selectedItemController = new BehaviorSubject();
Stream<String> get selectedItem => _selectedItemController.stream;
void setSelected(String item) {
_selectedItemController.add(item);
}
Первый фрагмент:
class FragmentList extends StatelessWidget {
final Bloc bloc;
const FragmentList(
this.bloc, {
Key key,
}) : super(key: key);
@override
Widget build(BuildContext context) {
return StreamBuilder(
stream: bloc.selectedItem,
initialData: "",
builder: (BuildContext context, AsyncSnapshot<String> screenType) {
return ListView.builder(
itemBuilder: (context, index) {
return ListTile(
selected: bloc.items[index] == screenType.data,
title: Text(bloc.items[index]),
onTap: () {
bloc.setSelected(bloc.items[index]);
},
);
},
itemCount: bloc.items.length,
);
},
);
}
}
Второй фрагмент:
class FragmentDetails extends StatelessWidget {
final Bloc bloc;
const FragmentDetails(
this.bloc, {
Key key,
}) : super(key: key);
@override
Widget build(BuildContext context) {
return Center(
child: StreamBuilder(
initialData: "Nothing selected",
stream: bloc.selectedItem,
builder: (BuildContext context, AsyncSnapshot<String> screenType) {
final info = screenType.data;
return Text(info);
},
),
);
}
}
Предположим, у вас есть две страницы, а именно «page1.dart» и «page2.dart», обе из которых хотят получить доступ к одному и тому же списку:
Создайте еще один файл дротика «GlobalVariables.dart», внутри этого файла создайте класс gv.
Внутри этого класса gv создайте статический список, используя:
static List <String> listAnyList = [];
импортировать «GlobalVariables.dart» на 2 страницы, которым необходимо получить доступ к этому списку.
Теперь в page1.dart и page2.dart, вы можете использовать gv.listAnyList для доступа к «Глобальному списку».
Используйте «Глобальные статические переменные», если переменная требуется во многих файлах дартс, например. «Идентификатор пользователя», вы можете просто использовать gv.strUserID для доступа к нему на любых страницах, которые вы хотите.
Можете ли вы вставить свой код здесь? пожалуйста, отредактируйте свой вопрос с кодом, который вы пробовали. Чтобы вам было легче помочь.