тип 'int' не является подтипом ошибки типа 'String' в Dart между классами - PullRequest
0 голосов
/ 28 марта 2020

Это мой первый проект флаттера, и у меня возникают проблемы с добавлением элементов в список и отображением списка на новой странице.

У меня есть список кнопок на домашней странице, и я хочу отслеживать элементы, на которые пользователь нажал, как другой список элементов и отображать их на странице истории.

Эти данные хранятся в расширяемом списке «История». Новая страница отображается при нажатии, но страница истории выдает ошибку, упомянутую выше («тип« int »не является подтипом типа« Строка »)

Буду признателен, если вы решите эту проблему.

final List data = ["One", "Edison", "Three", "Tesla", "Five"];
List<int> history=[];

class HomePage extends StatefulWidget {
  @override
  _HomePageState createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: ListView.builder(
        itemCount: 5,
        itemBuilder: (BuildContext context, int i) => Column(
          children:  <Widget>[
            Card(child: new RaisedButton(color: Colors.white,    child: ListTile(title: Text(data[i], style: TextStyle(fontWeight: FontWeight.bold,fontSize: 18.0)
            ),
            ),
            onPressed: () {
                history.add(i); 
                //print(history);
              Navigator.push(
                context,
                new MaterialPageRoute(builder: (context) => new SecondScreen(i)
                ),
                );
              },
            ),
          ),
          ],
          ),
      )
    );
  }
}




class SecondScreen extends StatelessWidget {
  int ii;
  SecondScreen([this.ii]);


@override
    Widget build(BuildContext context) {
      return new MaterialApp(
      home: Scaffold(
        backgroundColor: Colors.blueAccent[50],
        appBar: new AppBar(
          backgroundColor: Colors.blue[900],
          title: new Text("Page"),
        ),
        body: SafeArea(
          child: Column(
            children: <Widget> [             
            Center(child: Card(
      child: Column(
        mainAxisSize: MainAxisSize.min,
        children: <Widget>[
           ListTile(
            leading: Icon(Icons.album),
            title: Text(data[ii]),
            subtitle: Text(value[ii]),
          ),
        ],
      ),
    ), 
             ),

        ],
        ),
      ),
      ),
      );
  }

  }


class HistoryPage extends StatefulWidget {
  @override
  _HistoryPageState createState() => _HistoryPageState();
}
class _HistoryPageState extends State<HistoryPage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: ListView.builder(
        itemCount: his.length,
        itemBuilder: (BuildContext context, int i) => Column(
          children:  <Widget>[


            Card(child: new RaisedButton(color: Colors.white,    child: ListTile(title: Text(history[i], style: TextStyle(fontWeight: FontWeight.bold,fontSize: 18.0)

            ),
            ),

            onPressed: () {
              int indexh = data.indexOf(history[i]);
              Navigator.push(
                context,
                new MaterialPageRoute(builder: (context) => new SecondScreen(indexh)
                ),
                );
              },
            ),

          ),           
          ],
          ),
      )
    );
  }
}

1 Ответ

0 голосов
/ 28 марта 2020

В классе State карта создается с помощью RaisedButton, чьим дочерним элементом является ListTile с заголовком: Text (history [i]).

Текстовый виджет нуждается в строке в качестве своего позиционного параметра, тогда как history - List целого числа. попробуйте использовать Text (history [i] .toString ())

...