Для текстового виджета должна быть предоставлена ненулевая строка. ‘package: flutter/src/widgets/text.dart’: Неудачное утверждение: строка 360 поз 10: ‘данные != null’

#android #android-studio #flutter #dart

#Android #android-studio #flutter #dart

Вопрос:

: ОшибкаFlutter В текстовом виджете должна быть предоставлена ненулевая строка. ‘package: flutter/src/widgets/text.dart’: Неудачное утверждение: строка 360, позиция 10: ‘данные != null’

Было выдано другое исключение: для текстового виджета должна быть предоставлена ненулевая строка.

Это Main.dart

 import 'package:bheekho_foundation/widgets/app.dart';
import 'package:flutter/material.dart';

void main() {
  runApp(App());
}
  

Это App.dart

 import 'package:bheekho_foundation/screens/home.dart';
import 'package:flutter/material.dart';

class App extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: HomeScreen(),
    );
  }
}
  

Это Home.dart

 import 'dart:convert';    
import 'package:bheekho_foundation/models/request.dart';
import 'package:bheekho_foundation/services/request_service.dart';
import 'package:flutter/material.dart';


class HomeScreen extends StatefulWidget {
  @override
  _HomeScreenState createState() => _HomeScreenState();
}

class _HomeScreenState extends State<HomeScreen> {
  RequestService _requestService = RequestService();

  // ignore: unused_element
  Future<List<Request>> _getAllRequest() async {
    var result = await _requestService.getAllRequests();
    List<Request> _list = List<Request>();
    if (result != null) {
      var requests = json.decode(result.body);
      requests.forEach((request) {
        var model = Request();
        model.user_id = request['user_id'];
        model.concern = request['concern'];
        model.message = request['message'];
        setState(() {
          _list.add(model);
        });
      });
    }
    return _list;
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(
          title: Text("Bheekho App"),
        ),
        body: FutureBuilder<List<Request>>(
          future: _getAllRequest(),
          builder:
              (BuildContext context, AsyncSnapshot<List<Request>> snapshot) {
            if (snapshot.hasData) {
              return ListView.builder(
                  itemCount: snapshot.data.length,
                  itemBuilder: (context, index) {
                    return Column(
                      children: [
                        Card(
                          child: Text(snapshot.data[index].user_id),
                        ),
                      ],
                    );
                  });
            } else {
              return Container(
                child: Text('loading...'),
              );
            }
          },
        ));
  }
}
  

Это мой модельный запрос.dart

 class Request {
  // ignore: non_constant_identifier_names
  int request_id;
  // ignore: non_constant_identifier_names
  String user_id;
  String concern;
  String message;
}
  

Это Request_Service.dart

 import 'package:bheekho_foundation/repository/repository.dart';

class RequestService {
  Repository _repository;

  RequestService() {
    _repository = Repository();
  }

  getAllRequests() async {
    return await _repository.httpGet('users');
  }
}
  

Это репозиторий.dart

 import 'package:http/http.dart' as http;

class Repository {
  String _baseUrl = "http://localhost:8000/api";

  httpGet(String api) async {
    return await http.get(_baseUrl   "/"   api);
  }
}
  

Ошибка скриншота

Ответ №1:

Ваш snapshot.data[index].user_id, скорее всего, на данный момент равен нулю. Чтобы убедиться, что вы не присваиваете текстовому виджету значение null, вы можете изменить его на что-то вроде этого:

 Text(
    snapshot.data[index].user_id != null
        ? snapshot.data[index].user_id
        : ""
)
  

Это фактически проверяет, являются ли данные нулевыми, когда это не так, загружаются данные моментального снимка. В случае, если это так, он загружает пустую строку.